主从复制通过binlog实现数据同步,主库记录变更日志,从库通过IO线程和sql线程读取并执行日志。1. 配置主库:设置server-id、启用log-bin、创建复制用户并获取MASTER STATUS信息。2. 配置从库:指定唯一server-id、启用relay-log、设置read-only,配置CHANGE MASTER并启动START SLAVE。3. 验证:主库写入数据后从库可查即成功。需注意权限、ID唯一性、避免从库写入及监控延迟。

mysql主从复制是一种常见的数据库架构方式,能够实现数据的实时备份、读写分离和高可用性。配置主从复制的核心是让一个MySQL服务器(主库)将数据变更记录到二进制日志(binlog),另一个或多个服务器(从库)读取并执行这些日志,从而保持数据同步。
1. 主从复制的基本原理
主库在执行写操作时会将操作记录写入binlog,从库通过两个线程来完成复制:
- IO线程:连接主库,请求获取binlog内容,并将接收到的日志写入本地的中继日志(relay log)
- SQL线程:读取relay log中的sql语句并执行,实现数据同步
2. 环境准备
确保两台服务器已安装mysql,版本尽量一致。示例环境:
网络互通,防火墙开放3306端口,数据库可远程连接。
3. 配置主库(Master)
编辑主库的配置文件 my.cnf(通常位于 /etc/my.cnf 或 /etc/mysql/my.cnf):
[mysqld]
server-id = 1
log-bin = mysql-bin
binlog-format = ROW
expire_logs_days = 7
max_binlog_size = 100M
说明:
- server-id:每台MySQL服务器必须有唯一ID,主库设为1
- log-bin:启用二进制日志,名称为mysql-bin
- binlog-format:推荐使用ROW格式,更安全
重启MySQL服务使配置生效:
systemctl restart mysqld
登录Mysql创建用于复制的账户:
CREATE USER ‘repl’@’192.168.1.11’ IDENTIFIED BY ‘your_password‘;
GRANT REPLICATION SLAVE ON *.* TO ‘repl’@’192.168.1.11’;
FLUSH PRIVILEGES;
查看主库状态,获取当前binlog文件名和位置:
SHOW MASTER STATUS;
记下输出中的 File 和 position,后续从库配置需要使用。
4. 配置从库(Slave)
编辑从库的 my.cnf 文件:
[mysqld]
server-id = 2
relay-log = mysql-relay-bin
log-slave-updates = 1
read-only = 1
说明:
- server-id:从库ID必须与主库不同
- relay-log:指定中继日志名称
- read-only:防止从库被误写入数据
重启从库MySQL服务:
systemctl restart mysqld
登录MySQL,配置主从连接信息:
CHANGE MASTER TO
MASTER_HOST=’192.168.1.10′,
MASTER_USER=’repl’,
MASTER_PASSword=’your_password’,
MASTER_LOG_FILE=’mysql-bin.000001′,
MASTER_LOG_POS=154;
注意:MASTER_LOG_FILE 和 MASTER_LOG_POS 的值来自主库 SHOW MASTER STATUS 的输出。
启动复制进程:
START SLAVE;
查看复制状态:
SHOW SLAVE STATUSG
重点关注以下两项:
- Slave_IO_Running: Yes
- Slave_SQL_Running: Yes
如果均为Yes,表示主从复制正常运行。若为No,需检查错误信息(如Last_Error字段)进行排查。
5. 验证主从复制
在主库上创建数据库和表并插入数据:
CREATE database test_replication;
USE test_replication;
CREATE table t1 (id int);
INSERT INTO t1 VALUES (1), (2);
在从库上执行:
USE test_replication;
select * FROM t1;
如果能查到相同数据,说明复制成功。
6. 常见问题与注意事项
- 主从时间不同步可能导致问题,建议使用NTP服务统一时间
- 避免在从库执行写操作,否则会导致数据不一致
- 主库的 auto_increment 配置要注意冲突,可通过设置步长区分
- 定期监控复制延迟(Seconds_Behind_Master)
- 大事务可能造成从库延迟,需合理设计业务逻辑
基本上就这些。主从复制配置完成后,可以进一步搭建主主复制、多级复制或结合中间件实现读写分离。关键是理解binlog和复制流程,遇到问题时查看日志和状态信息即可定位。整个过程不复杂但容易忽略权限和ID设置。