MiniOB环境部署开发(使用Docker)

整体思路:

1.使用docker提供linux编译环境

2.使用vscode进行代码调试和开发以及上传到仓库

整体流程:

1.安装一系列所必要的软件(主要包括docker、VSCode以及git)

2.新建github仓库,将仓库内代码CLONE到本地

3.搭建Docker开发环境

4.配置VSCode

5.编译以及连接

6.miniob训练营提交

MiniOB源码: https://github.com/oceanbase/miniob

MiniOB文档: MiniOB 介绍 - MiniOB

数据库大赛官网: OceanBase 社区

培训课程合集: OceanBase 社区

训练营: OceanBase 社区

一、下载符合电脑配置的docker和VSCode(包含相应插件)以及git

docker网址:https://www.docker.com/get-started/

git网址:Git - Downloads

VSCode网址:https://code.visualstudio.com/Download

VSCode所包含的插件(在拓展中安装):

二、新建github仓库以及将仓库内代码CLONE到本地

前提条件:已注册 Gitee 账号,Gitee 官网地址:https://gitee.com

创建私有仓库:

登录 Gitee 平台,选择 新建仓库。

输入仓库信息,单击 创建。设置为私有仓库后其他人无法查看到你的代码。

赋权官方测试账号

对于私有仓库,默认情况下其他人看不到,同样 OceanBase 测试后台也无法拉取到代码,这时想要提交测试,需要先给 OceanBase 的官方测试账号增加一个权限。

官方测试账号为:oceanbase-ce-game-test

选择管理>仓库成员管理>观察者。

选择直接添加,搜索官方测试账号。

添加完成后,单击提交。

上述完成了一系列新建仓库的操作,接下来建立本地项目与远程仓储的同步。

第一步新建文件夹,我此时新建的文件夹为MINIOB。

第二步打开所创建的文件夹。CLONE仓库到新建文件夹下(此时建立连接成功)

将会出现下图:

接下来打开miniobtest文件夹:

获取miniob源码,解压后粘贴到miniobtest文件夹下:

三、搭建Docker开发环境

打开终端并在终端中运行如下代码:

docker run -d --name obtest --privileged -v $PWD/miniobtest:/root/miniob oceanbase/miniob

其中obtest是自定义的命名。

要注意:$PWD一定要修改成自己文件的路径!

比如我的文件夹在D:/MINIOB中,所以我输入的时候是:

docker run -d --name obtest --privileged -v D:/CLONE/miniobtest:/root/miniob oceanbase/miniob

点击docker的"Containers",出现如下图所示表示创建成功

docker exec -it OB1 bash

接着输入:

ls

接着输入:

cd miniob

接着输入:

ls

接着输入:

mkdir ./build

接着输入:

ls

具体如图所示:

四、配置VSCode

第一步打开VSCode,点击如下组件

第二步右键点击:

第三步点击附加Visual Studio Code:

如果右边栏直接这样的话,说明ok了:

编辑

如果点击附加Visual Studio Code是空的,则首先需要点击文件------打开文件夹。

弹出的窗口应该会默认是/root/,点击确定即可。

然后我们需要在容器中安装拓展:

五、 编译与链接

第一步新建一个.vscode文件夹:

第二步在.vscode文件夹中新建tasks.json文件(一定不要把文件名输入错了!)

在tasks.json中输入(记得ctrl+s保存一下):

cpp 复制代码
{

    "options": {

    "cwd": "${workspaceFolder}/miniob/build"

    },

    "tasks": [

    {

    "label": "cmake",

    "command": "cmake",

    "args": [

    "-DDEBUG=ON",

    ".."

    ]

    },

    {

    "label": "make",

    "command": "make"

    },

    {

    "label": "CMake Build",

    "dependsOn": [

    "cmake",

    "make"

    ]

    },

    {

    "label": "Get pid of observer",

    "type": "shell",

    "command":"ps aux | grep observer"

    },

    {

    "label": "Run observer",

    "type": "shell",

    "command":"/root/miniob/build/bin/observer -s/root/miniob-test.sock -f /root/miniob/etc/observer.ini"

    },

    {

    "label": "Run obclient",

    "type": "shell",

    "command":"/root/miniob/build/bin/obclient -s/root/miniob-test.sock"

    }

    ],

    "version": "2.0.0"}

接下来我们进行编译操作。

使用ctrl+shift+p调出窗口,搜索"任务",找到运行任务:

点击cmake进行编译;

选择"继续而不扫描任务输出":

如果终端中显示这样说明成功。

这一步需要等待一段时间。

终端输出如下说明成功:

接着跟上面差不多,"任务:运行任务"------"make"------"继续而不扫描任务输出",终端输出如下说明成功:

