使用mysql的通用查询日志获取操作sql

使用mysql的通用查询日志获取操作sql

有些时候ORM框架打印出来的sql有些时候并不那么友好,我们可以通过mysql的通用日志查询获取到mysql服务器接收到的sql,方便我们的排查.

1,名称解释

    general log: 开启 general log  将所有到达MySQL Server的SQL语句记录下来。

   一般不会开启开功能,因为log的量会非常庞大。但个别情况下可能会临时的开一会儿general log以供排障使用。 

2,具体使用

2.1 查看日志是否开启: OFF/ON

show variables like 'general_log';

2.1 开启日志:

set GLOBAL general_log = 'on';

2.2 设置输出到表:

set GLOBAL log_output = 'table';

2.3 执行系统程序的sql,这里模拟插入

insert into my_tables (my_name) VALUES ("martin");

表结构:

CREATE TABLE `my_tables` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `my_name` varchar(32) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4;

2.4 查看通用日志:

SELECT * from mysql.general_log;

2.5 我们还看到有很多条,过滤一下

select * from mysql.general_log where argument like 'insert%';

argument 字段 就能得到我们想要的

insert into my_tables (my_name) VALUES ("martin")

3,注意事项

general_Log文件处理:

当开启general_Log后,mysql中的所有操作将会记录下来,这样general_Log文件就会产生很大的文件,此时需要清空此文件来释放磁盘空间

3.1 错误操作:

网上有人建议直接删除该文件,不重启系统也会自动生成,但是通过测试,系统不会自动生产该文件

如果删除掉,重启mysql以后,general_log出现异常

3.2 正确的操作:

清空该表,具体操作如下:

SET GLOBAL general_log = 'OFF';

RENAME TABLE mysql.general_log TO mysql.general_log2;

DELETE FROM mysql.general_log2;

注意:当DELETE FROM mysql.general_log2执行删除表数据时,发现操作系统的数据文件还是存在的,需要手动删除该数据文件,再继续下面数据操作步骤

OPTIMIZE TABLE general_log2;

RENAME TABLE mysql.general_log2 TO mysql.general_log;

SET GLOBAL general_log = 'ON';
 

4,总结

有些时候我们很难获取到sql或者日志中打印出来的sql与我们预想中不一致时,可以使用此方法进行排查,但一定要记住使用完毕后将日志关闭.

日志的也可以记录到文件中,这里不做额外的补充,感兴趣的可以自行检索.

资料参考:https://blog.csdn.net/Abysscarry/article/details/79949480

<<MySql排错指南>>

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值