开启 binlog 要改什么
binlog 是 MySQL 记录所有数据变更的二进制日志,复制、基于时间点的恢复、CDC 同步都建立在它之上。开启需要在配置文件的 [mysqld] 段落里设置 log_bin、server_id 与 binlog_format 三项;其中 log_bin 是只读参数,改完必须重启 mysqld 才生效(MySQL 8.0 默认已经开启)。云数据库通常不暴露配置文件,而是在控制台的参数组里改,改前要确认对备份与已有复制链路的影响。
基本信息
| 配置文件 | Linux 常见 /etc/my.cnf 或 /etc/mysql/my.cnf,段落为 [mysqld] |
|---|---|
| 关键参数 | log_bin、server_id、binlog_format、binlog_row_image |
| 生效方式 | log_bin 只读,修改后需重启 mysqld |
| server_id | 1~4294967295 的整数,复制拓扑内必须唯一 |
| 默认状态 | MySQL 8.0 默认开启 binlog |
| 云上差异 | 由控制台参数组管理,部分参数改动会触发实例重启 |
my.cnf 关键配置
my.cnf 关键配置
[mysqld]
server_id = 101
log_bin = /var/log/mysql/mysql-bin
binlog_format = ROW
binlog_row_image = FULL
binlog_expire_logs_seconds = 604800 # 日志保留 7 天
max_binlog_size = 512M # 单个日志文件大小上限
sync_binlog = 1 # 每次提交刷盘,兼顾安全与性能重启后验证
重启后验证
systemctl restart mysqld
mysql -uroot -p -e "SHOW VARIABLES LIKE 'log_bin'; SHOW MASTER STATUS;"
# 注意:较新版本对 MASTER/SLAVE 术语做了重命名,命令报错时改用对应的新名称
mysql -uroot -p -e "SHOW BINARY LOGS;" # 列出当前日志文件与大小典型使用场景
- 接入 CDC:业务库要打开行格式 binlog,采集端才能持续读取变更
- 搭建主从复制:从库依赖主库 binlog 回放变更
- 误操作恢复:全量备份加 binlog 回放可以把数据恢复到误删前的时刻
- 审计要求:需要保留一段时间内的全部数据变更记录
- 迁移演练:新实例按目标拓扑统一 server_id 与日志参数后再切流量
参数读法
| 参数 | 作用 | 注意 |
|---|---|---|
| log_bin | 开启二进制日志并指定路径前缀 | 只读,必须重启才生效 |
| server_id | 实例在复制拓扑中的标识 | 重复会导致复制异常与采集混乱 |
| binlog_format | 记录格式,CDC 需要 ROW | STATEMENT 无法被 CDC 正确解析 |
| binlog_expire_logs_seconds | 日志保留时长 | 过短会让停机较久的采集端位点失效 |
| max_binlog_size | 单个日志文件大小 | 超过即滚动新文件,影响位点管理 |
server_id 为 1~4294967295 之间的整数且在复制拓扑内唯一;生产修改前先备份配置文件并留好回滚窗口。
binlog 会持续占用磁盘,保留时长与磁盘容量要一起规划;磁盘写满时实例会停止写入,比日志丢失更严重。