当前位置: 首页 > article >正文

【Mysql】基于MySQL协议的抓包工具

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 抓取多长时间,单位秒

使用:

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是兼容的。

注:请确保生产环境和测试环境的表结构一致,测试环境不需要任何数据。


http://www.kler.cn/news/134695.html

相关文章:

  • 使用Docker/K8S/Helm部署项目流程
  • Revive开发商加入VR开源标准OpenXR
  • 音频录制实现 绘制频谱
  • PyInstaller 如何 将第三方库打包到可执行文件
  • spring boot @Autowired 注入的服务为null
  • 1.索引的本质
  • 斯坦福机器学习 Lecture2 (假设函数、参数、样本等等术语,还有批量梯度下降法、随机梯度下降法 SGD 以及它们的相关推导,还有正态方程)
  • P2444 [POI2000] 病毒
  • 1688商品详情原数据(2023年11月最新版)
  • MySQL集群高可用架构之MMM
  • 八股文-TCP的四次挥手
  • “智能与未来”2024世亚国际智能机器人展会(简称:世亚智博会)
  • Swin Transformer
  • 云端援手:智能枢纽应对数字资产挑战 ——华为云11.11应用集成管理与创新专区优惠限时购
  • 图神经网络:消息传递算法
  • 使用JDK自带java.util.logging.Logger引起的冲突问题
  • HTTP(Hypertext Transfer Protocol)协议
  • Cadence virtuoso drc lvs pex 无法输入
  • AlmaLinux download
  • 开发中遇到的问题
  • HarmonyOS开发(四):应用程序入口UIAbility
  • 小米手环8pro重新和手机配对解决办法
  • java: 无法访问org.mybatis.spring.annotation.MapperScan
  • 智能货柜:无人零售行业的新宠
  • JDBC编程
  • 阿里云CentOS主机开启ipv6
  • Windows10下Maven3.9.5安装教程
  • 代码逻辑修复与其他爬虫ip库的应用
  • 探索SPI:深入理解原理、源码与应用场景
  • 【Matterport3D模拟器安装详细教程】适用于离散视觉语言导航任务的环境部署与安装