文章最后更新时间:2025年06月12日
常见的日志文件
日志类型 | 写入日志的信息 | 备注 |
---|---|---|
错误日志(error-log) | 记录MySQL在启动、运行和停止时遇到的问题 | 用于排查MySQL运行故障 |
一般查询日志(general_log) | 记录所有客户端发向服务端的请求 | 无论请求是否成功都会记录,数据量庞大,不建议长期开启,可临时开启排查问题 |
慢查询日志(slow_query_log) | 记录执行时间超过long_query_time 的查询 |
用于排查慢SQL,优化查询效率 |
二进制日志(binary_log) | 记录更改数据的语句(用于数据恢复和主从复制) | 建议开启,可用于数据恢复和主从复制 |
中继日志(relay_log) | 记录从主服务器收到的数据更改 | 用于主从复制,临时存储主库同步的二进制日志 |
DDL日志(元数据日志) | 记录DDL语句执行的元数据操作 | - |
错误日志(默认开启)
修改my.cnf文件
log_error=/path路径 # 默认存在$datadir/hostname.err
指定错误日志的路径
一般查询日志(默认禁用)
配置参数
# 开启常规查询日志(0表示禁用,1表示开启)
general_log=0
# 指定常规日志的路径及文件名
general_log_file=file_name
日志输出目标配置
log-output=value
# value=[ TABLE | FILE | NONE ],默认值为FILE
# TABLE:记录到表中(general_log表或slow_log表)
# FILE:记录到文本文件中
# NONE:不记录到表或文件
慢查询日志
配置参数
# 开启慢查询日志(0表示关闭,1表示开启)
slow_query_log=1
# 指定慢查询日志的路径及文件名,默认$datadir/host_name-slow.log
slow_query_log_file=file_name
# 定义日志输出目标
log-output=value
# 定义查询超过N秒即记录(最小值0,默认10秒)
long_query_time=1
# 记录执行较慢的管理语句
log_slow_admin_statements=1
# 记录执行较慢的未使用索引的语句
log_queries_not_using_indexes=1
案例
vim /etc/my.cnf
slow_query_log=1 # 开启慢查询日志功能
slow_query_log_file=/data/log/slow.log # 指定日志路径
long_query_time=1 # 超过1秒视为慢查询
二进制日志
作用
- 记录数据库的所有更改操作(DDL/DML/DCL),不包含查询语句
- 用于主从复制:主服务器发送二进制日志到从服务器,实现数据同步
- 用于数据恢复
开启方式
默认关闭,使用log-bin=xxx
参数开启,通过mysqlbinlog
工具查看。
三种格式
日志格式 | 含义 |
---|---|
STATEMENT | 基于SQL语句记录,记录修改数据的SQL语句 |
ROW | 基于行记录,记录每一行的数据变更(默认格式) |
MIXED | 混合STATEMENT和ROW格式,默认使用STATEMENT,特殊情况自动切换为ROW |
案例
# 创建bin目录存放二进制日志
[root@localhost mysql5.7]# mkdir /data/mysql57/log/bin
[root@localhost mysql5.7]# chown -R mysql:mysql /data/
[root@localhost mysql5.7]# vim my.cnf
# 开启二进制日志
log-bin=/data/mysql57/log/bin/mybin.log
# 设置二进制日志使用内存大小
binlog_cache_size=1M
# 设置日志格式
binlog_format=row
# 二进制日志过期清理时间(7天)
expire_logs_days=7
# 跳过主从复制中的1062错误(主键重复)
slave_skip_errors=1062
# 服务器ID(需唯一)
server-id=1
# 读写权限(0=读写,1=只读)
read-only=0
# 忽略备份的数据库
binlog-ignore-db=mysql
# 查看二进制日志文件
[root@localhost mysql5.7]# ls /data/mysql57/log/bin/mybin.000001 mybin.index
查看二进制日志是否开启
mysql> show variables like "%log_bin%";
+---------------------------------+-----------------------------------+
| Variable_name | Value |
+---------------------------------+-----------------------------------+
| log_bin | ON |
| log_bin_basename | /data/mysql57/log/bin/mybin |
| log_bin_index | /data/mysql57/log/bin/mybin.index |
| log_bin_trust_function_creators | OFF |
| log_bin_use_v1_row_events | OFF |
| sql_log_bin | ON |
+---------------------------------+-----------------------------------+
6 rows in set (0.00 sec)
# 临时开启/关闭
# mysql> set global log_bin=on;
查看二进制日志内容
二进制日志需通过mysqlbinlog
工具查看,常用参数:
-d
:指定数据库名称-o
:忽略前N行命令-v
:将行事件重构为SQL语句-vv
:重构SQL并输出注释信息
# 新建数据库并插入数据
[root@localhost mysql5.7]# mysql -S /tmp/mysql57.sock -uroot -p
Enter password:
mysql> create database ldx;
Query OK, 1 row affected (0.00 sec)
# 查看二进制日志(ROW格式需加-v参数解析)
[root@localhost bin]# /usr/local/mysql5.7/bin/mysqlbinlog -v mybin.000002
...
### INSERT INTO `ldx`.`student`
### SET
### @1=3
### @2='张飞'
### @3=26
...
### INSERT INTO `ldx`.`student`
### SET
### @1=4
### @2='关羽'
### @3=27
...
mysql> select * from student;
+------+--------+------+
| id | name | age |
+------+--------+------+
| 1 | 张三 | 23 |
| 2 | lisi | 26 |
| 3 | 张飞 | 26 |
| 4 | 关羽 | 27 |
+------+--------+------+
4 rows in set (0.00 sec)
中继日志
作用
- 用于主从复制:主服务器发送二进制日志到从服务器,从服务器先存储到中继日志,再执行日志中的SQL以保持数据同步。
- 默认未开启,使用
relay-log
参数开启。
配置参数
# 开启中继日志
relay-log=/data/mysql57/log/relay/myrelay.log
# 保证中继日志完整性
relay-log-recovery=1
# 日志写入系统缓存(保证安全性)
sync-relay-log=1
查看中继日志配置
mysql> show variables like '%relay%';
+---------------------------+---------------------------------------+
| Variable_name | Value |
+---------------------------+---------------------------------------+
| max_relay_log_size | 0 |
| relay_log | /data/mysql57/log/relay/myrelay.log |
| relay_log_basename | /data/mysql57/log/relay/myrelay |
| relay_log_index | /data/mysql57/log/relay/myrelay.index |
| relay_log_info_file | relay-log.info |
| relay_log_info_repository | FILE |
| relay_log_purge | ON |
| relay_log_recovery | ON |
| relay_log_space_limit | 0 |
| sync_relay_log | 1 |
| sync_relay_log_info | 10000 |
+---------------------------+---------------------------------------+
11 rows in set (0.00 sec)
关键参数说明
参数名称 | 默认值 | 说明 |
---|---|---|
max_relay_log_size | 0 | 中继日志允许的最大值,若为0则默认等于max_binlog_size(1G) |
relay_log | - | 中继日志存储路径,开启中继日志功能 |
relay_log_info_file | relay-log.info | 记录主库二进制日志和从库中继日志的恢复位置 |
relay_log_purge | ON | 是否自动清空中继日志(默认启用) |
relay_log_recovery | OFF | 从库宕机后自动放弃损坏的中继日志并重新获取,建议开启 |
sync_relay_log | 10000 | 控制中继日志写入磁盘的频率:1表示每次接收都写入(安全但I/O密集) |
sync_relay_log_info | 10000 | 与sync_relay_log功能类似,控制relay-log.info的写入频率 |
文章版权声明:除非注明,否则均为柳三千运维录原创文章,转载或复制请以超链接形式并注明出处。