MySQL各种日志总结


日志类型:

  • 错误日志(error log)
  • 常规日志(general log)
  • 二进制日志(bin log)
  • 中继日志(relay log)
  • 慢日志(slow log)
  • InnoDB引擎的redo log

错误日志

log-error = error.log

不加存储路径存储到datadir下,如果不指定名字是hostname.err

记录mysql启动关闭,运行中的异常或是重要提示信息

在生产环境中,监控这个日志

全量日志(常规日志)

general_log = OFF|ON

general_log_file = general.log

不指定路径存储到datadir下,如果不指定名字是hostname.log

开启后,记录client和数据库的所有请求

二进行日志  最大文件数为2的32次方个

log-bin = /data/mysql/mysql3306/logs/mysql-bin

设置二进制日志的存储位置及prefix名字

用记录数据库写入操作的日志,可以用于备份或是master/slave的复制,必须有server-id

如果没有可以通过修改内存里的值加上,但是有风险

不能太快产生,尽量大些,5分钟左右产生一个日志

log_bin = /data/mysql/mysql3306/log/mysql-bin 是否开启binlog

log_bin_index = /data/mysql/mysql3306/log/mysql-bin.index

指定binlog的一个索引文件,默认是在datadir形成log_bin的prefix名index

binlog_do_db = thunder

用于指定只记录那个库的二进制日志(建议不要用)

max_binlog_size = 500M

指定binlog的大小为500M一个文件,默认是1G

expire-logs-days = 5

指定保留binlog的天数

binlog_format = row

指定binlog的日志格式,支持statement,row,mixed格式

statement格式记录原生的sql

row格式里没有,但5.6后增加了一个query event可以看到原来的sql

binlog_rows_query_log_events 默认是off

mixed格式是两种形式的混合体,DDL语句记录statement格式,DML语句记录row格式

推荐使用row格式

binlog_row_image = full

控制日志中binlog的详细相关的程度,支持full(default),minimal,nobolb

minimal:只记录变化的行和唯一标识列

nobolb:除了blob,text其它列都记

binlog_error_action = abort_server

当遇到mysql不能写binlog时,报出异常,默认是ignore error不报错

binlog_direct_non_transactional_updates = on

对于非事务引擎表,直接走日志,不走2pc提交,默认是不支持

binlog_order_commit = on

按顺序写入日志

binlog_cache_size=1M 已经很大

此参数表示binlog使用的内存大小,可以通过状态变量binlog_cache_use和bin_cache_disk_use 来帮助测试

binlog_cache_use:使用二进制日志缓存的事务数量

binlog_cache_disk_use:使用二进制日志缓存但超过binlog_cache_size值并使用临时文件来保存事务中的语句的事务数量

binlog_checksum (5.6.2引入)在高版本上修改

mysql5.6.6后默认是crc32,之前版本是none

在启用这个参数之前对于日志的完整校验就是通过对比长度,引入新的方式后,利用新方法对内容进行校验

binlog_rows_query_log_events (5.6.2引入)

只作用于RBR格式,默认不启用

如果启用,会把用户写直的原生态DML操作记录到binlog中

log_bin_use_v1_row_events (5.6.6引入)

默认是0,如果使用1是使用Version1的格式,mysql5.5可以认出来的形式,如果0是5.6.6后使用的version2格式

sync_binlog = 1|0

这个参数对性能影响严重,数据一致性条件要求高调整为1,性能差别大概为10倍

当事务提交后,mysql仅仅是将binlog_cache中的数据写入binlog文件,但不执行fsync之类的磁盘同步指令通知文件系统将缓存刷新到磁盘,面让filesystem自行决定什么时候来同步,这个是性能最好的。

sync_binlog=n 在进行n次事务提交以后,mysql将执行一次fsync之类的磁盘同步指令,同步文件系统将binlog文件缓存刷新到磁盘。

mysql中默认的设置是sync_binlog=0,即不作任何强制性的磁盘刷新指令,这是性能是最好的,但风险也是最大的。一旦系统crash,在文件系统缓存中的所有binlog信息都会丢失

中继日志

relay-log = relay-bin

设置中继日志的名称前缀,不指定路径默认在datadir下

log_thread从master就读到的日志写到中继日志中,供sql_thread执行,以完成复制

慢日志

slow-query-log-file = slow.log

slow-query-log

long_query_time=1

是怎么计时的,

ddl语句 exec时间

dml语句 select从等待锁开始计时,insert只记录执行时间

利用slow-query-log这个参数打开慢日志,slow-query-log-file指定慢日志的名称,不指定路径默认在datadir下

建议每天一个文件,时间长可能会很大,做定时任务

Innodb的redo log 《事务处理概念》事务处理圣经

innodb_log_group_home_dir=/data/mysql/mysql3317/logs 默认在datadir下

SSD磁盘中,日志文件不要放在SSD磁盘中,普通硬盘即可

innodb_log_file_size = 200M 512M左右即可

innodb_log_files_in_group = 3 个数

指定redo log的存储位置及大小,文件个数

Innodb事务操作不可缺少的一个环节

本文永久更新链接地址

相关内容