技术分享 | 新手如何调试 OceanBase

news2024/11/15 12:26:29

作者:郭奥门

爱可生 DBLE 研发成员,负责分布式数据库中间件的新功能开发,回答社区/客户/内部提出的一般性问题。

本文来源:原创投稿

*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。


前言

observer调试有三种⽅法:⽇志,gdb调试,vscode调试(本质上是gdb或lldb)。这里我们关注如何借助vscode进行调试

调试版本

OB代码基线:开源版本,社区版,3.1.5

github:https://github.com/oceanbase/oceanbase.git

commit id:99777b4bc94d2cfc6be8ae1dce624e46beefad08

调试方式采用本地开发工具+远程gdb方式

本地指的是调试者的电脑(windows或mac)

远程指的是observer和gdb所在的linux服务器

所需工具:

本地:vscode(所需插件:C/C++、CMake、CMake Tools、Remote - SSH、Remote Development)

远程:gdb

远程环境

编译

详细可参考:https://github.com/oceanbase/oceanbase/wiki/Build-from-source-code

yum install -y git wget rpm* cpio make glibc-devel glibc-headers binutils m4
cd /opt && git clone https://github.com/oceanbase/oceanbase.git
cd oceanbase && git checkout 99777b4bc94d2cfc6be8ae1dce624e46beefad08
curl http://mirrors.aliyun.com/oceanbase/OceanBase.repo
## 修改编译选项
## 注释掉 set(DEBUG_PREFIX "-fdebug-prefix-map=${CMAKE_SOURCE_DIR}=.")
vi cmake/Env.cmake
#时间较长,可以先操作下面的步骤
bash build.sh debug --init --make
#完成后会在当前目录生成build_debug子目录,在build_debug/src/observer目录下会有一个observer二进制文件,此文件为observer的启动文件

安装

检查环境

