Mysql 日志详解

Posted coder_up

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mysql 日志详解相关的知识,希望对你有一定的参考价值。

1. mysql 日志分类

  1. 错误日志
  2. 查询日志
  3. 慢查询日志
  4. 事务日志
  5. 二进制日志
  6. 中继日志

2. 错误日志

首先需要明确的是, 错误日志中记录的未必都是错误日志,在Mysql的错误日志中,存储以下日志信息
1. 服务器启动和关闭过程中的信息
2. 服务器运行过程中的错误信息
3. 事件调度器运行一个事件时产生的信息
4. 在从服务器上启动从服务器进程时产生的信息
日志参数变量都是全局定义的,会话级别是没有的.

2.1. 默认配置

  1. 错误日志目录
    1. datadir=/dir/to/mysql/datadir
  2. 错误日志文件名称
    1. hotname.log

2.2. 参数配置

log_error = on|文件路径 是否启用错误日志,on表示开启,文件路径表示指定自定义日志路径
log_warnings = 1|0 是否记录warnings信息到错误日志中

3. 查询日志

3.1 参数配置

log = on|off 是否开启日志功能, 这个设置包含了查询日志慢查询日志
general_log = on|off 是否开启查询日志
general_log_file = /path/to/file 指定查询日志的位置
log_output = FILE|table 日志输出的位置, 这个指令对慢查询日志也起作用

4. 慢查询日志 建议开启,可以定位服务器性能问题

4.1. 参数配置

slow_query_log = on|off 开启慢查询
slow_query_log_file = /path/to/file 指定保存慢查询文件的位置
long_query_time=5(s) 超过多长时间表示慢查询 可精确到微妙, 从语句开始到结束,所有时间都算, 哪怕阻塞时间也算

4.2. 分析慢查询的工具

  1. explain sql statements
  2. show profile for query num 需要开启profiling

5. 事务日志

  1. 事务日志是被轮转的,一启动就分配完毕了, 并且是连续的存储空间,默认每个文件的大小为5M
  2. 主要功能: 将随机I/O转换为顺序I/O
  3. ib_logfile0, ib_logfile1, 这两个文件如果坏了那么对于mysql来说是致命的, 所以建议事务log使用raid

5.1 参数配置

innodb_log_group_home_dir 一般事务日志都要求两个以上,一个使用满了,在使用另一个,如此往复循环交替使用
innodb_log_file_in_group 日志组中的日志文件个数,默认2个
innodb_log_file_size 每个日志文件的大小, 默认5M, 太大了会导致恢复起来比较慢
innodb_log_buffer_size innodb日志内存缓冲区大小, 日志是先写入到程序的内存缓冲区中,然后才同步到事务日志文件中的
innodb_flush_log_at_trx_commit 在事务提交的时候,innodb是否同步刷新日志从缓冲区到事务日志文件中去的 (0,1,2)三种可选

  1. 设置为1最靠谱
  2. 这个参数是提高innodb性能的参数

innodb_mirrored_log_groups=1 日志组的镜像备份, 备份一定要放到不同的磁盘上

6. 二进制日志

6.1 参数配置

log_bin = on|文件路径 是否启用二进制日志,on表示开启,文件路径表示指定自定义日志路径, 默认路径在datadir指定的路径下,

  1. 只要重启了服务, binlog二进制日志就会自己滚动一个新的, 或者使用flush logs 手动滚动日志
  2. 记录的信息 主要是记录修改数据或有可能引起数据改变的MySql语句, 记录时间,操作时长,等等信息
  3. 日志格式: 基于(语句, row, mixed) 默认mixed
  4. 每一个二进制日志叫做一个Binary log event(二进制日志事件), 每一个二进制日志事件都有自己的元数据(meta data)信息, 时间,操作时长….
  5. 每个二进制日志的上限是1G

binlog_cache_size 默认启动的时候二进制的大小
binlog_format = (statement|row|mixed)
binlog_stmt_cache_size 基于语句格式的二进制日志缓存的大小
expire_logs_days=100 表示100天之前的日志自动清理掉建议别设置,还是自己手动purge最好
sql_log_bin 会话级别临时关闭或开启二进制日志的控制选项 set session sql_log_bin=0
sync_binlog=1 同步binlog的时机, 每执行一次事务提交,就同步二进制日志从内存中到磁盘中去, 建议开启
max_binlog_cache_size 最大二进制缓存大小
max_binlog_size 最大二进制日志大小,默认1G,当达到这个值以后会自动滚动的
max_binlog_stmt_cache_size 最大基于语句二进制缓存大小

6.2 二进制日志文件的删除操作

mysql> PURGE BINARY | MASTER LOGS TO 'log_name' | BEFORE datetime_expr

Examples:

PURGE BINARY LOGS TO ‘mysql-bin.010’;
PURGE BINARY LOGS BEFORE ‘2008-04-02 22:46:26’;
purge binary logs to 'mysql-bin.000009' 删除000009之前的日志文件

6.3 二进制日志的查看

  1. mysqlbinlog mysql-bin.000015
    1. --start-datetime=#
    2. --stop-datetime=#
    3. --start-position=#
    4. --stop-position=#
    5. 还可以使用-u,-p,-h 去读取其他主机上的二进制日志
  2. show binary logs
  3. show master logs
  4. SHOW BINLOG EVENTS [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count]

7. 中继日志

  1. 在复制过程中产生的日志
  2. 一个线程读取别人的二进制日志,存到本地叫做中继日志,然后本地在开启一个线程去读取中继日志在本地做回放,就完成了数据的同步

7.1 参数配置

max_relay_log_size 最大中继日志大小
relay_log_info_file=relay-log.info 中继日志存放的文件

以上是关于Mysql 日志详解的主要内容,如果未能解决你的问题,请参考以下文章

mysql二进制日志文件详解

mysql 日志

mysql-删除日志文件命令详解

mysql5.6快速安装及参数详解

MySQL提升笔记日志文件详解

Mysql 日志管理详解