MySQL主从复制是将主库(Source/Master)的数据变更同步到一个或多个从库(Replica/Slave)的机制,默认采用异步复制,支持全库、指定库或表的同步。
主库执行写操作时,将变更记录到Binlog文件(如mysql-bin.000001
)。
从库的I/O线程通过CHANGE MASTER TO
指定主库地址、Binlog文件名(如mysql-bin.000001
)和起始位置(Position),请求同步数据。
主库的Dump线程根据从库请求的位点推送Binlog数据。
从库接收Binlog并写入本地Relay Log,由SQL线程解析并回放,更新本地数据。
主库配置:
# custom.cnf
[mysqld]
server-id=10 # 唯一标识主库
log-bin=mysql-bin # 启用Binlog
binlog-format=ROW # 推荐使用ROW格式,记录行级变更
从库配置:
[mysqld]
server-id=11 # 唯一标识从库
relay-log=relay-bin # 中继日志路径
read-only=ON # 从库设置为只读(避免误写)
主从连接配置(从库执行):
-- MySQL 8.0.23前使用CHANGE MASTER TO
CHANGE MASTER TO
MASTER_HOST='主库IP',
MASTER_PORT=3306,
MASTER_USER='复制用户',
MASTER_PASSWORD='密码',
MASTER_LOG_FILE='mysql-bin.000001', -- 主库当前Binlog文件
MASTER_LOG_POS=1234; -- 主库当前Binlog位置
-- MySQL 8.0.23+使用CHANGE REPLICATION SOURCE TO
CHANGE REPLICATION SOURCE TO
SOURCE_HOST='主库IP',
SOURCE_PORT=3306,
SOURCE_USER='复制用户',
SOURCE_PASSWORD='密码',
SOURCE_LOG_FILE='mysql-bin.000001',
SOURCE_LOG_POS=1234;
START REPLICA; -- 启动从库复制线程
-- 主库查看Binlog状态
SHOW MASTER STATUS;
-- 从库查看复制状态(关键字段)
SHOW REPLICA STATUS \G
# 重点关注:
# Replica_IO_Running: Yes -- I/O线程运行正常
# Replica_SQL_Running: Yes -- SQL线程运行正常
# Seconds_Behind_Master: 0 -- 复制延迟(0表示无延迟)
主库启用半同步插件:
INSTALL PLUGIN rpl_semi_sync_source SONAME 'semisync_source.so';
SET GLOBAL rpl_semi_sync_source_enabled=ON;
从库启用半同步插件:
INSTALL PLUGIN rpl_semi_sync_replica SONAME 'semisync_replica.so';
SET GLOBAL rpl_semi_sync_replica_enabled=ON;
核心参数:
rpl_semi_sync_source_wait_for_replica_count
:主库等待至少N个从库确认(默认1)。rpl_semi_sync_source_timeout
:等待超时时间(毫秒,默认10000)。server_uuid:transaction_id
),避免Binlog位点手动管理。MASTER_AUTO_POSITION=1
自动获取主库最新事务,无需指定Binlog文件名和位置。主从库启用GTID:
[mysqld]
gtid_mode=ON # 启用GTID模式
enforce_gtid_consistency=ON # 强制GTID一致性(避免非事务语句破坏一致性)
从库配置(自动定位):
CHANGE REPLICATION SOURCE TO
SOURCE_HOST='主库IP',
SOURCE_PORT=3306,
SOURCE_USER='复制用户',
SOURCE_PASSWORD='密码',
SOURCE_AUTO_POSITION=1; # 关键:启用自动位点管理
START REPLICA;
-- 在目标从库执行(如replica1)
STOP REPLICA;
RESET MASTER; -- 清除原有复制配置,成为主库
CHANGE REPLICATION SOURCE TO
SOURCE_HOST='新主库IP',
SOURCE_AUTO_POSITION=1;
START REPLICA;
SOURCE_AUTO_POSITION
自动同步最新事务,无需人工干预。 维度 |
异步复制(Binlog位点) |
半同步复制 |
GTID复制 |
数据可靠性 |
低(可能丢数据) |
中(至少1从库确认) |
高(事务唯一且有序) |
配置复杂度 |
高(手动管理位点) |
中(需配置插件和参数) |
低(自动位点管理) |
故障恢复 |
慢(人工配置位点) |
中(需手动切换主库) |
快(自动同步差集事务) |
适用场景 |
非核心业务、低延迟要求 |
金融类中等可靠性场景 |
高可用集群、频繁主从切换场景 |
建议:生产环境优先使用GTID+半同步复制组合,平衡可靠性与性能;传统Binlog位点复制仅用于 legacy 系统或简单测试场景。