社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  DATABASE

dba+开源工具:8.0升级无障碍!基于MySQL协议的抓包工具

DBAplus社群 • 1 年前 • 278 次点击  

工具研发者介绍

贺春旸,dbaplus社群金牌专家,凡普金科和爱钱进DBA团队负责人,《MySQL管理之道:性能调优、高可用与监控》第一&二版、《MySQL运维进阶指南》作者,曾任职于中国移动飞信、安卓机锋网。五次荣获dbaplus年度MVP,致力于MariaDB、MongoDB等开源技术的研究,主要负责数据库性能调优、监控和架构设计。

工具下载:

https://github.com/hcymysql/mysql_sniffer


mysql_sniffer工具简介



mysql_sniffer 是一个基于 MySQL 协议的抓包工具,用来实时抓取 MySQL 服务端的请求,并格式化输出,输出内容包括访问时间、来源 IP、执行的SQL语句。


在进行MySQL 8.0升级时,了解新版本对SQL语法的改变和新增的功能是非常重要的。通过使用mysql_sniffer,DBA可以在升级之前对现有的SQL语句进行抓取和分析,以确保在新版本中能够正常运行。


使用mysql_sniffer工具可以带来以下几点好处:


  • 对SQL语法的改变有更深入的了解:MySQL 8.0引入了一些新的SQL语法,也对一些旧的语法进行了修改或弃用。通过mysql_sniffer,DBA可以抓取并分析现有的SQL语句,以确定它们是否会受到这些改变的影响。

  • 发现并解决潜在的问题:如果在新版本中,某些SQL语句无法正常运行,那么通过mysql_sniffer,DBA可以提前发现这些问题,并在升级之前进行修复。


有一些已知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广州站更多详情及报名

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/163797
 
278 次点击