目录

导语

直接在ubuntu上下载miniob

    1.安装cmake

    2.安装gcc

    3.构建miniob(这个是在虚拟机上直接运行miniob,不是在docker上)

docker中下载miniob

    1.安装docker

    2.docker中构建miniob

    3.检查SELECT语句的正确性

    4.实现drop table

如何将更改的代码写入容器中的miniob中的文件

其他可能遇到的问题


导语

写这篇是因为想起当时刚做miniob实验的时候,老师说最好在docker运行miniob,但是给的那个官方教如何搭建的文章实在不太友好,过于抽象,很多地方对不上;第一次实验的时候很多同学都是直接在虚拟机下载miniob源代码。我两个方法都试了一下,最后非常艰难的成功做好准备工作了,气的快精神分裂了,因为第一次搞这些东西。每次做实验就改版和上一届实验不一样是谁啊?原来是你,2022级!原来是你!软件工程!!miniob和仓颉是谁想到做的啊?原来是你!亲爱的杨老师!!!数据库系统和编译原理教材怎么都是自编的啊(作业答案都找不着),谁写的书?原来是你,是你是你真的是你!Mr.杨!

直接在ubuntu上下载miniob

我记得当时参考的这篇博客,大家可以参考一下,文章里说两个条件

    1.安装cmake

我现在回放一下我当时的试错过程,如果你心急的话,就直接看“*成功方法*”。

*失败过程*

我按着上面的文章的方法开始艰难的安装cmake,但是我根本连不上github官网,一直显示连不上(别人家都连的上为何本宫就不行/泪目)然后参考了几篇博客,终于连上了,想哭,指路:

但是!好不容易连上了,这个cmake3.24.0根本连接不上,一直显示连接超时,我进cmake官网换了好几个版本都不行,可能就是我机子下载不了吧,后面越来越觉得就是网址的问题。

当时肺都快气炸了,剑走偏锋从网上找了一个不太靠谱的但是可以连的上的网站下载的cmake3.24,本来以为一切都快结束了,但是果然不靠谱就是不靠谱,这个cmake后面编译miniob的时候报错好多,可能是包不全吧,反正就是我当时已经不知道我在搞些什么东西了。最后只能接受现实,直接在命令行里面下载miniob。

*成功方法*

其实当时我为什么不一开始就直接在命令行里安装cmake呢?因为当时官方的cmake就是24,我后来看cmake的版本已经到好后面了,虚拟机给出的版本最高就是16,我害怕假如版本太低之后出什么岔子,但是同学说用cmake3.16没什么问题,我也就用cmake3.16。

可以看到有一个用snap安装的,但是网上据说用这个snap安装软件的话,一般包会比较大占用更大的磁盘空间,我当时虚拟机内存告急,就没用这个方法,假如用snap安装的话我觉得应该也是可以的~

但是如果你实在不满意的话,那我再展示一下一个不靠谱的下载cmake更高版本的方法(最后我好像没有成功),这里复现一下过程,我找到了一个路径(方法)是可以成功下载包的,就是https://cmake.org/files/,如下图是我在windows里访问这个网址的样子,往下滑有v3.xx/,我点进去v3.27。

好了,现在回到ubuntu,使用如下命令下载包,但是我试了几次还是不行,每次到99%的时候就显示段错误,我也实在不知道什么原因。

sudo wget https://cmake.org/files/v3.27/cmake-3.27.2-linux-x86_64.tar.gz

反正就是失败了,懒得管了,反正3.16的也能用。。。。

    2.安装gcc

我记得当时查看gcc版本是9.4的,已经够用了,安装gcc很容易,随便搜一下

    3.构建miniob

(这个是在虚拟机上直接运行miniob,不是在docker上,要在docker上构建miniob就看下面,miniob特别大,很可能导致虚拟机分配内存不够,需要扩容,不会扩容的看我主页另一篇文章,我这个虚拟机版本是ubuntu20的)

我忘记了,好像直接创一个目录,git clone https://github.com/oceanbase/miniob.git

