如何在 Ubuntu 22.04 下编译 StoneDB for MySQL 8.0 | StoneDB 使用教程 #1

news2024/11/8 19:39:19

作者:双飞(花名:小鱼)
杭州电子科技大学在读硕士

StoneDB 内核研发实习生

大家好,我是 StoneDB 的实习生小鱼,目前正在做 StoneDB 8.0 内核升级相关的一些事情。刚开始接触数据库开发没多久,在 Ubuntu 22.04 下编译 StoneDB 8.0 时踩了不少坑。比如重装了 make、cmake,到后来发现没必要,还有用 gcc-11(推荐用 gcc-9 一次编译通过) 通过源码来编译 RocksDB 等库的时候也踩了不少坑,不过在同事的协助下都解决了,并把这个过程中遇到的一些问题形成了一篇编译指南,记录在 Ubuntu22.04 下编译 StoneDB 8.0 的一些心得,希望其它同学能更轻松顺利的编译使用 StoneDB 8.0。

本文说明了如何在Ubuntu 22.04 的环境下编译 StoneDB for MySQL 8.0

编译工具以及第三方库的版本要求如下:

  • GCC 9.4.0

  • Make 3.82 or later

  • CMake 3.7.2 or later

  • marisa 0.77

  • RocksDB 6.12.6

  • Boost 1.77

以下命令的执行可能会遇到权限问题,建议在管理员权限下运行,或者使用 sudo

第一步:安装依赖包

sudo apt install -y gcc 
sudo apt install -y g++
sudo apt install -y make
sudo apt install -y cmake
sudo apt install -y build-essential
sudo apt install -y autoconf
sudo apt install -y tree
sudo apt install -y bison
sudo apt install -y git
sudo apt install -y libtool
sudo apt install -y numactl
sudo apt install -y python3-dev
sudo apt install -y openssl
sudo apt install -y perl
sudo apt install -y binutils
sudo apt install -y libgmp-dev
sudo apt install -y libmpfr-dev
sudo apt install -y libmpc-dev
sudo apt install -y libisl-dev
sudo apt install -y zlib1g-dev
sudo apt install -y liblz4-dev
sudo apt install -y libbz2-dev
sudo apt install -y libzstd-dev
sudo apt install -y zstd
sudo apt install -y lz4
sudo apt install -y ncurses-dev
sudo apt install -y libsnappy-dev
sudo apt install -y libedit-dev
sudo apt install -y libaio-dev
sudo apt install -y libncurses5-dev 
sudo apt install -y libreadline-dev
sudo apt install -y libpam0g-dev
sudo apt install -y libicu-dev
sudo apt install -y libboost-dev
sudo apt install -y libgflags-dev
sudo apt install -y libjemalloc-dev
sudo apt install -y libssl-dev
sudo apt install -y pkg-config

libssl-dev可能安装不成功,你可以使用aptitude安装,安装过程中的选项要选择n y y

sudo apt install aptitude
sudo aptitude install libssl-dev...
# type n y y

第二步:安装第三方库

StoneDB 依赖 marisa、rocksdb、boost,在编译 marisa、rocksdb、boost 时,建议指定安装路径。示例中我们指定了 marisa、rocksdb、boost 的安装路径,你可以根据自己的需求更改安装路径。

1. 安装 cmake

注意检查你的 cmake 版本,如果你的cmake 版本 < 3.72, 安装 cmake

wget https://cmake.org/files/v3.7/cmake-3.7.2.tar.gz
tar -zxvf cmake-3.7.2.tar.gz
cd cmake-3.7.2
./bootstrap && make && make install
/usr/local/bin/cmake --version
apt remove cmake -y
ln -s /usr/local/bin/cmake /usr/bin/
cmake --version

如果你的gcc版本过高, 可能导致编译失败. 你可以在cmake-3.72/Source/cmServerProtocal.cxx的文件开头加上#include <limits>来解决这个问题.

#include <algorithm>
#include <string>
#include <vector>
#include <limits>

2. 安装 make

