服务器之家:专注于服务器技术及软件下载分享
分类导航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|数据库技术|

服务器之家 - 数据库 - Mysql - dba+开源工具:8.0升级无障碍!基于MySQL协议的抓包工具

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

2023-11-01 01:03未知服务器之家 Mysql

mysql_sniffer工具简介 mysql_sniffer 是一个基于 MySQL 协议的抓包工具,用来实时抓取 MySQL 服务端的请求,并格式化输出,输出内容包括访问时间、来源 IP、执行的SQL语句。 在进行MySQL 8.0升级时,了解新版本对SQL语法的改变和新增的功能

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文件里。

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

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

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

工具下载:https://github.com/hcymysql/mysql_sniffer

延伸 · 阅读

精彩推荐
  • Mysqlmysql怎么开启远程登录功能

    mysql怎么开启远程登录功能

    做网站,要经常更新数据库,接触的数据库肯定都是mysql。有时候建站的时候因为数据库和网站放在不同的IP,这个时候就需要用程序进行mysql的远程连接,...

    MYSQL教程网12422021-12-22
  • MysqlXtrabackup使用指南 InnoDB数据备份工具

    Xtrabackup使用指南 InnoDB数据备份工具

    Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工具InnoDB Hotbackup的一个很好的替代品 ...

    MYSQL教程网3612019-11-26
  • Mysql浅析MySQL的lru链表

    浅析MySQL的lru链表

    这篇文章主要介绍了MySQL lru链表的相关资料,帮助大家更好的理解和使用MySQL数据库,感兴趣的朋友可以了解下...

    赐我白日梦10932021-03-11
  • Mysqlmysql8.0.11安装配置方法图文教程 MySQL8.0新密码认证方式

    mysql8.0.11安装配置方法图文教程 MySQL8.0新密码认证方式

    这篇文章主要为大家详细介绍了mysql8.0.11安装配置方法图文教程,以及MySQL8.0新密码认证方式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    淡淡的id3052020-09-08
  • MysqlMysql5.6 忘记root密码的解决办法

    Mysql5.6 忘记root密码的解决办法

    mysql5.6忘记root密码怎么办,用什么方法可以重置root密码呢?下面通过本文给大家介绍Mysql5.6 忘记root密码的解决办法,需要的朋友参考下...

    服务器之家4052020-05-29
  • MysqlMysql的列修改成行并显示数据的简单实现

    Mysql的列修改成行并显示数据的简单实现

    这篇文章主要介绍了Mysql的列修改成行并显示数据的简单实现,本文给大家介绍的非常详细,具有参考借鉴价值,需要的朋友可以参考下...

    HRuinger6102020-06-28
  • Mysql基于mysql查询语句的使用详解

    基于mysql查询语句的使用详解

    本篇文章是对mysql查询语句的使用进行了详细的分析介绍,需要的朋友参考下 ...

    MYSQL教程网2092019-12-25
  • MysqlMySQL三种日志有啥用?如何提高MySQL并发度?

    MySQL三种日志有啥用?如何提高MySQL并发度?

    当我们的系统能支持的并发比较低时,可以看看对应的redo log是不是设置的太小了。太小的话会导致频繁的刷脏页,影响并发,可以通过工具监控redo log的大...

    Java识堂6012021-05-20