Mysql 日志管理
目录
警告
本文最后更新于 2022-06-28,文中内容可能已过时。
1. Mysql 日志管理
1.1. 类型
日志文件 | 选项 | 文件名(表名称) | 程序 |
---|---|---|---|
错误 | --log-error |
host_name.err |
N/A |
常规 | --general_log |
host_name.log general_log |
N/A |
慢(速)查询 | --slow_query_log --long_query_time |
host_name-show.log show_log |
mysqldumpslow |
二进制 | --log-bin --expire-logs-days |
host_name-bin.000001 |
mysqlbinlog |
审计 | --audit_log --audit_log_file |
audit.log |
N/A |
1.2. 错误日志
- 配置方法:
1 2
[mysqld] log-error=/var/log/mysql/mysql.log
- 查看方法
mysql> show variables like '%log_error%
- 作用
- 记录
mysql
数据库的一般状态及报错信息,是我们对于数据库常规报错处理的常用日志
- 记录
1.3. 常规日志
- 配置方法
|
|
- 查看方法
show variables like '%gen%'
- 作用
- 记录
mysql
所有执行成功的语句,可以作审计用,但很少开启
- 记录
1.4. 二进制日志(binlog)
-
二进制日志会记录已提交的数据,以
event
的形式记录到二进制文件中,其常用的记录格式有:-
row
: 行模式,即数据行的变化过程,将某一个值修改到另一个值的过程(建议及常用模式) TODO: mysql 配置文件中是否区分大小写(这个需要根据官方建议核查) -
statement
: 语句模式,直接记录执行过的语句,其优点是记录的数据好分析,数据量级小,比如批量修改,缺点就是记录函数(如:now()
)类操作不是特别准确(默认模式show variables like '%binlog_format%'
); -
mixed
: 以上两种的混合模式
-
-
开启、关闭及记录格式
|
|
sync_binlog
值为1
时,每次事务提交时就向磁盘进行写入
1.5. binlog 管理
pos
: 开始位置号
End_log_pos
: 结束位置号
- 查看当前所有二进制日志可用信息:
show binary logs;
- 当前正在使用的
binlog
日志:show master status
- 查看二进制日志中记录的事件:
show binlog events in 'mysql-bin.000002';
|
|
- 查看二进制文件内容(
mysqlbinlog
可能不会识别default-character-set=utf8
这个指令,报错为unknown variable
,解决指定参数--no-defaults
) TODO: unknown variable ‘default-character-set=utf8’(这个不识别就不识别吧,具体不是很清楚,也没有咨询到解决方案)
|
|
1.6. 慢日志管理 (my.cnf 中配置无顺序要求)
-
show variables like '%slow%'
-
show variables like '%long%
-
show variables like '%indexes%'
-
查询
- 是将
mysql
服务中影响数据库性能的相关sql语句记录到日志文件中 - 通过对这些特殊的sql语句分析,改进以达到提高数据库性能的目的
- 是将
-
设置
long_query_time
: 设定慢查询的阀值,超出设定值的sql即被记录到慢查询日志,缺省值为10s
show_query_log
: 指定是否开启慢查询日志slow_query_log_file
: 指定慢日志文件存放位置,可以为空,系统会给一个缺省的文件host_name-slow.log
min_examined_row_limit
: 查询检查返回少于改参数指定行的sql不会记录到慢查询日志log_queries_not_using_indexes
: 不使用索引的慢查询日志是否记录到索引
-
mysqldumpslow
(扩展命令mysqlsla
、pt-query-diagest percona-toolkit
)
导出host_name-slow.log
日志中执行次数最多的前10条数据mysqldumpslow -s c -t 10 host_name-slow.log
-
导出
host_name-slow.log
日志中平均执行时间的前10条数据mysqldumpslow -s at -t 10 host_name-slow.log