开始学习调试MySQL

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 上周参加Oracle技术嘉年华 2015 收获非常大. 其中吕海波老师分享的内容是 《调试Oracle二三例:调试技术在日常运维中的应用》 其中有关于调试MySQL源码的内容. 实验如下: 下载MySQL 5.7的源码 http://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.9.tar.gz 编译,注意增加 DEBUG 选项。
上周参加Oracle技术嘉年华 2015
收获非常大.

其中吕海波老师分享的内容是 《调试Oracle二三例:调试技术在日常运维中的应用》
其中有关于调试MySQL源码的内容.

实验如下:
下载MySQL 5.7的源码
http://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.9.tar.gz

编译,注意增加 DEBUG 选项。(cmake的版本要求在2.8.2以上)
cmake \
-DCMAKE_INSTALL_PREFIX=/home/mysql5.7/mysql-5.7.9/ \
-DMYSQL_DATADIR=/home/mysql5.7/mysql-5.7.9/data \
-DSYSCONFDIR=/etc \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DMYSQL_UNIX_ADDR=/home/mysql5.7/mysql-5.7.9/mysql.sock \
-DMYSQL_TCP_PORT=3306 \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DEXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_DEBUG=1  \
-DDOWNLOAD_BOOST=1 -DWITH_BOOST=/tmp -DDOWNLOAD_BOOST_TIMEOUT=60000

make && make install

scripts/mysql_install_db --basedir=/home/mysql5.7/mysql-5.7.9/ --datadir=/home/mysql5.7/mysql-5.7.9/data --user=mysql5.7

源码安装完MySQL之后,使用Debug模式启动
mysqld --debug --console &

然后重头戏来了

先找到MySQL的PID
[mysql5.7@localhost~]$ps -ef | grep mysqld
mysql5.7 26086     1  2 19:29 pts/3    00:00:01 mysqld --debug --console
mysql5.7 26170 26118  0 19:30 pts/3    00:00:00 grep mysqld

这时候,tail -f /tmp/mysqld.trace 
可以看到,任何在MySQL的操作,调用的函数信息都记录在这个trace文件中.

找到其中任意一行,比如 PROFILING::status_change

使用命令gdb调试.
gdb --pid 26086 --tui

将上述函数打断点.
break PROFILING::status_change

开启另外一个MySQL终端.执行查询,然后进入gdb的断点.

可以看到源码,并且单步执行,打印变量.


看静态的代码一般比较枯燥,用这种方式感觉比较好入门.

同样的方式,也适用于Redis




相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
1月前
|
分布式计算 关系型数据库 MySQL
大数据-88 Spark 集群 案例学习 Spark Scala 案例 SuperWordCount 计算结果数据写入MySQL
大数据-88 Spark 集群 案例学习 Spark Scala 案例 SuperWordCount 计算结果数据写入MySQL
50 3
|
1月前
|
关系型数据库 MySQL Java
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
这篇文章是关于如何使用Django框架配置MySQL数据库,创建模型实例,并自动或手动创建数据库表,以及对这些表进行操作的详细教程。
65 0
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
|
1月前
|
Java 关系型数据库 MySQL
springboot学习五:springboot整合Mybatis 连接 mysql数据库
这篇文章是关于如何使用Spring Boot整合MyBatis来连接MySQL数据库,并进行基本的增删改查操作的教程。
83 0
springboot学习五:springboot整合Mybatis 连接 mysql数据库
|
1月前
|
Java 关系型数据库 MySQL
springboot学习四:springboot链接mysql数据库,使用JdbcTemplate 操作mysql
这篇文章是关于如何使用Spring Boot框架通过JdbcTemplate操作MySQL数据库的教程。
27 0
springboot学习四:springboot链接mysql数据库,使用JdbcTemplate 操作mysql
|
1月前
|
关系型数据库 MySQL 数据库
mysql关系型数据库的学习
mysql关系型数据库的学习
19 0
|
1月前
|
Kubernetes 关系型数据库 MySQL
k8s学习--利用helm部署应用mysql,加深helm的理解
k8s学习--利用helm部署应用mysql,加深helm的理解
190 0
|
2月前
|
SQL 关系型数据库 MySQL
学习MySQL操作的有效方法
学习MySQL操作的有效方法
45 3
|
2月前
|
SQL 关系型数据库 MySQL
如何学习 MySQL?
如何学习 MySQL?
39 3
|
3月前
|
SQL 关系型数据库 MySQL
学习mysql基础操作
【8月更文挑战第20天】学习mysql基础操作
40 1
|
4月前
|
SQL 关系型数据库 MySQL
学习mysql中使用inner join,left join 等
学习mysql中使用inner join,left join 等