查看方式
- GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。
- 已知至少有两种方式可以实现
- 开启命令
mysql> set global general_log=ON;
- 执行一些操作
[root@mgr2 ~]# mysql -uGreatSQL -pGreatSQL -h192.168.6.217 -P3306
mysql> use test;
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| book|
| student|
| t1|
+----------------+
3 rows in set (0.01 sec)mysql> select * from t1;
+------+--------+
| id| name|
+------+--------+
|1 | 哈哈|
|2 | 你好|
|3 | 呵呵|
+------+--------+
5 rows in set (0.00 sec)mysql> delete from test.t1 where id=4;
Query OK, 1 row affected (0.02 sec)
- 查看
general_log
日志信息,已经完整记录到了。
2022-01-20T21:46:17.073491-05:0032 ConnectGreatSQL@192.168.6.216 onusing TCP/IP
2022-01-20T21:46:17.074048-05:0032 Queryselect @@version_comment limit 1
2022-01-20T21:46:20.217080-05:0032 QuerySELECT DATABASE()
2022-01-20T21:46:20.217657-05:0032 Init DBtest
2022-01-20T21:46:20.218960-05:0032 Queryshow databases
2022-01-20T21:46:20.220347-05:0032 Queryshow tables
2022-01-20T21:46:20.222050-05:0032 Field Listbook
2022-01-20T21:46:20.222644-05:0032 Field Liststudent
2022-01-20T21:46:20.223106-05:0032 Field Listt1
2022-01-20T21:46:22.856100-05:0032 Queryshow tables
2022-01-20T21:46:31.156616-05:0032 Queryselect * from t1
2022-01-20T21:46:43.136448-05:0032 Querydelete from test.t1 where id=4
2.抓包
- 这里采用 MySQL Sniffer 进行抓包。
- MySQL Sniffer 是一个基于 MySQL 协议的抓包工具,实时抓取 MySQL Server 端的请求,并格式化输出。
- 输出内容包访问括时间、访问用户、来源 IP、访问 Database、命令耗时、返回数据行数、执行语句等。有批量抓取多个端口,后台运行,日志分割等多种使用方式,操作便捷,输出友好。
- 开源出品方:奇虎360
- github 地址:https://github.com/Qihoo360/m...
yum install gcc gcc-c++ cmake libpcap-devel glib2-devel libnet-devel -y
3.安装命令
git clone https://github.com/Qihoo360/mysql-sniffer.git
cd mysql-sniffer
mkdir proj
cd proj
cmake ../
make
编译过程中出现一些问题,参考 https://www.cnblogs.com/kerry... 解决,感谢!
3.查看帮助
- 安装后工具在 bin 目录下。
[root@mgr3 bin]# ./mysql-sniffer -help
Usage ./mysql-sniffer [-d] -i eth0 -p 3306,3307,3308 -l /var/log/mysql-sniffer/ -e stderr
[-d] -i eth0 -r 3000-4000
-d daemon mode.
-s how often to split the log file(minute, eg. 1440). if less than 0, split log everyday
-i interface. Default to eth0
-p port, default to 3306. Multiple ports should be splited by ','. eg. 3306,3307
this option has no effect when -f is set.
-r port range, Don't use -r and -p at the same time
-l query log DIRECTORY. Make sure that the directory is accessible. Default to stdout.
-e error log FILENAME or 'stderr'. if set to /dev/null, runtime error will not be recorded
-f filename. use pcap file instead capturing the network interface
-w white list. dont capture the port. Multiple ports should be splited by ','.
-t truncation length. truncate long query if it's longer than specified length. Less than 0 means no truncation
-n keeping tcp stream count, if not set, default is 65536. if active tcp count is larger than the specified count, mysql-sniffer will remove the oldest one
4.测试
- 参考GITHUB进行测试
输出格式为:时间,访问用户,来源 IP,访问 Database,命令耗时,返回数据行数,执行语句。
- 控制台监听
文章图片
- 执行一些操作
mysql> use test;
Database changed
mysql> create table t1 (id int(11) not null auto_increment, name varchar(64), primary key(id));
Query OK, 0 rows affected (0.06 sec)mysql> insert into t1 values (1,'小明'),(2,'小陈');
Query OK, 2 rows affected (0.00 sec)
Records: 2Duplicates: 0Warnings: 0mysql> delete from t1 where id=1;
Query OK, 1 row affected (0.00 sec)mysql> select * from t1;
+----+--------+
| id | name|
+----+--------+
|2 | 小陈|
+----+--------+
1 row in set (0.00 sec)
- 控制台输出
2022-01-21 14:37:09GreatSQL192.168.6.216NULL0ms1select @@version_comment limit 1
2022-01-21 14:37:31GreatSQL192.168.6.216NULL0ms2show databases
2022-01-21 14:37:37GreatSQL192.168.6.216NULL0ms1SELECT DATABASE()
2022-01-21 14:37:37GreatSQL192.168.6.216test0ms0use test
2022-01-21 14:37:37GreatSQL192.168.6.216test0ms2show databases
2022-01-21 14:37:37GreatSQL192.168.6.216test11ms0show tables
2022-01-21 14:41:58GreatSQL192.168.6.216test60ms0create table t1 (id int(11) not null auto_increment, name varchar(64), primary key(id))
2022-01-21 14:42:40GreatSQL192.168.6.216test0ms2insert into t1 values (1,'小明'),(2,'小陈')
2022-01-21 14:42:54GreatSQL192.168.6.216test0ms1delete from t1 where id=1
2022-01-21 14:43:04GreatSQL192.168.6.216test0ms1select * from t1
- 目前看有正常抓取到信息
- 文件名称就是端口名称,如果文件没内容,可以改成MySQL用户权限组试一下
./mysql-sniffer -i eth1 -p 33061 -l ./
[root@mgr3 bin]# more 33061.log
2022-01-21 15:00:11NULL192.168.6.216test0ms0use test
2022-01-21 15:00:11NULL192.168.6.216test0ms1SELECT DATABASE()
- 其他功能就不一一测试了
- 特别注意,以上是在 MySQL5.6 版本测试获取的,在 8.0 版本中可能由于MySQL协议变更导致抓不到数据包,同时该工具存在一定的丢包情况。
文章推荐: GreatSQL MGR FAQ
https://mp.weixin.qq.com/s/J6...
万答#12,MGR整个集群挂掉后,如何才能自动选主,不用手动干预
https://mp.weixin.qq.com/s/07...
『2021数据技术嘉年华·ON LINE』:《MySQL高可用架构演进及实践》
https://mp.weixin.qq.com/s/u7...
一条sql语句慢在哪之抓包分析
https://mp.weixin.qq.com/s/AY...
万答#15,都有哪些情况可能导致MGR服务无法启动
https://mp.weixin.qq.com/s/in...
技术分享 | 为什么MGR一致性模式不推荐AFTER
https://mp.weixin.qq.com/s/rN...
关于 GreatSQL GreatSQL是由万里数据库维护的MySQL分支,专注于提升MGR可靠性及性能,支持InnoDB并行查询特性,是适用于金融级应用的MySQL分支版本。
Gitee:
https://gitee.com/GreatSQL/Gr...
GitHub:
https://github.com/GreatSQL/G...
Bilibili:
https://space.bilibili.com/13...
微信&QQ群:
可搜索添加GreatSQL社区助手微信好友,发送验证信息“加群”加入GreatSQL/MGR交流微信群
【万答#21,如何查看 MySQL 数据库一段时间内的连接情况】QQ群:533341697
微信小助手:wanlidbc
本文由博客一文多发平台 OpenWrite 发布!
推荐阅读
- 只要9.9元!零基础学习MySQL
- 技术分享|闪回在MySQL中的实现和改进
- 万答#20,索引下推如何进行数据过滤
- linux 磁盘io利用率高,分析的正确姿势
- 技术分享 | Prometheus+Grafana监控MySQL浅析
- 万答#19,MySQL可以禁用MyISAM引擎吗()
- 技术分享|sysbench 压测工具用法浅析
- MySQL金融应用场景下跨数据中心的MGR架构方案(1)
- MySQL金融应用场景下跨数据中心的MGR架构方案(2)