show global variables like '%log%';
查询日志
log-output=FILE
general-log=1
general_log_file="filename.log"
慢查询日志
log_slow_queries=1 //MySQL 5.6将此参数修改为了slow_query_log
slow_query_log_file="filename.log"
long_query_time=10 //慢查的时长单位为秒,可以精确到小数点后6位(微秒)
二进制日志 (binlog)
二进制日志记录 MySQL 数据库中所有与更新相关的操作, 不包括数据查询语句。常用于恢复数据库和主从复制
SHOW VARIABLES LIKE 'log_bin%';
启用二进制日志功能
log-bin="filename-bin"
查看所有的二进制文件
show binary logs;
查看当前正在使用的二进制文件
show master status;
二进制日志滚动
flush logs;
定义二进制格式日志
binlog_format= Mixed|Statement|Row
二进制日志的有效天数
expire_logs_days = 5
实时将缓存中数据同步到硬盘中
sync_binlog
sync_binlog 的默认值是0,像操作系统刷其他文件的机制一样,MySQL不会同步到磁盘中去而是依赖操作系统来刷新binary log。
当sync_binlog =N (N>0) ,MySQL 在每写 N次 二进制日志binary log时,会使用fdatasync()函数将它的写二进制日志binary log同步到磁盘中去。
清除二进制日志
RESET MASTER;
清除指定日志之前的所有日志
PURGE MASTER LOGS TO 'mysql-bin.000003';
清除某一时间点前的所有日志
PURGE MASTER LOGS BEFORE '2015-01-01 00:00:00';
清除 n 天前的所有日志
PURGE MASTER LOGS BEFORE CURRENT_DATE - INTERVAL 10 DAY;
查看日志详细
SHOW BINLOG EVENTS [IN ‘log_name’] [FROM pos] [LIMIT [offset,]row_count]
show binlog events in 'mysql-bin.000059';
mysqlbinlog mysql-bin.000060 |more
事务(重做)日志
事物日志是innodb专用功能,这里只考虑innod存储引擎
事物日志默认情况下会有两个文件,名称分别为ib_logfile0和ib_logfile1
如果innodb_flush_log_at_trx_commit设置为0,log buffer将每秒一次地写入log file中,并且log file的flush(刷到磁盘)操作同时进行.该模式下,在事务提交的时候,不会主动触发写入磁盘的操作。
如果innodb_flush_log_at_trx_commit设置为1,每次事务提交时MySQL都会把log buffer的数据写入log file,并且flush(刷到磁盘)中去.
如果innodb_flush_log_at_trx_commit设置为2,每次事务提交时MySQL都会把log buffer的数据写入log file.但是flush(刷到磁盘)操作并不会同时进行。该模式下,MySQL会每秒执行一次 flush(刷到磁盘)操作
事物日志buffer大小 innodb_log_buffer_size
事物日志大小 innodb_log_file_size
innodb数据所在目录:innodb_data_home_dir = /usr/local/mysqldata
innodb数据格式:innodb_data_file_path = ibdata1:256M:autoextend
中继日志
中继日志用于主从复制架构中的从服务器上,从服务器的 slave 进程从主服务器处获取二进制日志的内容并写入中继日志,然后由 IO 进程读取并执行中继日志中的语句。
日志分析工具
mysqldumpslowmysql:官方提供的慢查询日志分析工具
mysqlsla:hackmysql.com 推出的一款日志分析工具(该网站还维护了 mysqlreport,mysqlidxchk 等比较实用的mysql 工具)。 整体来说,功能非常强大。输出的数据报表非常有利于分析慢查询的原因,包括执行频率、数据量、查询消耗等。