一直想在linux下通过调试MysqL源码来学习MysqL。本文记录Ubuntu14下编译MysqL5.7.18源码,导入clion进行调试的过程

编译MysqL源码

在MysqL官网下载页下载最新的MysqL5.7.18源码,并下载对应的boost_1_59_0

  • 源码下载后的解压路径: /home/crazypig/code/MysqL5.7.18
  • boost_1_59_0解压路径: /home/crazypig/code/boost_1_59_0

确定我们源码编译后的目录如下,请提前创建这些目录:

  • basedir : /home/crazypig/code/MysqL_data/5.7.18
  • datadir : /home/crazypig/code/MysqL_data/5.7.18/data
cd /home/crazypig/code/MysqL5.7.18

cmake \
-DCMAKE_INSTALL_PREFIX=/home/crazypig/code/MysqL_data/5.7.18 \
-DMysqL_DATADIR=/home/crazypig/code/MysqL_data/5.7.18/data \
-DSYSconfdIR=/home/crazypig/code/MysqL_data/5.7.18 \
-DMysqL_UNIX_ADDR=/home/crazypig/code/MysqL_data/5.7.18/data/MysqL.sock \
-DWITH_DEBUG=1  \
-DDOWNLOAD_BOOST=1 -DWITH_BOOST=/home/crazypig/code/boost_1_59_0

成功后执行:

make -j 4

使用多核特性make,这里使用4个cpu cores来make

成功后执行:

make install -j 4

成功后进入basedir,初始化数据库

cd /home/crazypig/code/MysqL_data/5.7.18/bin
./MysqLd --basedir=/home/crazypig/code/MysqL_data/5.7.18 --datadir=/home/crazypig/code/MysqL_data/5.7.18/data --initialize-insecure --user=crazypig

完成后在datadir下,就会看到初始化后的数据文件,如下所示:

ls -lha /home/crazypig/code/MysqL_data/5.7.18/data

drwxrwxr-x  5 crazypig crazypig 4.0K  716 11:28 .
drwxrwxr-x 11 crazypig crazypig 4.0K  716 11:23 ..
-rw-r-----  1 crazypig crazypig   56  716 11:27 auto.cnf
-rw-r-----  1 crazypig crazypig  350  716 11:28 ib_buffer_pool
-rw-r-----  1 crazypig crazypig  12M  716 11:28 ibdata1
-rw-r-----  1 crazypig crazypig  48M  716 11:28 ib_logfile0
-rw-r-----  1 crazypig crazypig  48M  716 11:27 ib_logfile1
drwxr-x---  2 crazypig crazypig 4.0K  716 11:28 MysqL
drwxr-x---  2 crazypig crazypig 4.0K  716 11:28 performance_schema
drwxr-x---  2 crazypig crazypig  12K  716 11:28 sys

使用--initialize-insecure参数执行初始化后,默认root@localhost的密码为空密码

使用clion进行调试

完成上面步骤后,打开clion,导入MysqL源码项目,选择路径:/home/crazypig/code/MysqL5.7.18,导入后发现好像还得CMake和build一把,但是cmake控制台提示cmake出错,根据提示信息,cmake没有指定boost,需要配置cmake然后重新cmake,配置方式如下:

Files -> Settings -> Build,Execution,Deployment -> CMake

设置CMake Option为:

-DCMAKE_INSTALL_PREFIX=/home/crazypig/code/MysqL_data/5.7.18 \ -DMysqL_DATADIR=/home/crazypig/code/MysqL_data/5.7.18/data \ -DSYSconfdIR=/home/crazypig/code/MysqL_data/5.7.18 \ -DMysqL_UNIX_ADDR=/home/crazypig/code/MysqL_data/5.7.18/data/MysqL.sock \ -DWITH_DEBUG=1  \ -DDOWNLOAD_BOOST=1 -DWITH_BOOST=/home/crazypig/code/boost_1_59_0

在CMake控制台点击Reload CMake Project按钮进行cmake,然后点击run -> build进行编译生成,等到生成成功后,配置debug配置:

选择target和executable为MysqLd,设置Program arguments为--basedir=/home/crazypig/code/MysqL_data/5.7.18 --datadir=/home/crazypig/code/MysqL_data/5.7.18/data

最后点击run -> debug,即可跑起MysqL

到这里,打个断点,然后使用命令行登录MysqL:

MysqL -uroot -h127.0.0.1 -P3306 -p
(直接enter回车即可,root初始化密码为空密码)

这个时候程序就运行到断点处,到这里就完成调试环境的设置了,后面就可以根据流程来调试MysqL了

