Appearance
主从复制
复制概述
复制类型
| 类型 | 说明 |
|---|---|
| 异步复制 | 默认方式,主库不等待从库 |
| 半同步复制 | 主库等待至少一个从库确认 |
| 全同步复制 | 主库等待所有从库确认 |
复制原理
主库 从库
│ │
├─── 写入 Binlog ───────┤
│ │
│ I/O线程读取 Binlog
│ │
│ 写入 Relay Log
│ │
│ SQL线程执行 Relay Log
│ │主从配置
主库配置
ini
[mysqld]
server-id=1
log-bin=mysql-bin
binlog_format=ROW
binlog_do_db=mydb
expire_logs_days=7从库配置
ini
[mysqld]
server-id=2
relay-log=relay-bin
read_only=ON创建复制用户
sql
CREATE USER 'repl'@'%' IDENTIFIED BY 'Repl@123';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;查看主库状态
sql
SHOW MASTER STATUS;配置从库
sql
CHANGE MASTER TO
MASTER_HOST='192.168.1.100',
MASTER_USER='repl',
MASTER_PASSWORD='Repl@123',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=154;启动复制
sql
START SLAVE;
STOP SLAVE;查看从库状态
sql
SHOW SLAVE STATUS\GGTID 复制
启用 GTID
ini
[mysqld]
gtid_mode=ON
enforce_gtid_consistency=ONGTID 配置从库
sql
CHANGE MASTER TO
MASTER_HOST='192.168.1.100',
MASTER_USER='repl',
MASTER_PASSWORD='Repl@123',
MASTER_AUTO_POSITION=1;GTID 操作
sql
SHOW GLOBAL VARIABLES LIKE '%GTID%';
SHOW MASTER STATUS;
SELECT * FROM mysql.gtid_executed;半同步复制
安装插件
sql
INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';主库配置
sql
SET GLOBAL rpl_semi_sync_master_enabled = 1;
SET GLOBAL rpl_semi_sync_master_timeout = 1000;从库配置
sql
SET GLOBAL rpl_semi_sync_slave_enabled = 1;
STOP SLAVE IO_THREAD;
START SLAVE IO_THREAD;查看状态
sql
SHOW STATUS LIKE 'Rpl_semi_sync%';复制过滤
主库过滤
ini
[mysqld]
binlog_do_db=mydb
binlog_ignore_db=test从库过滤
ini
[mysqld]
replicate_do_db=mydb
replicate_ignore_db=test
replicate_do_table=mydb.users
replicate_ignore_table=mydb.logs
replicate_wild_do_table=mydb.%
replicate_wild_ignore_table=mydb.log%复制管理
查看复制状态
sql
SHOW SLAVE STATUS\G关键指标:
Slave_IO_Running: Yes/NoSlave_SQL_Running: Yes/NoSeconds_Behind_Master: 延迟秒数
跳过复制错误
sql
STOP SLAVE;
SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;
START SLAVE;重置复制
sql
STOP SLAVE;
RESET SLAVE;
RESET MASTER;在线切换主库
sql
STOP SLAVE;
CHANGE MASTER TO
MASTER_HOST='new_master',
MASTER_USER='repl',
MASTER_PASSWORD='password',
MASTER_AUTO_POSITION=1;
START SLAVE;延迟复制
配置延迟复制
sql
CHANGE MASTER TO
MASTER_HOST='192.168.1.100',
MASTER_USER='repl',
MASTER_PASSWORD='password',
MASTER_DELAY=3600;查看延迟
sql
SHOW SLAVE STATUS\GSQL_Delay 字段显示延迟秒数。
并行复制
启用并行复制
sql
STOP SLAVE;
SET GLOBAL slave_parallel_type = 'LOGICAL_CLOCK';
SET GLOBAL slave_parallel_workers = 4;
START SLAVE;配置文件
ini
[mysqld]
slave_parallel_type=LOGICAL_CLOCK
slave_parallel_workers=4
slave_preserve_commit_order=ON复制监控
监控脚本
sql
SELECT
variable_name,
variable_value
FROM performance_schema.global_status
WHERE variable_name IN (
'Slave_running',
'Slave_IO_Running',
'Slave_SQL_Running',
'Seconds_Behind_Master'
);复制延迟监控
sql
SHOW SLAVE STATUS\G关注 Seconds_Behind_Master 字段。
常见问题
1. IO 线程停止
原因:
- 网络问题
- 主库 binlog 被删除
- 复制用户权限问题
解决:
sql
STOP SLAVE;
START SLAVE;2. SQL 线程停止
原因:
- 数据冲突
- 主键冲突
- 数据不存在
解决:
sql
STOP SLAVE;
SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;
START SLAVE;3. 复制延迟
原因:
- 从库性能不足
- 大事务
- 网络延迟
解决:
- 启用并行复制
- 优化从库性能
- 拆分大事务
高可用架构
主从切换
sql
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;
STOP SLAVE;
RESET SLAVE ALL;
SET GLOBAL read_only = OFF;MHA 架构
- 自动故障检测
- 自动主从切换
- 自动 VIP 漂移
MGR 架构
MySQL Group Replication:
- 基于 Paxos 协议
- 自动故障检测
- 自动主从切换
sql
STOP GROUP_REPLICATION;
START GROUP_REPLICATION;
SELECT * FROM performance_schema.replication_group_members;