注意检查你的Make版本,如果你的make版本 < 3.82, 安装 make

wget http://mirrors.ustc.edu.cn/gnu/make/make-3.82.tar.gz
tar -zxvf make-3.82.tar.gz
cd make-3.82
./configure  --prefix=/usr/local/make
make && make install
rm -rf /usr/local/bin/make
ln -s /usr/local/make/bin/make /usr/local/bin/make
make --version

3. 安装marisa

git clone https://github.com/s-yata/marisa-trie.git
cd marisa-trie
autoreconf -i
./configure --enable-native-code --prefix=/usr/local/stonedb-marisa
sudo make && make install 

在这个例子中marisa的安装路径是/usr/local/stonedb-marisa. 你可以根据实际情况修改路径. 在这一步中, /usr/local/stonedb-marisa/lib目录中的内容如下.

root@htap-dev-64-2:/usr/local/stonedb-marisa/lib$ ls -l
total 4136
-rw-r--r-- 1 root root 2947618 Mar 20 16:25 libmarisa.a
-rwxr-xr-x 1 root root     967 Mar 20 16:25 libmarisa.la
lrwxrwxrwx 1 root root      18 Mar 20 16:25 libmarisa.so -> libmarisa.so.0.0.0
lrwxrwxrwx 1 root root      18 Mar 20 16:25 libmarisa.so.0 -> libmarisa.so.0.0.0
-rwxr-xr-x 1 root root 1273936 Mar 20 16:25 libmarisa.so.0.0.0
drwxrwxr-x 2 root root    4096 Mar 20 16:25 pkgconfig

4. 安装RocksDB

wget https://github.com/facebook/rocksdb/archive/refs/tags/v6.12.6.tar.gz 
tar -zxvf v6.12.6.tar.gz
cd rocksdb-6.12.6

sudo cmake ./ \
  -DCMAKE_BUILD_TYPE=Release \
  -DCMAKE_INSTALL_PREFIX=/usr/local/stonedb-gcc-rocksdb \
  -DCMAKE_INSTALL_LIBDIR=/usr/local/stonedb-gcc-rocksdb \
  -DWITH_JEMALLOC=ON \
  -DWITH_SNAPPY=ON \
  -DWITH_LZ4=ON \
  -DWITH_ZLIB=ON \
  -DWITH_ZSTD=ON \
  -DUSE_RTTI=ON \
  -DROCKSDB_BUILD_SHARED=ON \
  -DWITH_GFLAGS=OFF \
  -DWITH_TOOLS=OFF \
  -DWITH_BENCHMARK_TOOLS=OFF \
  -DWITH_CORE_TOOLS=OFF 

sudo make -j`nproc`
sudo make install -j`nproc`

你的gcc版本可能过高, 可以将你的 CMakeLists.txt 的 310-317 行改成下方这样.

if(FAIL_ON_WARNINGS)
  if(MSVC)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /WX")
  else() # assume GCC
   # set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror")
  endif()
endif()

在本例中RocksDB的安装目录为/usr/local/stonedb-gcc-rocksdb. 你可以根据实际情况修改路径. 在这一步中, /usr/local/stonedb-gcc-rocksdb目录中文件如下

root@htap-dev-64-2:/usr/local/stonedb-gcc-rocksdb$ ls -l
total 29352
drwxr-xr-x 3 root root     4096 Mar 20 17:12 cmake
drwxr-xr-x 3 root root     4096 Mar 20 17:12 include
-rw-r--r-- 1 root root 20555728 Mar 20 17:11 librocksdb.a
lrwxrwxrwx 1 root root       15 Mar 20 17:12 librocksdb.so -> librocksdb.so.6
lrwxrwxrwx 1 root root       20 Mar 20 17:12 librocksdb.so.6 -> librocksdb.so.6.12.6
-rw-r--r-- 1 root root  9490272 Mar 20 17:12 librocksdb.so.6.12.6

5. 安装Boost

