编译运行miniob最小数据库系统

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-binutils

scl 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/libevent

mkdir 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/googletest

mkdir 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/MbedTLS

mkdir 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语句,现在就算编译完成了,后续可以开始学习源代码啦。

相关推荐
SelectDB20 分钟前
5000+ 中大型企业首选的 Doris,在稳定性的提升上究竟花了多大的功夫?
大数据·数据库·apache
路多辛22 分钟前
Golang database/sql 包深度解析(二):连接池实现原理
数据库·sql·golang
SimonKing32 分钟前
Mybatis批量插入,形式不同性能也不同
数据库·后端·程序员
杰克尼2 小时前
MYSQL-175. 组合两个表
数据库·mysql
DemonAvenger2 小时前
MySQL索引原理深度解析与优化策略实战
数据库·mysql·性能优化
189228048612 小时前
NY270NY273美光固态闪存NY277NY287
服务器·网络·数据库·科技·性能优化
星霜笔记6 小时前
Docker 部署 MariaDB+phpMyAdmin+Nextcloud 完整教程
运维·数据库·docker·容器·mariadb
wyiyiyi11 小时前
【Web后端】Django、flask及其场景——以构建系统原型为例
前端·数据库·后端·python·django·flask
天宇_任12 小时前
Mysql数据库迁移到GaussDB注意事项
数据库·mysql·gaussdb
xiep143833351015 小时前
Ubuntu 安装带证书的 etcd 集群
数据库·etcd