Mysql 日志详解
Posted coder_up
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mysql 日志详解相关的知识,希望对你有一定的参考价值。
1. mysql 日志分类
- 错误日志
- 查询日志
- 慢查询日志
- 事务日志
- 二进制日志
- 中继日志
2. 错误日志
首先需要明确的是, 错误日志中记录的未必都是错误日志,在Mysql的错误日志中,存储以下日志信息
1. 服务器启动和关闭过程中的信息
2. 服务器运行过程中的错误信息
3. 事件调度器运行一个事件时产生的信息
4. 在从服务器上启动从服务器进程时产生的信息
日志参数变量都是全局
定义的,会话级别是没有的.
2.1. 默认配置
- 错误日志目录
datadir=/dir/to/mysql/datadir
- 错误日志文件名称
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. 分析慢查询的工具
- explain sql statements
- show profile for query num
需要开启profiling
5. 事务日志
- 事务日志是被轮转的,一启动就分配完毕了, 并且是连续的存储空间,默认每个文件的大小为
5M
主要功能:
将随机I/O转换为顺序I/Oib_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
最靠谱- 这个参数是提高innodb性能的参数
innodb_mirrored_log_groups=1
日志组的镜像备份, 备份一定要放到不同的磁盘上
6. 二进制日志
6.1 参数配置
log_bin = on|文件路径
是否启用二进制日志,on
表示开启,文件路径
表示指定自定义日志路径, 默认路径在datadir
指定的路径下,
- 只要重启了服务, binlog二进制日志就会自己滚动一个新的, 或者使用
flush logs
手动滚动日志记录的信息
主要是记录修改数据或有可能引起数据改变的MySql语句, 记录时间,操作时长,等等信息- 日志格式: 基于(
语句
,row
,mixed
) 默认mixed
- 每一个二进制日志叫做一个
Binary log event(二进制日志事件)
, 每一个二进制日志事件都有自己的元数据(meta data
)信息, 时间,操作时长….- 每个二进制日志的上限是
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 二进制日志的查看
mysqlbinlog mysql-bin.000015
--start-datetime=#
--stop-datetime=#
--start-position=#
--stop-position=#
- 还可以使用
-u
,-p
,-h
去读取其他主机上的二进制日志
show binary logs
show master logs
SHOW BINLOG EVENTS [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count]
7. 中继日志
- 在复制过程中产生的日志
- 一个线程读取别人的二进制日志,存到本地叫做
中继日志
,然后本地在开启一个线程去读取中继日志在本地做回放
,就完成了数据的同步
7.1 参数配置
max_relay_log_size
最大中继日志大小
relay_log_info_file=relay-log.info
中继日志存放的文件
以上是关于Mysql 日志详解的主要内容,如果未能解决你的问题,请参考以下文章