这一步需要等待较长的时间。

终端输出如下说明成功:

最后,"任务:运行任务"------"cmake build"------"继续而不扫描任务输出":

终端输出如下说明成功:

接下来我们来配置Debug环境。

仍是在.vscode文件夹中,新建一个launch.json文件,并将以下内容输入到文件中:

cpp 复制代码
{

    "version": "0.2.0",

    "configurations": [

    {

    "name": "(gdb) Attach",

    "type": "cppdbg",

    "request": "attach",

    "program": 

   "${workspaceFolder}/miniob/build/bin/observer",

    "MIMode": "gdb",

    "setupCommands": [

    {

    "description": "为 gdb 启用整齐打印",

    "text": "-enable-pretty-printing",

    "ignoreFailures": true

    },

    {

    "description": "将反汇编风格设置为 Intel",

    "text": "-gdb-set disassembly-flavor intel",

    "ignoreFailures": true

    }

    ]

    },

    ]

    }

运行和调试的 Attach 功能可以跟踪一个运行中的进程,从而对其进行调试。数据库系统的调试过程往往是通过运行一个编译好的数据库程序,然后利用 Attach 方法跟踪其进程并在指定代码位置设置断点,从断点处逐步调试编写好的程序。

首先使用ctrl+shift+p调出窗口,搜索"任务",找到运行任务,找到Run observer,选择继续而不扫描任务输出

然后终端会出现:

接下来需要获得运行中的 observer 的进程号。仍是使用ctrl+shift+p调出窗口,搜索"任务",找到运行任务:再搜索Get pid of observer,继续而不扫描任务输出,找到并运行;

终端显示应如下图所示:

其中第一行的"77911"就是我们所需要的进程号。

需要注意的是,该进程号在每次启动 observer 进程时都会变化,因此需要每次 Attach 之前都查询确定。

获取到进程号之后,我们就可以在debug窗口中找到这样一个小三角:

然后选择上述的进程号

当出现如下图所示表示成功:

接下来我们进行简单的调试:

我们在command_executor.cpp的第50行加入断点

在不加入断点时执行help操作:

在加入断点时执行help操作:

需要注意的是,每次重新启动时,都需要先Run observer再Run obclient。

每次关机前一定要先关闭容器再关闭docker!如果关不掉,请使用docker kill强行关闭。

六、miniob训练营提交

进入miniob训练营官网,选择自己想做的题目

点击进入

根据题目编写代码,然后上传到仓库:

需要到相应文件夹下执行下列代码

进入到 miniob 目录,删除 .git 目录,清除已有的 git 信息

cd miniob

rm -rf .git

重新初始化 git 信息,并将代码提交到自己的仓库

git init

git add .

git commit -m 'init' # 提交所有代码到本地仓库

将代码推送到远程仓库

git remote add origin https://gitee.com/xxx/miniob.git # 注意替换命令中的 息为自己的库信息

git branch -M main

git push -u origin main

由于我的是miniobtest文件夹下,如下图:

由于第一次由于仓库是空的需要使用如上复杂的命令行,接下来每次都只需要点击VSCODE内的提交按钮即可

接下来到官网提交代码

首先找到仓库地址

我进行简单提交如图所示:

相关推荐
.Eyes1 小时前
OceanBase 分区裁剪(Partition Pruning)原理解读
数据库·oceanbase
MrZhangBaby2 小时前
SQL-leetcode— 2356. 每位教师所教授的科目种类的数量
数据库
一水鉴天2 小时前
整体设计 之定稿 “凝聚式中心点”原型 --整除:智能合约和DBMS的在表层挂接 能/所 依据的深层套接 之2
数据库·人工智能·智能合约
翔云1234563 小时前
Python 中 SQLAlchemy 和 MySQLdb 的关系
数据库·python·mysql
孙霸天3 小时前
Ubuntu20系统上离线安装MongoDB
数据库·mongodb·ubuntu·备份还原
Java 码农3 小时前
nodejs mongodb基础
数据库·mongodb·node.js
TDengine (老段)3 小时前
TDengine IDMP 运维指南(4. 使用 Docker 部署)
运维·数据库·物联网·docker·时序数据库·tdengine·涛思数据
TDengine (老段)3 小时前
TDengine IDMP 最佳实践
大数据·数据库·物联网·ai·时序数据库·tdengine·涛思数据
彬彬醤4 小时前
Mac怎么连接VPS?可以参考这几种方法
大数据·运维·服务器·数据库·线性代数·macos·矩阵
废喵喵呜4 小时前
达梦数据库-实时主备集群部署详解(附图文)手工搭建一主一备数据守护集群DW
网络·数据库·tcp/ip