MySQL的二进制日志(binary log)是记录数据库非查询类修改操作的日志文件,它不仅支持主从复制场景下从库同步主库数据,还可以在数据库误操作时用于数据恢复,是MySQL数据库高可用和数据安全的重要保障。

二进制日志的开启与关闭
默认情况下MySQL可能未开启二进制日志,需要手动修改配置文件开启。首先查看当前二进制日志状态:
-- 查看二进制日志是否开启 SHOW VARIABLES LIKE 'log_bin';
如果返回值为OFF,需要修改MySQL配置文件my.cnf(Linux系统)或my.ini(Windows系统),在[mysqld]节点下添加以下配置:
[mysqld] # 开启二进制日志 log_bin=mysql-bin # 指定二进制日志索引文件 log_bin_index=mysql-bin.index # 二进制日志格式,可选STATEMENT、ROW、MIXED binlog_format=ROW
修改完成后重启MySQL服务即可生效,再次执行上述查询语句会返回ON状态。
查看二进制日志相关信息
日常管理中可以查看二进制日志列表、当前正在写入的日志文件等信息:
- 查看所有二进制日志文件列表:
SHOW BINARY LOGS;
- 查看当前正在写入的二进制日志文件及位置:
SHOW MASTER STATUS;
- 查看指定二进制日志的内容,需要借助mysqlbinlog工具,在服务器命令行执行:
# 查看指定日志文件内容 mysqlbinlog /var/lib/mysql/mysql-bin.000001 # 按时间范围查看日志 mysqlbinlog --start-datetime="2024-01-01 00:00:00" --stop-datetime="2024-01-02 00:00:00" /var/lib/mysql/mysql-bin.000001
二进制日志的过期与自动清理
二进制日志会持续生成占用磁盘空间,需要配置合理的过期时间自动清理过期日志。可以通过参数binlog_expire_logs_seconds设置日志保留时长,单位是秒:
-- 设置二进制日志保留7天,604800秒=7*24*3600 SET GLOBAL binlog_expire_logs_seconds = 604800; -- 查看当前配置的过期时间 SHOW VARIABLES LIKE 'binlog_expire_logs_seconds';
若需要永久生效,需要将配置写入MySQL配置文件的[mysqld]节点下:
[mysqld] binlog_expire_logs_seconds=604800
手动清理二进制日志
如果磁盘空间紧张需要手动清理过期日志,可以使用以下命令,注意清理前需要确认对应日志已经不再需要用于数据恢复或主从同步:
- 删除指定时间之前的所有二进制日志:
-- 删除2024-01-01 00:00:00之前的所有二进制日志 PURGE BINARY LOGS BEFORE '2024-01-01 00:00:00';
- 删除指定日志文件之前的所有二进制日志:
-- 删除mysql-bin.000005之前的所有二进制日志,不包含该文件 PURGE BINARY LOGS TO 'mysql-bin.000005';
- 删除所有二进制日志并重新生成新的日志文件,该操作会重置日志序号,主从复制场景下慎用:
RESET MASTER;
二进制日志管理注意事项
- 主从复制场景中,从库正在同步的主库二进制日志不要手动清理,否则会导致从库同步中断
- 清理日志前建议先备份需要保留的日志文件,避免误删后无法恢复数据
- 二进制日志格式建议优先选择ROW格式,虽然会占用更多磁盘空间,但能最大程度保证数据一致性,避免主从数据不一致问题
- 生产环境建议将二进制日志和数据文件存储在不同磁盘,避免磁盘故障同时丢失数据和日志
MySQL二进制日志binary_log日志管理数据库运维修改时间:2026-06-06 23:55:13