后续

  • 还需要熟悉一下Clion的使用,重点在于快捷键的使用,比如如何快速打开一个文件,得到类的方法总览,调试快捷键等

  • MysqL源码太多,先尝试理一条总线,有时间再看详细,目前重点在于学习MySQL命令运行主流程,以及如何衔接到group replication的主流程

  • c和c++的知识也需要继续恶补

Ubuntu Clion MySQL 5.7 源码调试环境搭建的更多相关文章

  1. HTML实现代码雨源码及效果示例

    这篇文章主要介绍了HTML实现代码雨源码及效果示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  2. ios – Veracode,调试符号和XCode

    我正在尝试通过Veracode扫描iOS应用程序:一个应用程序安全平台.为了使它们扫描.IPA,.IPA需要包含调试符号.对于正在使用的Archive构建配置和项目/目标,我已指定:>生成调试符号:是>复制期间剥离调试符号:NO>死代码剥离:没有>默认隐藏的符号:NO>剥离链接产品:没有然而,在提交.IPA时,Veracode仍然给我以下错误:没有调试符号编译的主文件–1个文件我需要采取另一个步骤来创建调试符号,或许是存档吗?

  3. 从VS调试iOS时,程序’Mono’已从代码0(0x0)退出

    我有一个问题,当我尝试使用VS2013调试我的iOS应用程序时,我收到以下错误:Theprogram‘Mono’hasexitedwithcode0.我知道以下answer.清理解决方案确实解决了问题,但是下次调试时我需要再次执行…如果有人有长期解决方案,我们将非常感激.解决方法在发射期间它会崩溃吗?

  4. 如何调试ios共享扩展?

    如何从扩展中打印Xcode的lldb调试器中的日志?解决方法简单回答:>不打印日志消息,但是您可以在断点处停止,然后使用lldb打印所有内容.>运行你的应用程序>在应用程序运行时,转到Debug–>通过PID或名称附加到进程>写下您的扩展名的名称或包ID,然后单击附加>然后以您在设备上执行此操作的任何方式运行扩展程序.>等待调试器在断点处停止扩展.

  5. .dylib在Debug中链接,在XCode中找不到适用于iPhone的版本

    所以我已经将libxml2.2.dylib库包含在我的iPhoneXCode项目中,以创建一些Xml和XPath解析实用程序.当我编译并运行在模拟器和设备的调试模式时,我没有问题,但是,当我切换到发布模式我得到…

  6. 调试 – iOS设备上的remote console.log()

    我正在开发涉及touchEvent的网络应用程序.如果我可以在我的Mac上远程查看控制台,那么调试它会更容易一些.我可以在iOS设备上使我的MobileSafari将控制台日志存储在系统中的某个位置.我已经越狱了我的iPad.谢谢!

  7. 使用XCode进行调试时如何生成SIGINT?

    我的控制台应用程序捕获SIGINT,以便它可以正常退出.但是,在调试程序时按XCode中的CTRLC无效.我可以找到进程并使用终端窗口向我的进程发送SIGINT,但是我希望有一个更简单的解决方案,我可以在XCode中完成.解决方法调试器控制台的暂停按钮实际上会向您的应用发送SIGINT.如果您想让调试器将信号传递给您的应用程序,您可以执行以下操作:>按调试器的暂停按钮,等待调试控制台获得焦点>键入

  8. 从iOS应用程序发送帖子到PHP脚本不工作…简单的解决方案就像

    我之前已经做了好几次了但是由于某些原因我无法通过这个帖子…我尝试了设置为_POST且没有的变量的PHP脚本……当它们未设置为发布时它工作精细.这是我的iOS代码:这里是PHP的一大块,POST变量不在正确的位置?我想这对于更有经验的开发人员来说是一个相当简单的答案,感谢您的帮助!解决方法$_POST是一个数组,而不是一个函数.您需要使用方括号来访问数组索引:

  9. 如何在特定的语言环境中调试Xcode应用程序(英语,比方说)?

    当我开发一个带有Xcode的本地化界面的Mac应用程序时,我倾向于修改英语资源,并且只有在完成其余的开发工作时才对它们进行本地化/翻译.在非英语系统上,当我要求Xcode运行应用程序时,它会使用我自己语言的本地化,当我想选择自己时.那么,如何在调试会话期间告诉Xcode我希望应用程序使用哪种语言?

  10. ios – 如何改进xcode 4.5调试器(noob)中对象变量的显示

    我在Mac上使用Xcode4.5和iOS模拟器来编写iPhone应用程序.当我在调试器中遇到断点时,我使用“Auto”来查看变量.问题是对象最初都是折叠的,我必须扩展每个对象才能看到它的值.没关系,但这很乏味且难以阅读.有没有办法自定义调试器中数据的显示方式?

