使用 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;
usage: mysql_sniffer [-h] -p PORT [-l LOG] [-c] [-v]
MySQL packet sniffer
options:
-h, --help show this help message and exit
-p PORT, --port PORT MySQL server port
-l LOG, --log LOG Log file path
-c, --console Print log to console
-v, --version show program's version number and exit
shell> chmod 755 mysql_sniffer
在 MySQL 5.7 或者 MariaDB 机器上执行(SSH的ROOT权限)
shell> ./mysql_sniffer -p 3306
默认会把线上的SQL语句(select/insert/update/delete)存入mysql_packet.sql文件里。
mysql -S /tmp/mysql_mysql8_1.sock test < mysql_packet.log > /dev/null
1) 假定 192.168.1.1 是 MySQL 5.7 / MariaDB,在该机器上运行./mysql_sniffer -p 3306 -c
2) 在 192.168.1.2 机器上运行sysbench,模拟出生产环境数据读写。
3) mysql_sniffer会实时打印出目前运行的SQL语句。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。