Mysql 常用日志介绍

柳三千

文章最后更新时间: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的写入频率
文章版权声明:除非注明,否则均为柳三千运维录原创文章,转载或复制请以超链接形式并注明出处。

取消
微信二维码
微信二维码
支付宝二维码