主库和从库必须配置不同的server-id,否则从库拒绝连接或同步中断;需创建专用复制账户并授权REPLICATION SLAVE权限;主库必须启用binlog且格式为ROW;从库启动前须确保数据起点准确,CHANGE MASTER TO参数须严格匹配。

主库和从库必须配置不同的 server-id
MySQL 主从复制依赖 server-id 唯一标识每个节点,如果主从相同(比如都是 1),从库会拒绝连接或同步中断,错误日志里常出现 Got fatal error 1236 from master 或 Could not find first log file name in binary log index file 这类提示。
实操建议:
-
server-id必须是正整数,推荐用有意义的数字(如主库设为1,从库设为101、102) - 修改后需重启 MySQL 或执行
SET GLOBAL server_id = 101;(但该命令仅临时生效,重启即丢失) - 确认是否生效:登录 MySQL 后运行
SELECT @@server_id;,不是看配置文件里写了什么 - 多个从库之间
server-id绝对不能重复,否则 GTID 模式下会直接报错退出
主库上创建专用的复制账户并授权
复制账户不是随便一个有 SELECT 权限的账号就能用,它需要 REPLICATION SLAVE(或 REPLICATION CLIENT 配合 GTID)权限,且必须允许从从库 IP 连接(不能只绑 localhost)。
实操建议:
- 在主库执行:
CREATE USER 'repl'@'192.168.1.%' IDENTIFIED BY 'StrongPass123!';<br>GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.%';<br>FLUSH PRIVILEGES;
- 账户主机名别写
%,尤其生产环境;建议限定子网段,避免暴露到公网 - 密码必须满足当前 MySQL 的密码策略(如
validate_password.length >= 8),否则CREATE USER会失败 - 如果主库启用了
require_secure_transport=ON,从库连接时必须加MASTER_SSL=1参数,否则START SLAVE报错ERROR 2003 (HY000)
确认主库已开启 binlog 并记录完整事件
没开 binlog,或者 binlog_format 不匹配,从库根本收不到任何变更。常见症状是 SHOW SLAVE STATUS\G 中 Seconds_Behind_Master 为 NULL,且 IO_Running 是 No。
实操建议:
- 检查主库配置文件(如
/etc/my.cnf)是否含:log-bin = mysql-bin<br>binlog-format = ROW<br>expire_logs_days = 7
-
binlog-format推荐用ROW,避免语句级复制在从库因函数/时间戳/自增等导致不一致 - 确认
log_bin已启用:SELECT @@log_bin;返回 1 才算真正开启(仅写配置不重启无效) - 若主库之前没开 binlog,所有历史数据不会自动补进 binlog,必须手动导出再导入从库作为初始快照
从库启动复制前必须确保数据起点准确
从库的 CHANGE MASTER TO 如果指错了 binlog 文件名或 position(或 GTID set),轻则跳过部分数据,重则同步失败卡死,错误信息通常是 Could not parse relay log event entry 或 Relay log read failure。
实操建议:
- 主库执行
FLUSH TABLES WITH READ LOCK;后,立即运行SHOW MASTER STATUS;记下File和Position - 用
mysqldump --single-transaction --master-data=2导出主库数据,其中--master-data=2会在 dump 文件里自动写入CHANGE MASTER TO语句 - 从库导入后,先
STOP SLAVE;,再CHANGE MASTER TO ... MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=154;,最后START SLAVE; - 检查状态:
SHOW SLAVE STATUS\G中两个关键字段必须是Yes:IO_Running和SQL_Running
实际部署时最容易被忽略的是:主库 server-id 和从库的值在同一个网络内被其他测试实例复用,或者复制账户密码里含特殊字符(如 @、/)没做转义,导致 CHANGE MASTER TO 语法解析失败。这些细节不报明显错误,但会让同步始终停在第一步。











