一、二进制日志配置与管理

1. 查看二进制日志状态

 检查二进制日志是否开启

SHOW VARIABLES LIKE 'log_bin';

 查看详细的二进制日志配置

SHOW VARIABLES LIKE '%log_bin%';

 查看当前二进制日志格式

SHOW VARIABLES LIKE 'binlog_format';

 

 查看二进制日志过期时间

SHOW VARIABLES LIKE 'binlog_expire_logs_seconds';

 

2. 启用二进制日志

在 MySQL 配置文件 `my.cnf` (Linux) 或 `my.ini` (Windows) 中配置:

[mysqld]

 启用二进制日志

log-bin = /var/lib/mysql/mysql-bin

 

 设置二进制日志格式(推荐ROW格式)

binlog_format = ROW

 

 设置二进制日志过期时间(7天)

binlog_expire_logs_seconds = 604800

 

 设置单个二进制日志文件大小(默认1GB)

max_binlog_size = 1G

 

 为二进制日志文件设置保留期(避免误删)

binlog_expire_logs_seconds = 604800

 

配置说明:

 `log-bin`:指定日志路径和文件名前缀

 `binlog_format`:可选 `STATEMENT`、`ROW`、`MIXED`

 `max_binlog_size`:单个文件大小限制

 

3. 二进制日志格式比较

格式优点缺点适用场景
STATEMENT日志文件小,可读性强可能主从不一致,不确定性强简单查询,低并发
ROW (推荐)数据一致性高,安全可靠日志文件大,不可读生产环境,高可靠性要求
MIXED兼顾文件大小和一致性配置复杂中等负载环境


二、二进制日志操作命令

1. 查看二进制日志信息

 查看所有二进制日志文件列表

SHOW BINARY LOGS;

 查看当前正在使用的二进制日志

SHOW MASTER STATUS;

 查看二进制日志事件

SHOW BINLOG EVENTS IN 'mysql-bin.000001' FROM 0 LIMIT 10;

2. 使用 mysqlbinlog 工具查看内容

 查看二进制日志内容(基础格式)

mysqlbinlog /var/lib/mysql/mysql-bin.000001

 查看并解码ROW格式的日志

mysqlbinlog --base64-output=DECODE-ROWS -v /var/lib/mysql/mysql-bin.000001

查看特定时间段的日志

mysqlbinlog --start-datetime="2023-10-27 10:00:00" \

            --stop-datetime="2023-10-27 12:00:00" \

            /var/lib/mysql/mysql-bin.000001

查看特定数据库的日志

mysqlbinlog --database=myapp /var/lib/mysql/mysql-bin.000001

将日志输出到文件

mysqlbinlog /var/lib/mysql/mysql-bin.000001 > binlog_output.sql

 

3. 二进制日志维护

 手动切换二进制日志文件

FLUSH BINARY LOGS;

 删除所有二进制日志文件并重新开始

RESET MASTER;

 删除指定文件之前的所有二进制日志

PURGE BINARY LOGS TO 'mysql-bin.000010';

 删除指定时间之前的所有二进制日志

PURGE BINARY LOGS BEFORE '2023-10-20 00:00:00';

 设置二进制日志自动清理(7天自动过期)

SET GLOBAL binlog_expire_logs_seconds = 604800;

 

三、二进制日志暂停与恢复

1. 临时禁用二进制日志

 当前会话中禁用二进制日志记录

SET sql_log_bin = 0;

 执行不希望被记录的SQL语句

UPDATE sensitive_table SET value = 'test' WHERE id = 1;

 重新启用二进制日志记录

SET sql_log_bin = 1;

 

2. 全局二进制日志控制(需要权限)

 超级用户可以在全局范围禁用(不推荐生产环境使用)

SET GLOBAL log_bin = OFF;

 重新启用

SET GLOBAL log_bin = ON;

 

四、最佳实践与配置建议

1. 存储优化

[mysqld]

 将二进制日志与数据文件分磁盘存储

log-bin = /mnt/binlog-disk/mysql-bin

 

 设置合适的日志文件大小

max_binlog_size = 500M

 

启用日志压缩(MySQL 8.0+)

binlog_transaction_compression = ON

 

2. 安全配置

 加密二进制日志(MySQL 8.0+)

binlog_encryption = ON

 

 设置二进制日志缓存大小

binlog_cache_size = 1M

 

 设置最大缓存大小

max_binlog_cache_size = 2G

 

3. 监控与维护

 定期检查二进制日志状态

SHOW BINARY LOGS;

 

 监控二进制日志磁盘使用

SELECT @@log_bin_basename AS log_file_path,

       SUM(size) AS total_size

FROM information_schema.binary_logs;

 

 设置监控告警(当磁盘使用超过80%时清理)

 

4. 备份策略

 定期备份二进制日志

!/bin/bash

BACKUP_DIR="/backup/binlog"

mkdir -p $BACKUP_DIR

cp /var/lib/mysql/mysql-bin.* $BACKUP_DIR/

 

 清理旧备份(保留30天)

find $BACKUP_DIR -name "mysql-bin.*" -mtime +30 -delete

 

五、常见问题处理

 1. 二进制日志损坏

 尝试修复或跳过损坏部分

mysqlbinlog --force-if-open /var/lib/mysql/mysql-bin.000001

 

2. 磁盘空间不足

 立即清理旧日志

PURGE BINARY LOGS BEFORE NOW() - INTERVAL 1 DAY;

 

 临时增加日志文件大小

SET GLOBAL max_binlog_size = 2147483648; -- 2GB

 

3. 性能优化

[mysqld]

 调整二进制日志写入策略

sync_binlog = 1        # 最安全,每次提交都同步

sync_binlog = 0        # 由操作系统决定同步时机

sync_binlog = N        # 每N次提交同步一次

 

 优化组提交(MySQL 5.6+)

binlog_group_commit_sync_delay = 1000

binlog_group_commit_sync_no_delay_count = 10

 

六、生产环境部署建议

1. 分离存储:二进制日志与数据文件使用不同的物理磁盘

2. 监控告警:设置磁盘空间和日志增长监控

3. 定期备份:将二进制日志备份到远程存储

4. 测试恢复:定期测试基于二进制日志的恢复流程

5. 版本管理:记录重要的二进制日志位置点(版本发布、重要变更前后)

 

示例部署配置:

[mysqld]

二进制日志配置

log-bin = /data/binlog/mysql-bin

binlog_format = ROW

binlog_expire_logs_seconds = 1209600  # 14

max_binlog_size = 500M

sync_binlog = 1

binlog_cache_size = 2M

 

 启用加密(MySQL 8.0+)

binlog_encryption = ON

点赞(0)

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Dotcpp在线编译      (登录可减少运行等待时间)