wget https://sourceforge.net/projects/boost/files/boost/1.77.0/boost_1_77_0.tar.gz
tar -zxvf boost_1_77_0.tar.gz
cd boost_1_77_0
./bootstrap.sh --prefix=/usr/local/stonedb-boost177
./b2 install --with=all

在本例中boost的安装目录为/usr/local/stonedb-boost. 你可以根据实际情况修改路径. 在这一步中, /usr/local/stonedb-boost/lib目录中的内容如下.

root@htap-dev-64-2:/usr/local/stonedb-boost177/lib$ ls -l
total 41612
drwxrwxr-x 49 root root    4096 Mar 20 18:57 cmake
-rw-rw-r--  1 root root   14648 Mar 20 18:56 libboost_atomic.a
lrwxrwxrwx  1 root root      25 Mar 20 18:57 libboost_atomic.so -> libboost_atomic.so.1.77.0
-rwxrwxr-x  1 root root   22248 Mar 20 18:57 libboost_atomic.so.1.77.0
-rw-rw-r--  1 root root  181638 Mar 20 18:56 libboost_chrono.a
lrwxrwxrwx  1 root root      25 Mar 20 18:57 libboost_chrono.so -> libboost_chrono.so.1.77.0
-rwxrwxr-x  1 root root   55000 Mar 20 18:57 libboost_chrono.so.1.77.0
-rw-rw-r--  1 root root  166894 Mar 20 18:56 libboost_container.a
lrwxrwxrwx  1 root root      28 Mar 20 18:57 libboost_container.so -> libboost_container.so.1.77.0
-rwxrwxr-x  1 root root  111912 Mar 20 18:57 libboost_container.so.1.77.0
-rw-rw-r--  1 root root    6874 Mar 20 18:56 libboost_context.a
lrwxrwxrwx  1 root root      26 Mar 20 18:57 libboost_context.so -> libboost_context.so.1.77.0
-rwxrwxr-x  1 root root   16584 Mar 20 18:57 libboost_context.so.1.77.0
-rw-rw-r--  1 root root  275376 Mar 20 18:56 libboost_contract.a
lrwxrwxrwx  1 root root      27 Mar 20 18:57 libboost_contract.so -> libboost_contract.so.1.77.0
-rwxrwxr-x  1 root root  148672 Mar 20 18:57 libboost_contract.so.1.77.0
-rw-rw-r--  1 root root  178370 Mar 20 18:56 libboost_coroutine.a
lrwxrwxrwx  1 root root      28 Mar 20 18:57 libboost_coroutine.so -> libboost_coroutine.so.1.77.0
-rwxrwxr-x  1 root root   84440 Mar 20 18:57 libboost_coroutine.so.1.77.0
-rw-rw-r--  1 root root    1458 Mar 20 18:56 libboost_date_time.a
lrwxrwxrwx  1 root root      28 Mar 20 18:57 libboost_date_time.so -> libboost_date_time.so.1.77.0
-rwxrwxr-x  1 root root   15184 Mar 20 18:57 libboost_date_time.so.1.77.0
-rw-rw-r--  1 root root    1654 Mar 20 18:57 libboost_exception.a
-rw-rw-r--  1 root root  249818 Mar 20 18:56 libboost_fiber.a
lrwxrwxrwx  1 root root      24 Mar 20 18:56 libboost_fiber.so -> libboost_fiber.so.1.77.0
-rwxrwxr-x  1 root root  107648 Mar 20 18:56 libboost_fiber.so.1.77.0
-rw-rw-r--  1 root root  520738 Mar 20 18:56 libboost_filesystem.a
lrwxrwxrwx  1 root root      29 Mar 20 18:56 libboost_filesystem.so -> libboost_filesystem.so.1.77.0
-rwxrwxr-x  1 root root  178288 Mar 20 18:56 libboost_filesystem.so.1.77.0
-rw-rw-r--  1 root root 1015048 Mar 20 18:57 libboost_graph.a
lrwxrwxrwx  1 root root      24 Mar 20 18:56 libboost_graph.so -> libboost_graph.so.1.77.0
-rwxrwxr-x  1 root root  525440 Mar 20 18:56 libboost_graph.so.1.77.0
-rw-rw-r--  1 root root  250402 Mar 20 18:56 libboost_iostreams.a
lrwxrwxrwx  1 root root      28 Mar 20 18:56 libboost_iostreams.so -> libboost_iostreams.so.1.77.0
-rwxrwxr-x  1 root root  129440 Mar 20 18:56 libboost_iostreams.so.1.77.0
-rw-rw-r--  1 root root  478396 Mar 20 18:57 libboost_json.a
lrwxrwxrwx  1 root root      23 Mar 20 18:56 libboost_json.so -> libboost_json.so.1.77.0
-rwxrwxr-x  1 root root  329512 Mar 20 18:56 libboost_json.so.1.77.0
-rw-rw-r--  1 root root 3158276 Mar 20 18:57 libboost_locale.a
lrwxrwxrwx  1 root root      25 Mar 20 18:56 libboost_locale.so -> libboost_locale.so.1.77.0
-rwxrwxr-x  1 root root 1177200 Mar 20 18:56 libboost_locale.so.1.77.0