这里我的环境只需要调整以下配置,建议按照官方文档检查一下自己的服务器:环境和配置检查-OceanBase 数据库-OceanBase文档中心-分布式数据库使用文档(https://www.oceanbase.com/docs/community-observer-cn-10000000000449657)

vi /etc/security/limits.conf
#追加
root soft nofile 655350
root hard nofile 655350
* soft nofile 655350
* hard nofile 655350
* soft stack 20480
* hard stack 20480
* soft nproc 655360
* hard nproc 655360
* soft core unlimited
* hard core unlimited
#退出当前会话,重新登录。执行以下命令,查看配置是否生效:
ulimit -a

部署

详细可参考:https://github.com/oceanbase/oceanbase/wiki/how_to_deploy_binary

yum install -y yum-utils
yum-config-manager --add-repo https://mirrors.aliyun.com/oceanbase/OceanBase.repo
yum install -y libtool libaio obclient
/opt/oceanbase/deps/3rd && bash dep_create.sh all
cd /opt/oceanbase/tools/deploy
#该命令会将observer二进制文件(build_debug 或 build_release 都可以)和一些其他组件复制到当前目录,例如部署配置模板文件。
./obd.sh prepare -p /opt/oceanbase/build_debug/src/observer
./obd.sh deploy -c single.yaml

后续修改源码再调试时可直接运行:

./obd.sh prepare -p /opt/oceanbase/build_debug/src/observer
./obd.sh deploy -c single.yaml

测试连接:(single.yaml默认mysql端口为10000,RPC端口为10001)

[root@localhost deploy]# obclient -uroot -P10000 -h127.0.0.1
Welcome to the OceanBase.  Commands end with ; or \g.
Your OceanBase connection id is 3221487642
Server version: OceanBase 3.1.5 (r1-99777b4bc94d2cfc6be8ae1dce624e46beefad08) (Built Nov 22 2022 06:09:41)
 
Copyright (c) 2000, 2018, OB Corporation Ab and others.
 
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
 
obclient [(none)]>

99777b4bc94d2cfc6be8ae1dce624e46beefad08对应我们编译的observer版本

启动过程中发生错误,可根据observer.log的相关报错进行排查

日志

所在目录:single.yaml中的home_path目录中

日志类型:OceanBase 数据库的进程⽇志主要分为 observer.log 、 rootservice.log 和 election.log ,以及对应的wf⽇志(只记录 WARN 和 ERROR),共2类6种⽇志。

安装gdb

cd /opt && wget http://ftp.gnu.org/gnu/gdb/gdb-7.12.tar.gz
tar zxvf gdb-7.12.tar.gz && cd gdb-7.12
yum -y install gcc gcc-c++ texinfo
./configure
make && make install
gdb --version
gdbserver --version

本地环境

配置vscode

  • 本地自行安装插件:C/C++、CMake、CMake Tools、Remote - SSH、Remote Development

  • 安装成功后,打开远程管理器,ssh连接observer所在的服务器(不用ssh免密也可以,就是每次指定密码登录)

  • 打开oceanbase的源码目录

  • 继续在远程服务器上安装插件:C/C++、CMake、CMake Tools

  • 创建并配置launch.json,创建成功后会保存在.vscode目录下

这里贴出我的配置:

launch.json
  • 启动

选择 Run->Start Debugging,然后选择 attach 的进程号,输⼊ observer 就可以搜索到

选择进程后等待半分钟,进程较多,gdb 加载需要时间。

如下图所以,表示debug已启动成功

  • 调试

打开ob_sql.cpp文件(快捷键ctrl+p 输入文件名),在1324行增加断点

注:因为oceanbase有很多后台任务,会定时的执行SQL,所以调试时设置的断点有可能会命中后台任务执行的SQL,调试起来不是很方便

  • 接下来开始愉快的调试吧=-=

参考:

文档概览-OceanBase 数据库-OceanBase文档中心-分布式数据库使用文档(https://www.oceanbase.com/docs/community-observer-cn-10000000000449173)

https://github.com/oceanbase/oceanbase/wiki

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/141355.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CRM-客户管理系统demo制作文档

一、简介1.1、案例简介本文将介绍,如何搭建CRM-客户管理。1.2、应用场景CRM-客户管理应用完整记录所有客户资料,合理的对客户进行领取、分配、退回、跟进,实现客户管理智能化。二、设置方法2.1、表单搭建1)新建主表【新增客户】表…

JDBC的Dao层设计

前言 在前面的博文中JDBC基础使用写增删改查会出现很多重复代码,可以将重复代码提取出来。 一、设计JDBC 层次结构: 项目结构: 二、BaseDao 2.1、将资源提取到文件 在database.properties中将需要的资源放入其中: mysqlDriv…

安科瑞医疗IT系统在医院安全用电中的应用实例

【摘要】根据现代医院建筑发展的趋势和特点,结合医疗 IT系统的工作原理,对医疗 IT系统作了简要介绍,并对IT系统在医院安全用电的具体应用进行了分析。通过工程实例详细探讨了医疗 IT系统在安装和配电方面应注意的问题和细节。 【关键词】IT…

C++ 语法基础课6 —— 函数

文章目录1. 函数基础1.1 编写函数1.2 调用函数1.3 形参和实参1.4 函数的形参列表1.5 函数返回类型1.6 局部变量、全局变量与静态变量2. 参数传递2.1 传值参数2.2 传引用参数(可以改变实参)2.3 数组形参(可以修改函数外数组)2.3.1 一维数组形参2.3.2 多维数组形参2.4 函数重载2.…

expdp导sys用户表时报错ORA-39166、ORA-31655

问题描述:expdp导sys用户表时报错ORA-39166、ORA-31655,如下所示: [oracleoel~]$ expdp \/ as sysdba\ directoryDATA_PUMP_DIR dumpfiletest.dmplogfileexpdp.log tablestest Export:Release 11.2.0.4.0 - Production on Tue Nov 29 14:08:…

麒麟 docker 自启动失败

docker 问题描述: 自启动时出现超时问题 start operation timed out. Terminating 排查流程: journalctl -u docker.service .... modulegrpc Jan 04 11:17:13 control03-55 dockerd[4466]: time"2023-01-04T11:17:13.30274997408:00" leve…

隔离认证、安全标准。

目的: 隔离认证、安全标准。 工业安全标准与隔离组件规格关系 功能隔离、基本隔离和增强型隔离等级 安全标准定义 系统级和组件级认证 测试器件获得高压安全性 器件行业标准 高电压系统隔离,认证、安全标准 了解组件级与系统级标准、隔离等级…

阿里云前端专家冯军:前端用户体验该如何优化

2022 年 9 月 28 日,阿里云用户组(AUG)第 11 期活动在深圳举办。活动现场,阿里云前端专家冯军,向参会企业代表分享了前端用户体验该如何优化?本文根据演讲内容整理而成。 大家好,我叫冯军&#…

HTML a标签打开新标签页避免出现安全漏洞,请使用“noopener”

新标签页中打开一个网址如何出现安全漏洞 让我们在网站上的新标签页中打开一个网址&#xff0c;HTML如下 <a href"https://malicious-domain.netlify.com" target"_blank">访问恶意网站&#xff01; </a> 这里我们有一个指向恶意网站的 href…

当malloc为string等容器开内存时候产生的问题,malloc和new最本质的区别

报内存错误的代码: 顺利执行的代码: 可以看到在malloc为a开好空间&#xff0c;然后对自定义类型对象a中的string a成员进行赋值的时候&#xff0c;发生了内存错误&#xff0c;但是经过测试&#xff0c;使用new为string a开空间就不会发生错误; new和malloc最本质的区别 最主要…

uniCloud云开发----6、uniapp配置tabbar底部导航栏和去掉uni-app顶部标题

uniapp配置tabbar底部导航栏、去掉uni-app顶部标题前言效果图1、创建页面并声明注册2、配置pages.json--tabBar3、通过pages.json来去掉uni-app顶部标题全部页面都去掉单个页面去掉前言 tabbar文档 在 pages.json 中提供 tabBar 配置&#xff0c;不仅仅是为了方便快速开发导航…

Elasticsearch入门,持续更新中

目录elasticsearch简介elasticsearch下载问题分析解决启动可视化界面Kibana下载配置启动进入kibana的控制台elasticsearch简介 懂得都懂 elasticsearch下载 官网下载地址 链接: https://www.elastic.co/cn/downloads/elasticsearch 本人准备安装在win10上&#xff0c;本地…

IB学习阶段所需的教材有哪些?

IB课程即国际文凭组织IBO&#xff08;International Baccalaureate Organization&#xff09;&#xff0c;是为全球学生开设从幼儿园到大学预科的课程&#xff0c;为3-19岁的学生提供智力&#xff0c;情感&#xff0c;个人发展&#xff0c;社会技能等方面的教育&#xff0c;使其…

可以同时解析多个binlog吗

GreatSQL社区原创内容未经授权不得随意使用&#xff0c;转载请联系小编并注明来源。GreatSQL是MySQL的国产分支版本&#xff0c;使用上与MySQL一致。作者&#xff1a; 叶金荣文章来源&#xff1a;GreatSQL社区原创 1.可以同时解析多个binlog吗 2.innodb_buffer_pool_instances设…

【C语言进阶】指针的进阶(1)

作者:匿名者Unit 目录一.数组指针1.定义2.使用二.数组、指针传参1.一维数组传参2.二维数组传参3.一级指针传参4.二级指针传参三.函数指针一.数组指针 1.定义 数组指针&#xff0c;顾名思义是指向数组的指针&#xff0c;那数组指针是如何定义的呢 int (*p)[10]; //解释&#x…

JavaSE从基础到入门:异常的学习

1. 异常的概念与体系结构 1.异常的概念 异常&#xff08;Exception&#xff09;指不期而至的各种状况&#xff0c;异常发生的原因有很多&#xff0c;通常包含以下几大类&#xff1a; 用户输入了非法数据。要打开的文件不存在。网络通信时连接中断&#xff0c;或者JVM内存溢出…

HDMI1.4/2.0 Subsystem官方例程的建立

HDMI1.4/2.0 Subsystem官方例程的建立1、 项目背景明德扬(MDY)为某研究所研制的视频接口转换模块&#xff0c;该模块将HDMI视频转成LVDS7:1视频。视频输入接口采用的是HDMI 4K输入&#xff0c;基于Xilinx K7325t的高速收发器,特点是无需外围HDMI接收芯片&#xff0c;大大简化了…

SpringBoot+VUE前后端分离项目学习笔记 - 【13 SpringBoot和Vue实现导入和导出】

hutool工具 引入Hutool工具使用ExcelWriter&#xff0c;可以将数据写出到EXCEL https://www.hutool.cn/docs/#/poi/Excel%E5%B7%A5%E5%85%B7-ExcelUtil 引入pom依赖 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactI…

项目中不容忽视的图表报表

在项目工作中&#xff0c;报表可是少不了的好帮手&#xff0c;可以帮助我们向合作者以及领导直观地展示项目情况进展。项目报表的作用可以从多维度监控项目的运行&#xff0c;保障项目的顺利进行。让数据可视化&#xff0c;辅助管理者进行合理决策。及时与合作者共享项目信息&a…

使用ros从realsence相机中获取图像

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录前言一、使用ros从realsence相机中获取录制的视频并播放1.开启ros内核2.打开realsense相机3.查看当前话题4.在相机界面显示RGB图像和depth图像4.1 添加Image4.2 填入…