。在github上搜索词条“miniob”有一些人贴了自己完成的,可以稍微参考下吧,比如git clone GitHub - luooofan/miniob-2023: 2023 OceanBase 数据库大赛初赛

然后,懒得打字了

docker中下载miniob

    1.安装docker

参考博客下载docker,下面的步骤是我直接复制这篇文章的步骤,你们直接点开这个博客,照着步骤就ok

先卸载低版本的docker

sudo apt-get remove docker docker-engine docker.io containerd runc

并且update和upgrade后,安装docker所需要的依赖包

sudo apt-get install ca-certificates curl gnupg lsb-release;

添加docker官方GPG密钥:

sudo curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -;

添加docker软件元:

sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable";

安装docker:

sudo apt-get install docker-ce docker-ce-cli containerd.io;

配置用户组:sudo usermod -aG docker $USER

//默认情况下,只有root用户和docker组的用户才能运行Docker命令。我们可以将当前用户添加到docker组,以避免每次使用Docker时都需要使用sudo;

运行docker:systemctl start docker

并安装工具apt-get -y install apt-transport-https ca-certificates curl software-properties-common;

检查docker安装是否成功://成功

    2.docker中构建miniob

在终端执行以下命令,下载并启动命名为miniob的镜像

其中 privileged 参数是为了方便在容器中进行调试。运行下面的命令可以进入到容器并进行开发

下载github中miniob,下面的是原始的,我们只有第一次实验是老老实实自己改的,后面都是抄github上的大佬的,git clone GitHub - luooofan/miniob-2023: 2023 OceanBase 数据库大赛初赛

他这个好像第一次实验的SELECT和drop table是可以的,剩下三次实验有一次是哪个语句不可以来着,忘记了。这里图片还是原始的miniob,不是别人写好的。

克隆好之后,进入miniob文件夹,init编译

bash build.sh

*检查cmake和gcc版本

运行miniob

    3.检查SELECT语句的正确性

 如图

/ /解析

先是创建了一个表名为test的table,它的字段有int型的id和char类型的name;

向此表中插入一行id=1,name=rojia的数据:insert into test values(1,'rojia');

Select查询行,查询表中是否有(1,‘rojia’)的数据,查询成功并返回数据

//表中并没有该数据(1,‘lihua’),于是返回空。

    4.实现drop table

如何将更改的代码写入容器中的miniob中的文件

本来是想尝试将docker中的miniob复制到本机里修改后再载入docker,但是用搜索到的资料docker save -o miniob.tar miniob,把镜像文件打包成tar包放在虚拟机本地目录下,但是解压缩的包并不是我想要的包含源代码的包,而是docker构建miniob关于容器镜像之类的文件;

又想用把miniob文件挂载到主机直接修改,使用docker  run -v  [主机目录]:[容器目录] oceanbase/miniob,确保绝对路径等,但是还是无法在虚拟机上找到挂载到主机的文件;

显示如下,但是主机对应文件夹并没有;

如果在docker里面下载vim编辑器,之后直接改,,,好麻烦,算了

**解决办法**

最后只能使用把要修改的代码在本机修改好,再把这些文件,通过docker cp 容器id:[主机路径],拷贝到已经删除相关文件的miniob对应文件夹中。

如下例子,要更改某个cpp,h文件,先把miniob中的对应的cpp,h文件删除,例如下面,我需要修改miniob里位于db文件夹的db.cpp,先把他删了;

再找到oceanbase/miniob这个容器的id全称

再把在虚拟机中的文件(你可以在windows上修改,然后复制到虚拟机,再从虚拟机复制到docker,是这个意思)拷贝到容器对应的文件夹里面,eg:

其他可能遇到的问题

1.git拉取失败

2.bash build.sh进度卡住

如图

Logo

昇腾计算产业是基于昇腾系列(HUAWEI Ascend)处理器和基础软件构建的全栈 AI计算基础设施、行业应用及服务,https://devpress.csdn.net/organization/setting/general/146749包括昇腾系列处理器、系列硬件、CANN、AI计算框架、应用使能、开发工具链、管理运维工具、行业应用及服务等全产业链

更多推荐