6. 安装Gtest

sudo git clone https://github.com/google/googletest.git -b release-1.12.0
cd googletest
sudo mkdir build
cd build
sudo cmake .. -DBUILD_GMOCK=OFF
sudo make
sudo make install

默认安装路径为/usr/local/.

ls /usr/local/include/
...... gtest
ls /usr/local/lib/ # 32-bit os
ls /usr/local/lib64/ # 64-bit os
...... cmake  libgtest.a  libgtest_main.a

第三步:编译StoneDB

现在StoneDB有三个分支: StoneDB-5.6 (for MySQL 5.6)、 StoneDB-5.7 (for MySQL 5.7) and StoneDB-8.0 (for MySQL 8.0). 本文安装的是StoneDB-8.0. 在本例中源代码保存在/目录中.

cd /
git clone https://github.com/stoneatom/stonedb.git

在编译前, 像下文一样更改编译脚本:

你可以根据自己的需求将安装目录更改为你的实际安装目录, 本例中用的是/stonedb/,记得将marisa, RocksDB, 和 Boost的路径改为你的这三个库的实际安装路径.

cd stonedb
git checkout -b 8.0 origin/stonedb-8.0-dev
mkdir build
cd build
mkdir install8 mysql8
cd mysql8
cmake  ../../ \
-DCMAKE_BUILD_TYPE=Debug \
-DCMAKE_INSTALL_PREFIX=/stonedb/build/install8 \
-DMYSQL_DATADIR=/stonedb/build/install8/data \
-DSYSCONFDIR=/stonedb/build/install8 \
-DMYSQL_UNIX_ADDR=/stonedb/build/install8/tmp/mysql.sock \
-DWITH_BOOST=/usr/local/stonedb-boost177  \
-DWITH_MARISA=/usr/local/stonedb-marisa \
-DWITH_ROCKSDB=/usr/local/stonedb-gcc-rocksdb \
-DDOWNLOAD_BOOST=0
make -j`nproc`
make install -j`nproc`

第四步:启动StoneDB

你需要手动创建几个目录, 然后初始化并启动StoneDB. 你还需要填写你的配置文件my.cnf, 包括安装目录和端口.

cd ../install8
### 新建目录
sudo mkdir data binlog log tmp redolog undolog

### 配置my.cnf
sudo cp ../../scripts/my.cnf.sample my.cnf
sudo sed -i "s|YOUR_ABS_PATH|$(pwd)|g" my.cnf

### 初始化StoneDB
sudo ./bin/mysqld --defaults-file=./my.cnf --initialize-insecure

### 启动StoneDB
sudo ./bin/mysqld --user=root &

第五步:登录 StoneDB

./bin/mysql -uroot
### 设置用户 root 的密码为 'stonedb123'
mysql> alter user 'root'@'localhost' identified by 'stonedb123';
Query OK, 0 rows affected
### 允许远程访问
mysql> use mysql;
mysql> update user set host='%' where user='root';

