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

相关推荐
云飞云共享云桌面1 分钟前
高性能图形工作站的资源如何共享给10个SolidWorks研发设计用
linux·运维·服务器·前端·网络·数据库·人工智能
2501_927993539 分钟前
SQL Server 2022安装详细教程(图文详解,非常详细)
数据库·sqlserver
星火s漫天11 分钟前
第一篇: 使用Docker部署flask项目(Flask + DB 容器化)
数据库·docker·flask
xcLeigh15 分钟前
Python 项目实战:用 Flask 实现 MySQL 数据库增删改查 API
数据库·python·mysql·flask·教程·python3
威迪斯特16 分钟前
Flask:轻量级Web框架的技术本质与工程实践
前端·数据库·后端·python·flask·开发框架·核心架构
xu_yule18 分钟前
Redis存储(15)Redis的应用_分布式锁_Lua脚本/Redlock算法
数据库·redis·分布式
一灰灰blog34 分钟前
Spring AI中的多轮对话艺术:让大模型主动提问获取明确需求
数据库·人工智能·spring
Nandeska1 小时前
15、基于MySQL的组复制
数据库·mysql
AllData公司负责人2 小时前
AllData数据中台-数据同步平台【Seatunnel-Web】整库同步MySQL同步Doris能力演示
大数据·数据库·mysql·开源
加油,小猿猿2 小时前
Java开发日志-双数据库事务问题
java·开发语言·数据库