MySQL 主从复制对新手是否友好?
不适合直接上手。主从复制不是单条命令就能跑起来的功能,它依赖网络、权限、binlog 配置、GTID 或 position 位置一致性等多重前提,任意一环出错都会导致
Seconds_Behind_Master持续为
NULL或
0却实际不同步,新手很难快速定位是权限问题、防火墙拦截、还是
server_id冲突。
新手该从哪几个配置项开始动手?
先确保主库和从库的以下三项完全独立且显式设置,其他参数暂不碰:
server_id:必须全局唯一,主库设为
1,从库设为
2(不能是
0或未配置)
log-bin:主库必须开启,建议写成
log-bin = mysql-bin(不要带路径,避免权限问题)
binlog-format:设为
ROW,比
MIXED和
STATEMENT更易排查数据不一致,且兼容大多数 DML 场景
改完记得重启 MySQL 服务,并用
SHOW VARIABLES LIKE 'server_id';和
SHOW VARIABLES LIKE 'log_bin';确认生效。
为什么 CHANGE REPLICATION SOURCE TO
总报错?
MySQL 8.0.23+ 已弃用
CHANGE MASTER TO,必须用新语法;常见报错包括:
ERROR 3021 (HY000): This operation cannot be performed with a running slave IO thread:先执行
STOP REPLICA;,不是
STOP SLAVE;
ERROR 2003 (HY000): Can't connect to MySQL server:检查主库是否监听
0.0.0.0(而非
127.0.0.1),以及
bind-address配置
ERROR 1236 (HY000): Could not find first log file name in binary log index file:说明
MASTER_LOG_FILE值写错了,用主库的
SHOW MASTER STATUS;输出为准,别手输
完整命令示例(请替换 IP、用户、密码、日志名和位置):
CHANGE REPLICATION SOURCE TO SOURCE_HOST='192.168.1.10', SOURCE_USER='repl', SOURCE_PASSWORD='xxx', SOURCE_LOG_FILE='mysql-bin.000001', SOURCE_LOG_POS=156;
学习时最容易忽略的验证环节
很多人配完就以为成了,其实最关键的三步验证常被跳过:
在从库执行SHOW REPLICA STATUS\G,重点看
Replica_IO_Running和
Replica_SQL_Running是否都为
Yes,而不是只看
Seconds_Behind_Master主库建库、建表、INSERT 一行数据后,立刻在从库查,不要等几秒——
ROW格式下延迟通常在毫秒级,如果查不到,说明根本没同步过去 手动在从库执行
INSERT(非只读模式下),再在主库查——这会暴露是否误开了
read_only=OFF,造成数据反向污染
主从复制的学习成本不在“配通”,而在“配稳”;一个没关掉的
read_only、一次忘记
FLUSH PRIVILEGES、或者从库磁盘满了没监控,都会让同步静默中断数小时。建议先用两台 Docker 容器跑最小闭环,比在物理机上反复重装更省时间。
