以下是 MySQL 主从复制配置的 完整步骤,包含主库(Master)和从库(Slave)的设置、验证及常见问题解决:
一、主从复制原理
MySQL 主从复制通过 二进制日志(binlog) 实现:
-
主库(Master) 将数据变更记录到 binlog。
-
从库(Slave) 读取主库的 binlog,重放日志以同步数据。
二、配置步骤
1. 主库(Master)配置
(1) 修改 MySQL 配置文件(my.cnf
或 my.ini
)
[mysqld]
# 启用二进制日志
log-bin=mysql-bin
# 设置唯一的服务器ID(主从库不能重复)
server-id=1
# 可选:指定需要复制的数据库(不配置则复制所有库)
binlog-do-db=your_database_name
(2) 重启 MySQL 服务
systemctl restart mysql # Linux
# 或通过服务管理器重启 MySQL(Windows)
(3) 创建主从复制专用账号
-- 登录 MySQL
mysql -u root -p
-- 创建用于复制的用户
CREATE USER 'repl'@'从库IP' IDENTIFIED BY 'your_password';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'从库IP';
FLUSH PRIVILEGES;
(4) 查看主库状态(记录 File 和 Position)
SHOW MASTER STATUS;
输出示例:
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 | 107 | your_db | |
+------------------+----------+--------------+------------------+
2. 从库(Slave)配置
(1) 修改 MySQL 配置文件
[mysqld]
server-id=2 # 确保与主库不同
(2) 重启 MySQL 服务(同上)
(3) 配置从库连接主库
-- 登录 MySQL
mysql -u root -p
-- 停止从库复制
STOP SLAVE;
-- 配置主库信息(替换实际值)
CHANGE MASTER TO
MASTER_HOST='主库IP',
MASTER_USER='repl',
MASTER_PASSWORD='your_password',
MASTER_LOG_FILE='mysql-bin.000001', -- 主库的 File 值
MASTER_LOG_POS=107; -- 主库的 Position 值
-- 启动从库复制
START SLAVE;
(4) 检查从库状态
SHOW SLAVE STATUS\G
关键指标:
-
Slave_IO_Running: Yes
(I/O 线程正常运行) -
Slave_SQL_Running: Yes
(SQL 线程正常运行) -
Seconds_Behind_Master: 0
(从库延迟为 0,表示完全同步)
三、验证主从同步
-
主库操作:插入、更新或删除数据。
-
从库检查:查询数据是否同步。
四、常见问题及解决
1. 主从复制中断
-
原因:网络中断、主库 binlog 被清理、主从数据不一致。
-
解决:
-- 从库执行 STOP SLAVE; RESET SLAVE; -- 重新配置主库信息(参考步骤2.3) START SLAVE;
2. 主从数据不一致
-
解决:
-
停止从库,重新全量同步(使用
mysqldump
导出主库数据并导入从库)。 -
使用工具校验数据一致性(如
pt-table-checksum
)。
-
3. 主库 binlog 文件被删除
-
解决:重置主从复制流程,重新全量同步。
五、扩展配置(可选)
1. 半同步复制
-
作用:确保主库事务至少传输到一个从库后才提交。
-
配置:
-- 主库安装插件 INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so'; SET GLOBAL rpl_semi_sync_master_enabled = 1; -- 从库安装插件 INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so'; SET GLOBAL rpl_semi_sync_slave_enabled = 1;
2. 基于 GTID 的复制
-
优点:无需依赖 binlog 文件名和位置,简化故障恢复。
-
配置:
# 主库和从库配置 gtid_mode=ON enforce-gtid-consistency=ON
通过以上步骤,可快速搭建 MySQL 主从复制环境。建议定期监控主从状态,确保数据一致性。