主库复制配置是什么
要让一个实例能当复制源,最少需要三件套:全拓扑唯一且固定的 server_id、开启二进制日志(log_bin)、binlog_format 设为 ROW。GTID 环境再叠加 gtid_mode=ON 与 enforce_gtid_consistency=ON。除此之外还要准备复制账号并授权,以及把 binlog 保留时间设得足够长,否则从库稍晚一点就会遇到日志被清理的报错。
基本信息
| server_id | 取值 1 到 2^32-1,全拓扑必须唯一 |
|---|---|
| log_bin | 必须开启,路径可自定义便于分离磁盘 |
| binlog_format | ROW,MySQL 8.0 默认 |
| binlog_row_image | FULL,保证行镜像完整可读 |
| 复制账号 | 需 REPLICATION SLAVE 权限,来源主机要提前放行 |
典型使用场景
- 新建从库:确认主库三件套与账号都已就绪
- 搭建只读实例:用同一套参数,从库额外开启 read_only
- 复制账号审计:核对账号来源主机与权限是否最小化
- 核对日志保留:确认从库断连期间不会因为日志过期而必须重建
- 数据恢复:ROW 格式的 binlog 可读出变更行,用于误删回滚
- GTID 准备:切换前先让所有节点接受 GTID 事务类型
主库 my.cnf 与账号
主库 my.cnf 与账号
[mysqld]
server_id = 1001
log_bin = /var/lib/mysql/binlog/mysql-bin
binlog_format = ROW
binlog_row_image = FULL
sync_binlog = 1
binlog_expire_logs_seconds = 604800
# GTID 可选
gtid_mode = ON
enforce_gtid_consistency = ON
# 复制账号(主库执行)
# CREATE USER 'repl'@'10.0.0.%' IDENTIFIED BY '强口令';
# GRANT REPLICATION SLAVE ON *.* TO 'repl'@'10.0.0.%';
# SHOW MASTER STATUS; -- 非 GTID 环境记录位点,GTID 环境看 Executed_Gtid_Set参数读法
| 参数 | 含义 | 典型问题 |
|---|---|---|
| server_id | 实例的唯一标识 | 与其他实例重复会导致复制中断 |
| log_bin | 是否开启二进制日志 | 未开启则无法作为复制源 |
| binlog_format | 记录方式,ROW 为行级 | STATEMENT 格式下部分函数不可复制 |
| binlog_expire_logs_seconds | 日志保留秒数 | 过短会让断连的从库无法续传 |
| gtid_mode | GTID 开关,需渐进切换 | 直接 ON 会导致实例启动失败 |
对已有业务的实例开启 GTID 需按 OFF 到 ON_PERMISSIVE 再到 ON 的渐进流程,不能一步到位。
server_id 重复是很隐蔽的故障:两台实例同号时从库可能连到错误来源或直接中断,变更前用 SHOW VARIABLES LIKE 'server_id' 核对全拓扑。
从库侧建议同时开启 read_only 与 super_read_only 防止误写;这两个开关在提升为主库时必须显式关闭,否则应用写入会被拒绝。主从参数也应纳入配置基线,定期比对。