以上就是在 Ubuntu 22.04 下编译 StoneDB for MySQL 8.0 的方式,本文也同步在我们的官网上,如果有更多疑问可以查看 StoneDB 的官网,或者加入 StoneDB 用户群给我们反馈。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/819193.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第55步 深度学习图像识别:CNN特征层和卷积核可视化(TensorFlow)

基于WIN10的64位系统演示 一、写在前面 &#xff08;1&#xff09;CNN可视化 在理解和解释卷积神经网络&#xff08;CNN&#xff09;的行为方面&#xff0c;可视化工具起着重要的作用。以下是一些可以用于可视化的内容&#xff1a; &#xff08;a&#xff09;激活映射&…

多目标关联(分配)最近邻法

多目标关联&#xff08;分配&#xff09;最近邻法 最近邻数据关联 适用于两帧图片的中多目标位置关联&#xff0c;目标轨迹与新目标之间的关联、固定位置下的动目标跟踪关联等问题。 新目标与被跟踪目标的预测位置“最邻近”的观测点作为与航迹相关联的观测。 如有三批目标T…

活字格性能优化技巧-如何在大规模数据量的场景下提升数据访问效率

在上节内容中我们介绍了如何利用数据库主键提升访问性能&#xff0c;本节内容我们继续为大家介绍如何在大规模数据量的场景下提升数据访问效率。 在开始之前先做个小小的实验&#xff1a; 1. 准备一张数据表&#xff0c;内置1000W行记录。 2. 直观感受一下这个表的规模。使用…

数据结构入门指南:单链表(附源码)

目录 前言 尾删 头删 查找 位置前插入 位置后插入 位置删除 位置后删除 链表销毁 总结 前言 前边关于链表的基础如果已经理解透彻&#xff0c;那么接下来就是对链表各功能的实现&#xff0c;同时也希望大家能把这部分内容熟练于心&#xff0c;这部分内容对有关链表部分的…

CustomeG6-canvas

目录 简介 scss 快速上手 语雀 简介 antv/g6是一款基于JavaScript的图形可视化引擎&#xff0c;由阿里巴巴的AntV团队开发。 创建各种类型的图形&#xff0c;如流程图、关系图、树形图等。 G6采用了自己的绘图模型和渲染引擎&#xff0c;使其具备高性能的图形渲染能力。…

npm更新和管理已发布的包

目录 1、更改包的可见性 1.1 将公共包设为私有 ​编辑 使用网站 使用命令行 1.2 将私有包公开 使用网站 使用命令行 2、将协作者添加到用户帐户拥有的私有包 2.1 授予对Web上私有用户包的访问权限 2.2 从命令行界面授予私有包访问权限 2.3 授予对私有组织包的访问权限…

InfiniBand,到底是个啥?

对于InfiniBand&#xff0c;很多搞数通的同学肯定不会陌生。 进入21世纪以来&#xff0c;随着云计算、大数据的不断普及&#xff0c;数据中心获得了高速发展。而InfiniBand&#xff0c;就是数据中心里的一项关键技术&#xff0c;地位极为重要。 尤其是今年以来&#xff0c;以Ch…

春秋云镜 CVE-2021-32682

春秋云镜 CVE-2021-32682 elFinder RCE 靶标介绍 elFinder是一套基于Drupal平台的、开源的AJAX文件管理器。该产品提供多文件上传、图像缩放等功能;elFinder 存在安全漏洞&#xff0c;攻击者可利用该漏洞在托管elFinder PHP连接器的服务器上执行任意代码和命令。 启动场景 漏…

金蝶管易云 X Hologres:新一代全渠道电商ERP最佳实践

业务简介 金蝶管易云是金蝶集团旗下专注提供电商企业管理软件服务的子公司&#xff0c;成立于2008年&#xff0c;是国内最早的电商ERP服务商之一&#xff0c;目前已与300主流电商平台建有合作关系&#xff0c;以企业数据为驱动&#xff0c;深度融合线上线下数据&#xff0c;为…

