MySQL日志文件( 二 )


1)表的存储引擎为NDB,这时对表的DML操作都会以ROW格式记录;
2)使用了UUID()、USER()、CURRENT_USER()、FOUND_ROWS()、ROW_COUNT()等不确定函数;
3)使用了INSERT DELAY语句;
4)使用了用户定义函数(UDF);
5)使用了临时表(temporary table) 。
此外,binlog_format参数还有对于存储引擎的限制 。
在通常情况下,我们将参数binlog_format设置为ROW,这可以为数据库的恢复和复制带来更好的可靠性,但是这会带来二进制文件大小的增加
要查看二进制日志文件内容,必须通过MySQL提供的工具mysqlbinlog 。对于STATEMENT格式的二进制日志文件,在使用mysqlbinlog后,看到的就是执行的逻辑SQL语句 。但是,如果使用ROW格式记录,会发现mysqlbinlog的结果变得“不可读”,其实只要加上参数-v或-vv就能清楚地看到执行的具体信息了(-vv会比-v显示更新的类型) 。
3、作用二进制日志的主要作用如下:
1)恢复(recovery):某些数据的恢复需要二进制日志,例如,如果需要恢复数据库全量备份的文件,可以通过二进制日志进行point-in-time恢复 。
2)复制(replication):通过复制和执行二进制日志slave与master进行实时同步 。
3)审计(audit):用户通过二进制日志中的信息来进行审计,判断是否有对数据库进行注入的攻击 。
2.3 查询日志1、概述查询日志记录了所有对MySQL数据库的请求信息,不论这些请求是否得到正确的响应 。
默认文件名为:主机名.log 。
2、区别二进制日志与查询日志区别:
二进制日志不包含只查询数据的语句,查询日志记录了客户端的所有语句 。
2.4 慢查询日志1、概述慢查询日志记录了所有执行时间超过参数long_query_time(单位:秒,运行时间等于long_query_time的情况不会被记录)设置值并且扫描记录数不小于min_examinied_row_limit的所有SQL语句的日志(注意,获得表锁定的时间不算做指定时间) 。
慢查询日志默认关闭,需要手动开启 。
MySQL5.1开始,支持将慢查询日志记录到表中,这样用户查询就更加方便直观了 。慢查询表在MySQL架构下,名称为slow_log 。
2、参数set slow_query_log:是否开启慢查询日志,通过set slow_query_log=on;开启 。
long_query_time:阈值 。long_query_time默认为10秒,最小为0,从MySQL5.1开始,精度可以到微秒 。
min_examinied_row_limit:允许扫描的最小行数 。
long_queries_not_using_indexes:如果运行SQL未命中索引,则MySQL数据库同样会将这条SQL语句记录到慢查询日志中(这样方便后续优化) 。
MySQL5.6新增一个参数log_throttle_queries_not_using_indexes,用来表示每分钟允许记录到slow log且未命中索引的SQL语句次数 。
long_query_io:将超过指定逻辑IO次数的SQL语句记录到slow_log中,该值默认为100 。
为了兼容原MySQL数据库的运行方式,还添加了参数slow_query_type,用来表示启用slow log的方式 。可选的值为:
0:表示不把SQL语句记录到slow log
1:表示根据运行时间将SQL语句记录到slow log
2:表示根据逻辑IO次数将SQL语句记录到slow log
3:表示根据运行时间及逻辑IO次数将SQL语句记录到slow log
3、分析如果在慢查询日志中搜索,则会非常不方便,分析起来很麻烦,MySQL提供了mysqldumpslow工具帮助分析慢查询日志 。
指令:mysqldumpslow ***-slow.log
如果希望得到执行时间最长的5条SQL语句,操作如下:
mysqldumpslow -s -al -n 5 ***-slow.log
【MySQL日志文件】添加微信免费咨询高性价比云主机信息
微信号:kinnah333

推荐阅读