MySQL主从同步通过将主库的写操作日志同步到从库重放,实现数据副本备份与读写分离,是数据库架构中常用的高可用方案。下面是详细的搭建步骤。

一、环境准备
搭建前需要准备两台安装同版本MySQL的服务器,主库记为Master,从库记为Slave,确保两台服务器网络互通,且MySQL服务正常运行。本文示例使用的MySQL版本为8.0,主库IP为192.168.0.100,从库IP为192.168.0.101。
二、主库配置
1. 修改主库配置文件
打开主库的MySQL配置文件my.cnf(Linux系统路径通常为/etc/my.cnf),添加以下配置:
[mysqld] # 主库唯一ID,范围1-232-1 server-id=1 # 开启binlog日志,日志文件前缀为mysql-bin log-bin=mysql-bin # 需要同步的数据库,多个数据库可写多行,不配置则同步所有库 binlog-do-db=test_db # binlog日志格式,推荐ROW模式 binlog_format=ROW # binlog日志过期时间,单位天 expire_logs_days=7
修改完成后重启MySQL服务使配置生效。
2. 创建同步专用账号
登录主库MySQL,创建用于从库连接同步的账号,并授予对应权限:
-- 创建同步账号,密码为slave_pass,允许从库IP连接 CREATE USER 'slave_user'@'192.168.0.101' IDENTIFIED BY 'slave_pass'; -- 授予同步权限 GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'192.168.0.101'; -- 刷新权限 FLUSH PRIVILEGES;
3. 查看主库binlog状态
执行以下命令查看当前主库的binlog文件和位置,后续从库配置需要用到这两个值:
SHOW MASTER STATUS;
输出结果中File字段为当前binlog文件名,Position为当前日志位置,记录这两个值后不要在主库执行写操作,避免位置变化。
三、从库配置
1. 修改从库配置文件
打开从库的my.cnf配置文件,添加以下配置:
[mysqld] # 从库唯一ID,不能与主库和其他从库重复 server-id=2 # 开启中继日志 relay-log=mysql-relay # 需要同步的数据库,与主库配置对应 replicate-do-db=test_db # 设置为只读,避免从库被误写(超级权限用户仍可写) read-only=1
修改完成后重启从库MySQL服务。
2. 配置从库同步参数
登录从库MySQL,执行以下命令配置主库连接信息,将MASTER_LOG_FILE和MASTER_LOG_POS替换为主库查询到的实际值:
CHANGE MASTER TO MASTER_HOST='192.168.0.100', MASTER_USER='slave_user', MASTER_PASSWORD='slave_pass', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=156;
3. 启动从库同步
执行启动同步命令,并查看同步状态:
-- 启动同步 START SLAVE; -- 查看同步状态 SHOW SLAVE STATUS\G
查看结果中Slave_IO_Running和Slave_SQL_Running两个字段的值都为Yes,说明主从同步搭建成功。
四、同步验证与问题排查
可以在主库的test_db数据库中创建表并插入数据,然后到从库查询,确认数据是否同步。如果同步失败,可检查以下几点:
- 主从服务器网络是否互通,防火墙是否放通MySQL端口
- 同步账号的权限是否正确,密码是否有误
- 主库的binlog文件和位置是否填写正确
- 查看从库状态中的
Last_IO_Error和Last_SQL_Error字段,根据错误提示排查问题
五、同步延迟优化
如果出现主从同步延迟,可尝试以下优化方法:
- 主库使用ROW格式的binlog,减少从库SQL线程重放时的解析开销
- 从库开启并行复制,在配置文件中添加
slave_parallel_workers=4(数值根据服务器CPU核心数调整) - 避免主库执行大事务,大批量写操作拆分为小批次执行
- 提升从库服务器硬件配置,尤其是磁盘IO性能
MySQL主从同步数据库主从复制binlog配置同步延迟优化主从状态检查修改时间:2026-05-25 23:40:15