1 日志概述
MySQL服务器使用五种日志,分别是general_log,error_log,slow_log,binlog,relay_log
默认并不开启日志。若开启日志,通常将日志写入datadir下。通过flush logs方式可以指示服务器关闭当前日志并启用新日志文件。
其中general log和slow query log可以
动态配置打开及日志路径。
--log-output选项指定FILE|TABLE使得日志可以输出到文件或输出到mysql的数据表中,其中FILE是默认选项。若定向到表中可能带到一定的性能损失。此选项支持运行时动态改变。
日志
|
开关变量
|
路径变量
|
general log
|
general_log
|
general_log_file
|
slow query log
|
slow_query_log
|
slow_query_log_file
|
这些相应的系统变量也对应着启动时参数。
值得说明的是若采用TABLE格式,则这两个表只能是CSV引擎或MYISAM的,不能运行时改变引擎。
其他日志不支持动态配置,需要从命令行选项上打开和指定。若打开,默认路径在数据目录中。
日志类型
|
日志路径选项
|
error log
|
--log-error
|
binlog
|
--log-bin
|
2 Error Log
对于error log,使用flush使得关闭文件并再次打开,因此若想创建新文件,需要手工将旧文件重命名,再flush logs。log-warnings的值可以控制将哪些级别的警告信息写入到error-log。
3 General Query Log
查询日志记录了服务器所进行的所有查询,以及这些查询的客户端信息。这些记录是按服务器收到的顺序写入的。与之相反binlog则是按执行顺序记录的,而且并不记录select语句。
General log在刷新时也不能生成新的文件,可以通过指定新的日志文件名实现动态的文件切换。
会话变量sql_log_off可以设置为off,以关闭此次会话的日志记录。
4 binary-log
binlog在复制和备份恢复中有着重要的作用。只有完成的事件和事务才会写入到binlog中。
选项名
|
值
|
含义
|
--log-bin
|
path
|
设置binlog的文件路径及名称前缀
系统生成文件后缀为6上数字,从000001开始递增
|
--log-bin-index
|
|
指定索引文件,此文件指示当前使用了哪个日志文件
|
--max-binlog-size
|
|
单个binlog文件上限,系统会自动切换日志文件
当然系统会在完成一个事务后才切换
大小限制并不是严格限制
|
--log-slave-updates
|
|
从库更新也写binlog
|
--binlog-do-db
|
|
只记录指定库的更新到binlog
|
--binlog-ignore-db
|
|
不记录指定库的更新到binlog
|
--replicate-do-db
|
|
|
--replicate-ignore-db
|
|
|
--sync-binlog
|
{0|1}
|
控制何时将日志写入硬盘,0由操作系统决定;1事务结束时,性能最差
|
--binlog-format
|
row
stat
mixed
|
设置binlog的日志格式
|
默认情况下,从库在更新时自己不写日志文件,但如果使用链式复制,从库作为另一个库的主库,则可以设置选项log-slave-updates,同时打开log-bin,则可以使得从库同时写日志。
运行时可通过sql_log_bin=ON打开。
reset master 清除所有日志,需要注意不要把从库未同步到的日志也清除了
purge binary logs to 'log-file' 可以清除部分日志
相关变量与状态
变量--binlog_cache_size: 用来缓存事务相关语句,若语句大于此值,则需要临时文件
状态参数 binlog_cache_use,binlog_cache_disk_use 统计cache等的使用情况
binlog由三种不同的格式,可以通过--binlog-format=?来设定,格式可以运行时动态指定和切换。若某些语句执行时间很长,但影响的数据很少,或者对表的变化语句很多,但内容很少。这些都可以使用基于row的binlog。若一个语句会影响很多行,这种变化适合基于statement的binlog。指定为mixed,则由服务器自行决定如何记录。
MySQL服务器从5.6开始binlog格式与之前版本不同,这点需要注意。
5 slow query
慢查询日志可以用mysqldumpslow或percona的pt-query-digest进行分析,以对数据库索引进行分析和优化。mysqldumpslow的用法可参考
第4章的内容。
名称
|
值
|
含义
|
--slow-query-log
|
|
|
--slow-query-log-file
|
|
|
--long-query-time
|
|
当查询执行时间超过此值时记录此查询
|
--min-examined-row-limit
|
|
当查询查找的行数高于此值时才记录此查询
|
--log-slow-admin-statments
|
|
慢查询中也记录DDL语句
|
--log-query-not-using-indexes
|
|
慢查询中也记录不使用索引的语句,若打开会导致日志增长过快
|
--log_throttle_queries_not_using_index
|
|
可以通过来限制记录频率
|