随机推荐

  1. crontab发送一个月份的电子邮件

    ubuntu14.04邮件服务器:Postfixroot收到来自crontab的十几封电子邮件.这些邮件包含PHP警告.>我已经解决了这些警告的原因.>我已修复每个cronjobs不发送电子邮件(输出发送到>/dev/null2>&1)>我删除了之前的所有电子邮件/var/mail/root/var/spool/mail/root但我仍然每小时收到十几封电子邮件.这些电子邮件来自cronjobs,

  2. 模拟两个ubuntu服务器计算机之间的慢速连接

    我想模拟以下场景:假设我有4台ubuntu服务器机器A,B,C和D.我想在机器A和机器C之间减少20%的网络带宽,在A和B之间减少10%.使用网络模拟/限制工具来做到这一点?

  3. ubuntu-12.04 – 如何在ubuntu 12.04中卸载从源安装的redis?

    我从源代码在Ubuntu12.04上安装了redis-server.但在某些时候它无法完全安装,最后一次makeinstallcmd失败.然后我刚刚通过apt包安装.现在我很困惑哪个安装正在运行哪个conf文件?实际上我想卸载/删除通过源安装的所有内容,只是想安装一个包.转到源代码树并尝试以下命令:如果这不起作用,您可以列出软件自行安装所需的步骤:

  4. ubuntu – “apt-get source”无法找到包但“apt-get install”和“apt-get cache”可以找到它

    我正在尝试下载软件包的源代码,但是当我运行时它无法找到.但是当我运行apt-cache搜索squid3时,它会找到它.它也适用于apt-getinstallsquid3.我使用的是Ubuntu11.04服务器,这是我的/etc/apt/sources.list我已经多次更新了.我尝试了很多不同的debs,并没有发现任何其他地方的错误.这里的问题是你的二进制包(deb)与你的源包(deb-src)不

  5. ubuntu – 有没有办法检测nginx何时完成正常关闭?

    &&touchrestarted),因为即使Nginx没有完成其关闭,touch命令也会立即执行.有没有好办法呢?这样的事情怎么样?因此,pgrep将查找任何Nginx进程,而while循环将让它坐在那里直到它们全部消失.你可以改变一些有用的东西,比如睡1;/etc/init.d/Nginx停止,以便它会休眠一秒钟,然后尝试使用init.d脚本停止Nginx.你也可以在某处放置一个计数器,这样你就可以在需要太长时间时发出轰击信号.

  6. ubuntu – 如何将所有外发电子邮件从postfix重定向到单个地址进行测试

    我正在为基于Web的应用程序设置测试服务器,该应用程序发送一些电子邮件通知.有时候测试是使用真实的客户数据进行的,因此我需要保证服务器在我们测试时无法向真实客户发送电子邮件.我想要的是配置postfix,以便它接收任何外发电子邮件并将其重定向到一个电子邮件地址,而不是传递到真正的目的地.我正在运行ubuntu服务器9.10.先感谢您设置本地用户以接收所有被困邮件:你需要在main.cf中添加:然后

  7. ubuntu – vagrant无法连接到虚拟框

    当我使用基本的Vagrantfile,只配置了两条线:我看到我的虚拟框打开,但是我的流氓日志多次显示此行直到超时:然后,超时后的一段时间,虚拟框框终于要求我登录,但是太久了!所以我用流氓/流氓记录.然后在我的物理机器上,如果我“流氓ssh”.没有事情发生,直到:怎么了?

  8. ubuntu – Nginx – 转发HTTP AUTH – 用户?

    我和Nginx和Jenkins有些麻烦.我尝试使用Nginx作为Jenkins实例的反向代理,使用HTTP基本身份验证.它到目前为止工作,但我不知道如何传递带有AUTH用户名的标头?}尝试将此指令添加到您的位置块

  9. Debian / Ubuntu – 删除后如何恢复/ var / cache / apt结构?

    我在ubuntu服务器上的空间不足,所以我做了这个命令以节省空间但是现在在尝试使用apt时,我会收到以下错误:等等显然我删除了一些目录结构.有没有办法做apt-getrebuild-var-tree或类似的?

  10. 检查ubuntu上安装的rubygems版本?

    如何查看我的ubuntu盒子上安装的rubygems版本?只是一个想法,列出已安装的软件包和grep为ruby或宝石或其他:)dpkg–get-selections

返回
顶部