工具研发者介绍
贺春旸,dbaplus社群金牌专家,凡普金科和爱钱进DBA团队负责人,《MySQL管理之道:性能调优、高可用与监控》第一&二版、《MySQL运维进阶指南》作者,曾任职于中国移动飞信、安卓机锋网。五次荣获dbaplus年度MVP,致力于MariaDB、MongoDB等开源技术的研究,主要负责数据库性能调优、监控和架构设计。
工具下载:
https://github.com/hcymysql/mysql_sniffer
mysql_sniffer 是一个基于 MySQL 协议的抓包工具,用来实时抓取 MySQL 服务端的请求,并格式化输出,输出内容包括访问时间、来源 IP、执行的SQL语句。
在进行MySQL 8.0升级时,了解新版本对SQL语法的改变和新增的功能是非常重要的。通过使用mysql_sniffer,DBA可以在升级之前对现有的SQL语句进行抓取和分析,以确保在新版本中能够正常运行。
使用mysql_sniffer工具可以带来以下几点好处:
有一些已知SQL语法与MySQL 8.0不兼容,例如:
select NVL(id/0,'YES') from test.t1 where
id = 1;
select user_id,sum(amount) from test.user group by user_id DESC limit 10;
第一条语句,NVL函数是MariaDB特有的,在MySQL 8.0中,要改成:
select IFNULL(id/0,'YES') from test.t1 where id = 1;
第二条语句,在MySQL 8.0中group by 字段 ASC/DESC 失效,要改成:
select user_id,sum(amount) from test.user group by user_id order by user_id DESC limit 10;
那么,如何判断业务上的未知SQL是否与MySQL 8.0兼容呢?
mysql_sniffer工具可以帮助你
usage: mysql_sniffer [-h] -p PORT [-t TABLES [TABLES ...]] [-l LOG] [-c] [-r RUNTIME] [-v]
MySQL packet sniffer
options:
-h, --help show this help message and exit
-p PORT, --port PORT MySQL server port
-t TABLES [TABLES ...], --tables TABLES [TABLES ...]
Table names to capture
-l LOG, --log LOG Log file path
-c, --console Print log to console
-r RUNTIME, --runtime RUNTIME
Runtime of packet sniffing in seconds
-v, --version show program's version number and exit
-p 指定端口,MySQL默认3306
-c 是把抓取到的SQL打印到终端
-t 指定具体的表名,例如只抓取t1,t2,t3这三张表, -t t1 t2 t3 (不支持正则表达式,请写具体的表名)
-l 抓取的SQL保存在哪个文件里,不指定默认保存在mysql_packet.sql文件里
-r 抓取多长时间,单位秒
hell> chmod 755 mysql_sniffer
在 MySQL 5.7 或者 MariaDB 机器上执行(SSH的ROOT权限)
shell> ./mysql_sniffer -p 3306
将会抓取60秒数据(-r 代表抓取的时间,单位秒),默认会把线上的SQL语句(select/insert/update/delete)存入mysql_packet.sql文件里。


抓取1-10分钟数据,然后把mysql_packet.sql文件拷贝到MySQL 8.0测试环境里,然后执行下面的命令:
mysql -S /tmp/mysql_mysql8_1.sock yourDB < mysql_packet.sql > /dev/null
看报错信息。没有报错,就代表SQL是兼容的。
注:请确保生产环境和测试环境的表结构一致,测试环境不需要任何数据。
1) 假定 192.168.1.1 是 MySQL 5.7 / MariaDB,在该机器上运行./mysql_sniffer -p 3306 -c
2) 在 192.168.1.2 机器上运行sysbench,模拟出生产环境数据读写。
3) mysql_sniffer会实时打印出目前运行的SQL语句。
注:工具适用于 Centos6 和 Centos7 系统。
mysql_sniffer(Centos7)
mysql_sniffer_centos6(Centos6)
此工具现通过dbaplus社群免费为大家提供下载使用。若使用过程中有任何问题或建议,可随时与我们联系,欢迎大家试用。
https://github.com/hcymysql/mysql_sniffer

- 关注微信公众号【dbaplus社群】,点击菜单栏【资源下载】
- 登陆dbaplus社群官网:http://dbaplus.cn/list-142-1.html

dbaplus图谱丨分布式数据库的选型评测指南(附高清电子版)
《分布式数据库评测指南》由dbaplus社群联合发起人韩锋老师与社群共同编制,浓缩了数据库选型评测项精要,评测维度覆盖6大功能(数据库基本功能、数据库内核功能、数据库管理功能、数据库架构功能、数据库开发功能、数据库其他功能)共300+技术项,明晰数据库选型要点及设计思路,让广大数据库从业者在选型路上不再迷茫。获取方式:关注微信公众号【dbaplus社群】,消息栏回复【图谱】,即可获取下载链接
2023 XCOPS智能运维管理人年会·广州站将于11月24日举办,深耕传统行业,垂直运维及数据库两大领域,结合AI、云原生等新兴技术的融合创新,精选更符合产业发展、更适配企业落地的前沿及热门议题,码上报名,享早鸟优惠。

↓↓ 点这里了解XCOPS广州站更多详情及报名