MySQL记录全执行SQL语句
遇到性能问题时候,排查到数据库部分,一般都是看慢sql,但是有的时候慢sql也看不出什么东西,这个时候,如果可以有办法记录所有执行的sql,那排查起来可以更方便点。
开启日志查询功能
1
| SHOW VARIABLES LIKE 'general%';
|
返回结果:
1 2 3 4 5 6 7
| +------------------+----------------------------------------------+ | Variable_name | Value | +------------------+----------------------------------------------+ | general_log | OFF | | general_log_file | /data/mysql_data/izuf65tvx7it01x88bzbp4z.log | +------------------+----------------------------------------------+ 2 rows in set (0.00 sec)
|
可以看出,当前是关闭状态,开启即可:
1
| set GLOBAL general_log='ON';
|
再查一下:
1
| SHOW VARIABLES LIKE 'general%';
|
返回结果:
1 2 3 4 5 6 7
| +------------------+----------------------------------------------+ | Variable_name | Value | +------------------+----------------------------------------------+ | general_log | ON | | general_log_file | /data/mysql_data/izuf65tvx7it01x88bzbp4z.log | +------------------+----------------------------------------------+ 2 rows in set (0.00 sec)
|
搞定,这下,调接口之后就会有完成的sql看了。
binlog
嗯,这个方式,怎么说呢,自己level太低,不是很看得懂里面记录的,不过binlog文件里记录的的确是全部的sql,最全。
binlog使用mysqlbinlog
工具来查看。
查看binlog状态:
1
| show variables like "%log_bin%";
|
返回结果:
1 2 3 4 5 6 7 8 9 10 11
| +---------------------------------+----------------------------------+ | Variable_name | Value | +---------------------------------+----------------------------------+ | log_bin | ON | | log_bin_basename | /data/mysql_data/mysql-bin | | log_bin_index | /data/mysql_data/mysql-bin.index | | log_bin_trust_function_creators | ON | | log_bin_use_v1_row_events | OFF | | sql_log_bin | ON | +---------------------------------+----------------------------------+ 6 rows in set (0.00 sec)
|
就能看见binlog状态以及保存路径了