pytorch学习——正则化技术——丢弃法(dropout)

一、概念介绍 在多层感知机&#xff08;MLP&#xff09;中&#xff0c;丢弃法&#xff08;Dropout&#xff09;是一种常用的正则化技术&#xff0c;旨在防止过拟合。&#xff08;效果一般比前面的权重衰退好&#xff09; 在丢弃法中&#xff0c;随机选择一部分神经元并将其输出…

HCIP中期实验

1、该拓扑为公司网络&#xff0c;其中包括公司总部、公司分部以及公司骨干网&#xff0c;不包含运营商公网部分。 2、设备名称均使用拓扑上名称改名&#xff0c;并且区分大小写。 3、整张拓扑均使用私网地址进行配置。 4、整张网络中&#xff0c;运行OSPF协议或者BGP协议的设备…

Hadoop 之 Hive 4.0.0-alpha-2 搭建(八)

Hadoop 之 Hive 搭建与使用 一.Hive 简介二.Hive 搭建1.下载2.安装1.解压并配置 HIVE2.修改 hive-site.xml3.修改 hadoop 的 core-site.xml4.启动 三.Hive 测试 一.Hive 简介 Hive 是基于 Hadoop 的数据仓库工具&#xff0c;可以提供类 SQL 查询能力 二.Hive 搭建 1.下载 H…

linux 安装FTP

检查是否已经安装 $] rpm -qa |grep vsftpd vsftpd-3.0.2-29.el7_9.x86_64出现 vsftpd 信息表示已经安装&#xff0c;无需再次安装 yum安装 $] yum -y install vsftpd此命令需要root执行或有sudo权限的账号执行 /etc/vsftpd 目录 ftpusers # 禁用账号列表 user_list # 账号列…

【Ajax】笔记-设置CORS响应头实现跨域

CORS CORS CORS是什么&#xff1f; CORS(Cross-Origin Resource Sharing),跨域资源共享。CORS是官方的跨域解决方案&#xff0c;它的特点是不需要在客户端做任何特殊的操作&#xff0c;完全在服务器中进行处理&#xff0c;支持get和post请求。跨域资源共享标准新增了一组HTTP首…

VSCode格式化shell脚本

安装格式化插件&#xff1a;shell-format 用VSCode打开shell脚本之后&#xff0c;按格式化快捷键CtrlAltF&#xff0c;会提示没有格式化shell的工具&#xff0c;然后安装插件&#xff0c;我装的是这个插件&#xff1a;shell-format。 介绍&#xff1a;https://marketplace.vis…

2.C语言数据类型

常量与变量 1.**常量&#xff1a;**程序运行中&#xff0c;值不改变的量 变量&#xff1a;int num5&#xff1b;值可以变的量 2 C语言三种简单数据类型&#xff1a;整型&#xff0c;实型&#xff0c;字符型 %c %d %ld %s %f整型-进制的转换 **1.十进制&#xff1a;**默认的进…

SpringBoot使用JKS或PKCS12证书实现https

SpringBoot使用JKS或PKCS12证书实现https 生成JKS类型的证书 可以利用jdk自带的keytool工具来生成证书文件&#xff0c; 默认生成的是JKS证书 cmd命令如下: 执行如下命令&#xff0c;并按提示填写证书内容&#xff0c;最后会生成server.keystore文件 keytool -genkey tomcat…

ChatGPT在商业世界中的创新应用:颠覆传统营销与客户关系管理

&#x1f337;&#x1f341; 博主 libin9iOak带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——libin9iOak的博客&#x1f390; &#x1f433; 《面试题大全》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33…

14、容器初始化器和配置环境后处理器

容器初始化器和配置环境后处理器 容器初始化器 与传统Spring的容器后处理器&#xff08;也可对容器做一些定制&#xff09;对比&#xff0c;此处的容器初始化器的执行时机要更早一些。 容器初始化器负责可对Spring容器执行初始化定制。 就是在启动项目的时候&#xff0c;在容…