MySQL主从复制需主库启用binlog并创建repl用户,从库配置唯一server-id后执行CHANGE MASTER TO连接主库,再START SLAVE启动复制,通过SHOW SLAVE STATUS验证IO和SQL线程运行状态及延迟。

主库配置:开启二进制日志并创建复制用户
MySQL主从复制依赖主库的二进制日志(binlog),所以第一步是确保主库已启用。编辑主库的 my.cnf(或 my.ini),在 [mysqld] 段添加:
- server-id = 1(必须唯一,非0整数)
- log-bin = mysql-bin(启用binlog,文件前缀可自定义)
- (可选)binlog-format = ROW(推荐,语句级可能在某些函数或非确定操作下不一致)
重启MySQL服务生效。接着登录主库,创建专用复制用户并授权:
CREATE USER 'repl'@'%' IDENTIFIED BY 'your_secure_password'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%'; FLUSH PRIVILEGES;
执行 SHOW MASTER STATUS; 记下当前 binlog 文件名和 Position(如 mysql-bin.000003 和 154),后续从库配置要用到。
从库配置:指定server-id并连接主库
编辑从库的配置文件,设置唯一 server-id(不能与主库或其他从库重复,例如设为 2),无需开启 binlog(除非该从库还要做级联主库):
- server-id = 2
- (可选)read_only = ON(防止误写,仅对非super用户生效)
重启从库MySQL。然后执行 CHANGE MASTER TO 命令,填入主库地址、端口、复制用户、密码及之前记下的 binlog 文件与位置:
CHANGE MASTER TO MASTER_HOST='192.168.1.10', MASTER_PORT=3306, MASTER_USER='repl', MASTER_PASSWORD='your_secure_password', MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=154;
注意:IP需能互通,防火墙/安全组要放行3306端口。
启动复制并验证状态
运行 START SLAVE; 启动复制线程。用 SHOW SLAVE STATUS\G 查看关键字段:
- Slave_IO_Running: Yes(IO线程正常拉取日志)
- Slave_SQL_Running: Yes(SQL线程正常回放日志)
- Seconds_Behind_Master: 0(理想值,表示无延迟;若为 NULL 表示出错)
若任一为 No,检查 Last_IO_Error 或 Last_SQL_Error 字段定位问题,常见原因包括网络不通、账号权限不足、主从数据不一致、GTID模式未统一等。
基础注意事项与建议
主从搭建只是起点,实际使用中需关注:
- 主从数据一致性不是自动保障的,建议定期用 pt-table-checksum 工具校验
- 避免在从库写入数据(即使 read_only=ON 也不能完全杜绝 super 用户误操作)
- 主库 crash 后,若未启用半同步复制,可能丢失部分未传到从库的 binlog
- 生产环境建议开启 relay_log_recovery=ON,防止从库异常重启后 relay log 损坏
不复杂但容易忽略。










