MySQL代码开发和调试利器CLion
MySQL源码对于很多人来说,是很有距离感的。
我想对于MySQL技术有兴趣的同学,基本测试过如下的一些方法(之一或者是全部):
1)下载MySQL源代码,一窥其中的奥妙
2)基于源码安装MySQL,从cmake开始,基本要被bison,curces,boost折腾一波
3)在Windows环境配置MySQL源码环境,特殊配置Cross GCC,MinGW
4)通过GDB调试MySQL,设置断点,得到一些堆栈信息,进行全面跟踪
5)使用LLDB调试MySQL,需要从源码仓库构建版本,基于MAC端还好,Linux端还需要额外处理。
6)通过pstack,perf,strace等得到一些堆栈信息,不同水平的人分析的效果差异较大
7)通过应用管理中的一些特性或者bug,从代码中去查找相关的逻辑,问题锁定的方向相对比较清晰,可能最尴尬的就是验证了下这个bug确实是个bug
在此,我不是要安利什么,我也做过这些尝试,有些尝试其实是很痛苦的,这个过程中的投入和收益是严重不成正比的。有句话说得好,对于你想做的事情,时间会给你答案,我想对于很多人来说,这个答案就是放弃。
通过最近的一次线上问题修复,让我有了新一步的思考。问题的背景是一个GitHub开源的基于Java技术栈的后端服务,最近在数据流转中出现了数据问题,主要原因是基于时差的问题,对于这个问题自己看了相关的代码,也做了很多的调试和测试,整个过程都是在Windows环境下完成的,做完测试之后,在编译和发布的过程,走了一些弯路,最后发布到线上前又做了一次验证测试,发现和之前测试的结果竟然不一样。
于是后续的补充测试是在Linux环境下进行的,我做了更多的测试和验证,最后的修复方案完全是基于命令行方式调整的,直观来看,流转效率和准确性比之前提高了好几倍,让我也有了一些欣喜和成就感。
我开始重新思考这个过程中的一些弯路,我的初步思路是,我的服务是要发布在Linux X86_64位的环境下,而整个开发过程竟然都是在Windows下验证的,也就意味着存在一些可能会导致我原本Windows下的环境配置或者测试场景和Linux存在一些差异,尤其是一些依赖库的差异就更大了,这样就意味着会返工,那么为什么不直接在Linux下基于IDE开发呢。
这么一想,突然发现我们基于Python的项目还早是按照这种模式做了很久了,我们是在VirtualBox中安装了Linux虚拟机,然后在上面配置了开发环境,最开始就是因为跨平台库依赖支持差异比较大,所以放弃了Windows侧的开发模式,从开始就在Linux下开始,这么些年下来,还真没感觉到太大的差异。
我想很多人都会很自然的抗拒说,Linux下的命令行模式不够友好,至少在MySQL源码方向上,IDE用起来会很麻烦吧,目前我知道的工具,主要有VS Code,Eclipse for C++,CLion
经过周末的一些对比和测试,我选择了CLion,为此还特意选定了一个风火轮图标。
进入CLion配置整个MySQL源码环境,从系统命令行配置到IDE的配置切换,整个过程个把小时就差不多了。
如果在查看代码中喜欢查看上下文,做下更细致的调试,我想这个工具的粒度和支持要更强大,细腻。
比如我们选择官网的MySQL源码包,比如:mysql-boost-5.7.31.tar.gz
假设路径如下:
basedir : /usr/local/mysql_5.7.31_source
datadir : /data/mysql_5.7.31_source
boost:/root/mysql_5.7.31_source/boost_1_59_0
可以使用如下的cmake命令:
cmake
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql_5.7.31_source
-DMYSQL_DATADIR=/data/mysql_5.7.31_source/
-DSYSCONFDIR=/data/mysql_5.7.31_source
-DDEFAULT_CHARSET=utf8
-DEXTRA_CHARSETS=all
-DMYSQL_UNIX_ADDR=/data/mysql_5.7.31_source/mysql.sock
-DENABLED_LOCAL_INFILE=1
-DWITH_DEBUG=1
-DWITH_BOOST=/root/mysql_5.7.31_source/mysql-5.7.31/boost/boost_1_59_0
如果想省事些,直接先下载boost也可以,使用download选项
会自行映射boost_1_59_0/boost以及下面的目录和文件
如果不知道该映射的boost文件,则可以使用download选项
-DWITH_DEBUG=1
-DDOWNLOAD_BOOST=1 -DWITH_BOOST=/xxxx/boost_xxxx
命令行方式初始化数据库
cd /usr/local/mysql_5.7.31_source/bin
./mysqld --basedir=/usr/local/mysql_5.7.31_source --datadir=/data/mysql_5.7.31_source --initialize-insecure --user=mysql --server-id=57310
整个过程CLion的配置和命令行的参数是一模一样的。
启动MySQL的过程,配置和命令行方式是一样的,只是通过CLion启动,然后就可以开启调试模式,得到一些更具体的信息了。
这是基本真实环境下的开发调试,而且代码和服务都是在环境中真实可见的,这种体验和学习效果强烈推荐。
- 洛谷P1420 最长连号
- 各种读入方式速度比较
- 美团NLP实习面试总结一 基本知识4 数据结构二 NLP相关技术1 LSTM2 介绍实体链接与实体映射3 解释随机游走的原理及作用4 命名实体识别
- 【下载】苹果发布Turi Create机器学习框架,5行代码开发图像识别
- codevs 4163 hzwer与逆序对
- ASP.NET Core提供模块化Middleware组件
- CSS预处理器的对比 — sass、less和stylus
- Gensim实现Word2Vec的Skip-Gram模型简介快速上手对语料进行分词使用gensim的word2vec训练模型
- React第三方组件4(状态管理之Reflux的使用②TodoList上)
- 机器学习(六)Sigmoid函数和Softmax函数1 Sigmoid函数2 Softmax函数
- React第三方组件4(状态管理之Reflux的使用①简单使用)
- React第三方组件3(状态管理之Flux的使用⑤异步操作)
- 使用yo-get下载视频网站视频或其
- React多页面应用3(webpack4 多页面实现)
- MySQL 教程
- MySQL 安装
- MySQL 管理与配置
- MySQL PHP 语法
- MySQL 连接
- MySQL 创建数据库
- MySQL 删除数据库
- MySQL 选择数据库
- MySQL 数据类型
- MySQL 创建数据表
- MySQL 删除数据表
- MySQL 插入数据
- MySQL 查询数据
- MySQL where 子句
- MySQL UPDATE 查询
- MySQL DELETE 语句
- MySQL LIKE 子句
- mysql order by
- Mysql Join的使用
- MySQL NULL 值处理
- MySQL 正则表达式
- MySQL 事务
- MySQL ALTER命令
- MySQL 索引
- MySQL 临时表
- MySQL 复制表
- 查看MySQL 元数据
- MySQL 序列 AUTO_INCREMENT
- MySQL 处理重复数据
- MySQL 及 SQL 注入
- MySQL 导出数据
- MySQL 导入数据
- MYSQL 函数大全
- MySQL Group By 实例讲解
- MySQL Max()函数实例讲解
- mysql count函数实例
- MYSQL UNION和UNION ALL实例
- MySQL IN 用法
- MySQL between and 实例讲解
- windows安装openssh并通过生成SSH密钥登录Linux服务器
- SSH设置别名访问远程服务器详细介绍
- Linux检查Swap交换空间的五个命令小结
- seaborn数据总体分布的可视化策略
- 配置 Apache 服务器禁止所有非法域名 访问自己的服务器
- Ubuntu16.04源码安装Mininet
- Kotlin基础学习之Deprecated与Suppress注解使用
- Centos 7下利用crontab定时执行任务详解
- 树莓派无线上网时无屏幕下发现树莓派IP的方法
- Ubuntu18.04安装opencv 3.2.0的解决方法
- Android MVP BaseFragment 通用式封装的实现
- 腾讯云服务器Centos挂载数据盘的方法
- CentOS 8.0.1905 安装 ZABBIX4.4版本 (已验证)
- seaborn分类变量的汇总展示
- Linux查看PCIe版本及速率的方法