写点什么

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

作者:StoneDB
  • 2023-07-11
    浙江
  • 本文字数:5660 字

    阅读完需:约 19 分钟

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


作者:双飞(花名:小鱼)

杭州电子科技大学在读硕士

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 makesudo apt install -y cmakesudo apt install -y build-essentialsudo apt install -y autoconfsudo apt install -y treesudo apt install -y bisonsudo apt install -y gitsudo apt install -y libtoolsudo apt install -y numactlsudo apt install -y python3-devsudo apt install -y opensslsudo apt install -y perlsudo apt install -y binutilssudo apt install -y libgmp-devsudo apt install -y libmpfr-devsudo apt install -y libmpc-devsudo apt install -y libisl-devsudo apt install -y zlib1g-devsudo apt install -y liblz4-devsudo apt install -y libbz2-devsudo apt install -y libzstd-devsudo apt install -y zstdsudo apt install -y lz4sudo apt install -y ncurses-devsudo apt install -y libsnappy-devsudo apt install -y libedit-devsudo apt install -y libaio-devsudo apt install -y libncurses5-dev sudo apt install -y libreadline-devsudo apt install -y libpam0g-devsudo apt install -y libicu-devsudo apt install -y libboost-devsudo apt install -y libgflags-devsudo apt install -y libjemalloc-devsudo apt install -y libssl-devsudo apt install -y pkg-config
复制代码

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

sudo apt install aptitudesudo 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.gztar -zxvf cmake-3.7.2.tar.gzcd cmake-3.7.2./bootstrap && make && make install/usr/local/bin/cmake --versionapt remove cmake -yln -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.gztar -zxvf make-3.82.tar.gzcd make-3.82./configure  --prefix=/usr/local/makemake && make installrm -rf /usr/local/bin/makeln -s /usr/local/make/bin/make /usr/local/bin/makemake --version
复制代码


3. 安装 marisa

git clone https://github.com/s-yata/marisa-trie.gitcd marisa-trieautoreconf -i./configure --enable-native-code --prefix=/usr/local/stonedb-marisasudo make && make install 
复制代码

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

root@htap-dev-64-2:/usr/local/stonedb-marisa/lib$ ls -ltotal 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.lalrwxrwxrwx 1 root root      18 Mar 20 16:25 libmarisa.so -> libmarisa.so.0.0.0lrwxrwxrwx 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.0drwxrwxr-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.gzcd 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 -ltotal 29352drwxr-xr-x 3 root root     4096 Mar 20 17:12 cmakedrwxr-xr-x 3 root root     4096 Mar 20 17:12 include-rw-r--r-- 1 root root 20555728 Mar 20 17:11 librocksdb.alrwxrwxrwx 1 root root       15 Mar 20 17:12 librocksdb.so -> librocksdb.so.6lrwxrwxrwx 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.gztar -zxvf boost_1_77_0.tar.gzcd 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 -ltotal 41612drwxrwxr-x 49 root root    4096 Mar 20 18:57 cmake-rw-rw-r--  1 root root   14648 Mar 20 18:56 libboost_atomic.alrwxrwxrwx  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.alrwxrwxrwx  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.alrwxrwxrwx  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.alrwxrwxrwx  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.alrwxrwxrwx  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.alrwxrwxrwx  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.alrwxrwxrwx  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.alrwxrwxrwx  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.alrwxrwxrwx  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.alrwxrwxrwx  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.alrwxrwxrwx  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.alrwxrwxrwx  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.alrwxrwxrwx  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.0cd googletestsudo mkdir buildcd buildsudo cmake .. -DBUILD_GMOCK=OFFsudo makesudo make install
复制代码

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

ls /usr/local/include/...... gtestls /usr/local/lib/ # 32-bit osls /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 stonedbgit checkout -b 8.0 origin/stonedb-8.0-devmkdir buildcd buildmkdir install8 mysql8cd mysql8cmake  ../../ \-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=0make -j`nproc`make install -j`nproc`
复制代码


第四步:启动 StoneDB

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

cd ../install8### 新建目录sudo mkdir data binlog log tmp redolog undolog
### 配置my.cnfsudo cp ../../scripts/my.cnf.sample my.cnfsudo sed -i "s|YOUR_ABS_PATH|$(pwd)|g" my.cnf
### 初始化StoneDBsudo ./bin/mysqld --defaults-file=./my.cnf --initialize-insecure
### 启动StoneDBsudo ./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 用户群给我们反馈。


加入 StoneDB 社区


Github:https://github.com/stoneatom/stonedb

Gitee:https://gitee.com/StoneDB/stonedb

社区官网:https://stonedb.io/

哔哩哔哩:https://space.bilibili.com/1154290084

Twitter:https://twitter.com/StoneDataBase

Linkedin:https://www.linkedin.com/in/stonedb/






发布于: 刚刚阅读数: 6
用户头像

StoneDB

关注

https://github.com/stoneatom/stonedb 2022-05-07 加入

MySQL高性能分析加速器。 企业级一体化实时HTAP开源数据库。 100%兼容MySQL,高性能高可用。 针对热数据、小数据和宽数据的分析加速器。

评论

发布
暂无评论
如何在 Ubuntu 22.04 下编译 StoneDB for MySQL 8.0 | StoneDB 使用教程 #1_数据库_StoneDB_InfoQ写作社区