MySQL主从复制(Replication)是MySQL数据库自带的一项核心功能,它允许将一个MySQL服务器(主库)的数据复制到一个或多个MySQL服务器(从库)。这项技术在现代分布式系统架构中扮演着至关重要的角色。
MySQL主从复制基于三种核心日志实现:
编辑主库的my.cnf配置文件:
[mysqld]
server-id = 1 # 必须唯一
log_bin = mysql-bin # 开启二进制日志
binlog_format = ROW # 推荐使用ROW格式
binlog_row_image = FULL # 记录完整的行数据
sync_binlog = 1 # 每次事务提交都同步二进制日志
expire_logs_days = 7 # 日志保留天数
binlog_do_db = mydb # 可选,指定要复制的数据库
重启MySQL服务后,创建复制用户:
CREATE USER 'repl'@'192.168.1.101' IDENTIFIED BY 'Repl@1234';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.101';
FLUSH PRIVILEGES;
查看主库状态,记录File和Position值:
SHOW MASTER STATUS;
编辑从库的my.cnf配置文件:
[mysqld]
server-id = 2 # 必须唯一且不同于主库
relay_log = mysql-relay-bin # 中继日志位置
read_only = ON # 从库设为只读(超级用户仍可写)
log_slave_updates = ON # 从库也记录二进制日志(用于级联复制)
重启MySQL服务后,配置复制:
CHANGE MASTER TO
MASTER_HOST='192.168.1.100',
MASTER_USER='repl',
MASTER_PASSWORD='Repl@1234',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=154;
START SLAVE;
检查复制状态:
SHOW SLAVE STATUS\G
关键指标检查:
binlog_format = STATEMENT
优点:
缺点:
binlog_format = ROW
优点:
缺点:
binlog_format = MIXED
自动在SBR和RBR之间切换,平衡了两种模式的优缺点
主库
├── 从库1(应用读)
├── 从库2(备份)
└── 从库3(数据分析)
主库 → 从库(也作为主库) → 从库
主库A ↔ 主库B
配置要点:
解决方案:
优化方案:
STOP SLAVE;
SET GLOBAL slave_parallel_workers=4;
START SLAVE;
解决方案:
SHOW SLAVE STATUS\G
重点关注:
-- 暂停复制
STOP SLAVE;
-- 跳过错误(谨慎使用)
SET GLOBAL sql_slave_skip_counter=1;
START SLAVE;
-- 重置复制
RESET SLAVE ALL;
-- 切换主库(故障转移时)
CHANGE MASTER TO MASTER_HOST='new_master';
全局事务标识符(GTID)简化了复制管理:
主库和从库my.cnf中添加:
gtid_mode=ON
enforce_gtid_consistency=ON
CHANGE MASTER TO
MASTER_HOST='192.168.1.100',
MASTER_USER='repl',
MASTER_PASSWORD='Repl@1234',
MASTER_AUTO_POSITION=1;
优点:
MHA可实现主库故障时的自动切换
通过VIP实现故障转移
MySQL官方提供的中间件,实现自动读写分离
MySQL主从复制是企业级数据库架构的基石,合理使用可以显著提升系统的可用性和性能。以下是一些最佳实践:
-- 主库配置半同步复制
INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
SET GLOBAL rpl_semi_sync_master_enabled=1;
SET GLOBAL rpl_semi_sync_master_timeout=10000; -- 10秒
-- 从库配置
INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
SET GLOBAL rpl_semi_sync_slave_enabled=1;
随着MySQL版本的演进,主从复制功能也在不断增强。MySQL 8.0引入了组复制(Group Replication)和InnoDB Cluster等更先进的技术,但传统主从复制因其简单可靠,仍然是大多数场景的首选方案。