minibo是一个用于教学的小型数据库系统,麻雀虽小五脏俱全,该项目包含了数据库的核心内容,并且代码量小,适合新手学习,最近由于需要学习c/cpp,因此打算从这个项目入手,本文就介绍编译运行miniob的方法。
下载源代码
首先去github下载源代码
GitHub - oceanbase/miniob: MiniOB is one mini database, helping developers to learn how database works.
如果github下载很慢可以去gitee上下载
miniob: fork from miniob (gitee.com)
编译的时候最好在linux环境下进行编译,我使用centos虚拟机进行编译(后来换成ubuntu子系统了),安装子系统的教程可以参考这篇博客
(8条消息) Win10 系统安装 Linux 子系统教程(WSL2 + Ubuntu 20.04 + Gnome 桌面 )_win10 linux_凌云飞鸿的博客-CSDN博客
linux编译环境初始化
在进行编译的时候我们需要初始化我们的编译环境,miniob的官方教程可以在下面的网址查看
MiniOB 简介 - MiniOB (oceanbase.github.io)
首先需要安装cmake,网上很多教程都是让你去官网下载,官网下载就是从github中下载,如果上不了github可以到看看下面的博客,博客中提供了百度网盘下载地址
(9条消息) centos7安装CMake3.21(离线安装)_centos 离线安装make_zhongxj183的博客-CSDN博客
按照博客里的顺序,我没有安装gcc(因为之前看系统里面已经有gcc了),而是先安装openssl,然后再安装cmake,然后就报错了
我们需要重新安装gcc,可能是系统自带的gcc不支持c++的编译,解决方法在下面这篇博客里
(9条消息) Cannot find a C++ compiler that supports both C++11 and the specified C++ flags. Please specify one_can not find a c++_饥饿小猪的博客-CSDN博客先安装gcc-c++
yum install -y gcc gcc-c++
然后再执行
./configure
如果下载很慢可以更换一下yum源,方法在下面的博客里
(9条消息) Centos7更换yum国内源教程_centos7更换yum源_tianles的博客-CSDN博客
接着再次尝试安装cmake的时候发现找不到openssl,刚刚明明已经安装过了,不过不起作用
使用yum再安装一次
yum install openssl-devel
然后再安装cmake就行了,编译的过程挺久的,编译完后查看cmake的版本,如果正常显示则表示安装成功
官方教程中说,建议gcc版本要在8.3以上,因此我们需要更新gcc
(9条消息) CentOS升级gcc到高版本(全部版本详细过程)_乞力马扎罗の黎明的博客-CSDN博客
我使用下面的命令进行更新
yum -y install centos-release-scl
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutilsscl enable devtoolset-9 bash
echo "source /opt/rh/devtoolset-9/enable" >>/etc/profile
此时查看gcc版本会发现已经更新到9.3.x了
至此准备工作都完成了
编译代码
按照官方教程,切换到项目根目录,然后执行
bash build.sh init
此时发现系统没有安装git
我们需要安装git,执行下面的命令进行安装
yum install -y git
接着安装的时候发现需要安装几个依赖库,安装依赖库的教程可以在oceanbase的官网找到,由于github访问较慢,所以我直接到gitee上下载
1.5 MiniOB 开发调试环境搭建-开发者入门教程-OceanBase文档中心-分布式数据库使用文档
安装jsoncpp
cd /data/miniob-main
git submodule add https://gitee.com/get-code-from-github/jsoncpp.git deps/jsoncpp
cd deps/jsoncpp
mkdir build
cd build
cmake -DJSONCPP_WITH_TESTS=OFF -DJSONCPP_WITH_POST_BUILD_UNITTEST=OFF ..
make
make install
安装libevent
cd /data/miniob-main
git submodule add https://gitee.com/zwwlyy/libevent.git deps/libevent
cd deps/libeventmkdir build
cd build
cmake .. -DEVENT__DISABLE_OPENSSL=ON
make
make install
安装googletest
cd /data/miniob-main
git submodule add https://gitee.com/xinzhige/googletest.git deps/googletest
cd deps/googletestmkdir build
cd build
cmake ..
make
make install
至此依赖库都已经安装完毕,可以开始编译项目
cd /data/miniob-main
mkdir build
cd build
cmake .. -DEBUG=ON
编译完后发现还是报错,后来就放弃centos,转而使用WSL在ubuntu20上进行编译了。
ubuntu上编译比centos简单很多,比如cmake和gcc,g++等等工具都可以直接使用apt install来安装。
需要在ubuntu上将之前的jsoncpp,googletest和libevent三个库重新安装一遍,除此之外,我们还需要安装MbedTLS库
cd /data/miniob-main
git submodule add https://gitee.com/kevinjen1031/mbedtls.git deps/MbedTLS
cd deps/MbedTLSmkdir build
cd build
cmake ..
make
make install
然后还需要安装openssl库
apt-get install libssl-dev
然后还需要安装benchmark
cd /data/miniob-main
git submodule add https://gitee.com/TaylorZhang/benchmark.git deps/benchmark
cd deps/benchmark
mkdir build
cd build
// 将之前下载的 deps/googletest 复制到 deps/benchmark 文件夹下
cmake .. -DCMAKE_BUILD_TYPE=RELEASE
make
make install
至此环境终于全部安装完毕,可以开始编译miniob了
cd /data/miniob-main
bash build.sh
此时又给我来了一个这样的报错
我定位到是代码中的这一句话有问题
我没读过代码,所以直接先将这一句话注释掉,然后编译成功,暂时先这么处理吧。
运行代码
编译完成后可以在bin目录下看到可执行文件
官方的教程在这里
如何运行 - MiniOB (oceanbase.github.io)
我们以最简单的方式运行
./observer -f ../../etc/observer.ini -P cli
我们可以通过命令行的方式和数据库进行交互,我们可以简单测试一下 CREATE TBALE 和 INSERT 语句。
CREATE TABLE t_date(id int, num int, price float, addr char, birthday date);
insert into t_basic values(1,1, 'a', 1.0);
insert into t_basic values(2,2, 'b', 2.0);
select * from t_basic;
这个数据库好像只能执行简单的sql语句,现在就算编译完成了,后续可以开始学习源代码啦。