Part01-基础概念与理论知识
1.1 级联复制概述
级联复制是一种MySQL复制拓扑,其中一个从库同时作为另一个从库的主库,形成链式复制结构。级联复制可以减轻主库的复制压力,适用于大规模的复制拓扑。风哥教程参考MySQL官方文档Replication部分的相关内容。更多视频教程www.fgedu.net.cn
级联复制是一种MySQL复制拓扑,其中一个从库(中间从库)同时作为另一个从库(级联从库)的主库,形成链式复制结构。级联复制可以减轻主库的复制压力,适用于大规模的复制拓扑。
# 级联复制的拓扑结构
1. 一级复制:主库 → 中间从库
2. 二级复制:中间从库 → 级联从库
# 级联复制的组件
1. 主库(Master):原始数据的来源,负责写入数据并生成二进制日志
2. 中间从库(Intermediate Slave):同时作为主库的从库和级联从库的主库
3. 级联从库(Cascading Slave):从中间从库复制数据的从库
# 级联复制的版本支持
– MySQL 5.6及以上版本支持级联复制
– MySQL 5.7及以上版本对级联复制进行了优化
– MySQL 8.0及以上版本进一步增强了级联复制的功能
# 级联复制的特点
1. 减轻主库压力:主库只需要向中间从库复制数据,不需要直接向所有从库复制
2. 提高扩展性:可以支持更多的从库,适合大规模部署
3. 简化网络拓扑:减少主库的网络连接数
4. 灵活的拓扑结构:可以根据需要构建复杂的复制拓扑
1.2 级联复制原理
级联复制的原理是中间从库从主库复制数据,然后级联从库从中间从库复制数据,形成链式复制结构。学习交流加群风哥微信: itpux-com
1.3 级联复制的优势与劣势
级联复制的优势在于减轻主库压力、提高扩展性,劣势在于增加了复制延迟和复杂性。学习交流加群风哥QQ113257174
1. 减轻主库压力:主库只需要向中间从库复制数据,不需要直接向所有从库复制,减少了主库的网络和IO压力
2. 提高扩展性:可以支持更多的从库,适合大规模部署
3. 简化网络拓扑:减少主库的网络连接数,简化网络配置
4. 灵活的拓扑结构:可以根据需要构建复杂的复制拓扑,如树形结构
5. 负载均衡:可以将读请求分散到多个从库,提高系统的整体性能
# 级联复制的劣势
1. 增加复制延迟:数据需要经过中间从库,增加了复制延迟
2. 增加复杂性:需要管理更多的复制关系,增加了系统的复杂性
3. 单点故障:中间从库成为关键节点,如果中间从库故障,会影响级联从库的复制
4. 数据一致性:由于复制延迟的增加,可能导致级联从库的数据与主库的一致性降低
5. 故障处理复杂:当中间从库故障时,需要重新配置级联从库的复制关系
# 级联复制与直接复制的比较
| 特性 | 直接复制 | 级联复制 |
|——|———-|———-|
| 主库压力 | 高,需要向所有从库复制 | 低,只需要向中间从库复制 |
| 复制延迟 | 低,直接从主库复制 | 高,需要经过中间从库 |
| 扩展性 | 有限,主库连接数受限 | 高,可以支持更多从库 |
| 复杂性 | 低,复制关系简单 | 高,需要管理更多复制关系 |
| 单点故障 | 主库 | 主库和中间从库 |
Part02-生产环境规划与建议
2.1 级联复制的适用场景
级联复制适用于需要减轻主库压力、支持大规模从库部署的场景,如大型网站、多数据中心部署等。风哥提示:生产环境中应根据业务需求和系统架构,选择合适的复制拓扑。
2.2 级联复制的拓扑规划
级联复制的拓扑规划需要考虑复制层次、网络延迟、故障转移等因素,以下是具体的拓扑规划建议。更多学习教程公众号风哥教程itpux_com
1. 复制层次:
– 一般建议不超过3层复制(主库 → 中间从库 → 级联从库)
– 复制层次过多会导致复制延迟增加
2. 网络规划:
– 主库和中间从库应部署在同一数据中心,减少网络延迟
– 级联从库可以部署在不同数据中心,作为灾备
3. 硬件规划:
– 中间从库的硬件配置应不低于主库
– 级联从库的硬件配置应根据业务需求确定
4. 故障转移规划:
– 制定中间从库故障的处理方案
– 制定主库故障的处理方案
5. 监控规划:
– 监控所有复制节点的状态
– 监控复制延迟
– 监控中间从库的性能
# 级联复制的拓扑示例
## 两层级联复制
“`
Master
↓
Intermediate Slave
↓
Cascading Slave 1
↓
Cascading Slave 2
“`
## 树形级联复制
“`
Master
↓
Intermediate Slave 1 → Cascading Slave 1-1
↓
Intermediate Slave 2 → Cascading Slave 2-1
↓
Intermediate Slave 3 → Cascading Slave 3-1
“`
2.3 级联复制的配置建议
级联复制的配置需要考虑二进制日志、复制参数、GTID等因素,以下是具体的配置建议。from MySQL:www.itpux.com
1. 中间从库配置:
– 启用二进制日志:log_bin = ON
– 启用log_slave_updates:log_slave_updates = ON
– 启用GTID:gtid_mode = ON, enforce_gtid_consistency = ON
– 配置server-id:确保所有服务器的server-id唯一
2. 级联从库配置:
– 配置复制参数:指向中间从库
– 启用GTID:gtid_mode = ON, enforce_gtid_consistency = ON
– 配置server-id:确保所有服务器的server-id唯一
3. 复制参数配置:
– 使用GTID复制:MASTER_AUTO_POSITION=1
– 启用中继日志恢复:relay_log_recovery = ON
– 配置复制用户权限:REPLICATION SLAVE
4. 性能优化配置:
– 启用并行复制:slave_parallel_type = LOGICAL_CLOCK, slave_parallel_workers = 4
– 优化InnoDB参数:innodb_buffer_pool_size、innodb_log_file_size等
– 优化网络参数:减少网络延迟
# 级联复制的推荐配置
## 中间从库配置
[mysqld]
server-id = 2
log_bin = /mysql/data/binlog
log_slave_updates = ON
gtid_mode = ON
enforce_gtid_consistency = ON
binlog_format = ROW
relay_log_recovery = ON
## 级联从库配置
[mysqld]
server-id = 3
gtid_mode = ON
enforce_gtid_consistency = ON
binlog_format = ROW
relay_log_recovery = ON
Part03-生产环境项目实施方案
3.1 级联复制的安装与配置
级联复制的安装与配置包括配置主库、中间从库和级联从库,以下是具体的实施方案。
# 环境说明
# 主库:192.168.1.100,server-id=1
# 中间从库:192.168.1.101,server-id=2
# 级联从库:192.168.1.102,server-id=3
# 步骤1:配置主库
# vi /mysql/data/my.cnf
[mysqld]
server-id = 1
log_bin = /mysql/data/binlog
binlog_format = ROW
gtid_mode = ON
enforce_gtid_consistency = ON
# 步骤2:配置中间从库
# vi /mysql/data/my.cnf
[mysqld]
server-id = 2
log_bin = /mysql/data/binlog
log_slave_updates = ON
binlog_format = ROW
gtid_mode = ON
enforce_gtid_consistency = ON
relay_log_recovery = ON
# 步骤3:配置级联从库
# vi /mysql/data/my.cnf
[mysqld]
server-id = 3
binlog_format = ROW
gtid_mode = ON
enforce_gtid_consistency = ON
relay_log_recovery = ON
# 步骤4:重启所有MySQL实例
systemctl restart mysqld
# 步骤5:创建复制用户
# 在主库上创建复制用户
mysql> CREATE USER ‘repl’@’192.168.1.101’ IDENTIFIED BY ‘ReplPassword123!’;
mysql> GRANT REPLICATION SLAVE ON *.* TO ‘repl’@’192.168.1.101’;
mysql> FLUSH PRIVILEGES;
# 在中间从库上创建复制用户
mysql> CREATE USER ‘repl’@’192.168.1.102’ IDENTIFIED BY ‘ReplPassword123!’;
mysql> GRANT REPLICATION SLAVE ON *.* TO ‘repl’@’192.168.1.102′;
mysql> FLUSH PRIVILEGES;
# 步骤6:配置中间从库复制
# 在中间从库上执行
mysql> CHANGE MASTER TO
-> MASTER_HOST=’192.168.1.100′,
-> MASTER_USER=’repl’,
-> MASTER_PASSWORD=’ReplPassword123!’,
-> MASTER_AUTO_POSITION=1;
mysql> START SLAVE;
# 步骤7:配置级联从库复制
# 在级联从库上执行
mysql> CHANGE MASTER TO
-> MASTER_HOST=’192.168.1.101′,
-> MASTER_USER=’repl’,
-> MASTER_PASSWORD=’ReplPassword123!’,
-> MASTER_AUTO_POSITION=1;
mysql> START SLAVE;
# 步骤8:验证级联复制状态
# 检查主库状态
mysql> SHOW MASTER STATUS;
# 检查中间从库状态
mysql> SHOW SLAVE STATUS\G;
mysql> SHOW MASTER STATUS;
# 检查级联从库状态
mysql> SHOW SLAVE STATUS\G;
# 预期输出:
# 主库:
# File: binlog.000001
# Position: 156
# Executed_Gtid_Set: 12345678-1234-1234-1234-1234567890ab:1-10
# 中间从库:
# Slave_IO_Running: Yes
# Slave_SQL_Running: Yes
# Retrieved_Gtid_Set: 12345678-1234-1234-1234-1234567890ab:1-10
# Executed_Gtid_Set: 12345678-1234-1234-1234-1234567890ab:1-10
# File: binlog.000001
# Position: 156
# Executed_Gtid_Set: 12345678-1234-1234-1234-1234567890ab:1-10
# 级联从库:
# Slave_IO_Running: Yes
# Slave_SQL_Running: Yes
# Retrieved_Gtid_Set: 12345678-1234-1234-1234-1234567890ab:1-10
# Executed_Gtid_Set: 12345678-1234-1234-1234-1234567890ab:1-10
3.2 级联复制的参数优化
级联复制的参数优化是提高其性能和可靠性的关键,以下是具体的参数优化方案。
# 步骤1:优化中间从库参数
# 中间从库参数
[mysqld]
# 二进制日志配置
log_bin = /mysql/data/binlog
log_slave_updates = ON
binlog_format = ROW
max_binlog_size = 1G
binlog_cache_size = 32M
sync_binlog = 100
# GTID配置
gtid_mode = ON
enforce_gtid_consistency = ON
# 复制配置
relay_log_recovery = ON
slave_net_timeout = 60
slave_parallel_type = LOGICAL_CLOCK
slave_parallel_workers = 4
slave_preserve_commit_order = ON
# InnoDB配置
innodb_buffer_pool_size = 8G
innodb_log_file_size = 2G
innodb_flush_log_at_trx_commit = 2
# 步骤2:优化级联从库参数
# 级联从库参数
[mysqld]
# 复制配置
relay_log_recovery = ON
slave_net_timeout = 60
slave_parallel_type = LOGICAL_CLOCK
slave_parallel_workers = 4
slave_preserve_commit_order = ON
# InnoDB配置
innodb_buffer_pool_size = 8G
innodb_log_file_size = 2G
innodb_flush_log_at_trx_commit = 2
# 步骤3:优化网络参数
# 系统网络参数
# vi /etc/sysctl.conf
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 300
net.ipv4.tcp_keepalive_probes = 5
net.ipv4.tcp_keepalive_intvl = 15
# 应用网络参数
sysctl -p
# 步骤4:验证参数优化效果
# 检查复制延迟
mysql> SHOW SLAVE STATUS\G | grep Seconds_Behind_Master;
# 检查中间从库性能
mysql> SHOW GLOBAL STATUS LIKE ‘Slave_%’;
# 示例:优化级联复制参数
# 优化前
mysql> SHOW GLOBAL VARIABLES LIKE ‘slave_parallel_workers’;
+————————+——-+
| Variable_name | Value |
+————————+——-+
| slave_parallel_workers | 0 |
+————————+
# 优化后
mysql> SET GLOBAL slave_parallel_workers = 4;
# 优化效果
# 中间从库复制延迟从100秒减少到0秒
# 级联从库复制延迟从200秒减少到50秒
3.3 级联复制的故障处理
级联复制的故障处理包括中间从库故障、级联从库故障、主库故障等情况,以下是具体的故障处理方案。
# 情况1:中间从库故障
# 症状:中间从库无法正常运行,级联从库复制停止
# 处理步骤:
1. 检查中间从库状态:登录中间从库,检查MySQL是否正常运行
2. 修复中间从库故障:根据故障原因,修复中间从库的问题
3. 重启中间从库复制:在中间从库上执行START SLAVE
4. 重启级联从库复制:在级联从库上执行START SLAVE
5. 验证级联复制状态:检查所有复制节点的状态
# 情况2:级联从库故障
# 症状:级联从库无法正常运行,不影响主库和中间从库
# 处理步骤:
1. 检查级联从库状态:登录级联从库,检查MySQL是否正常运行
2. 修复级联从库故障:根据故障原因,修复级联从库的问题
3. 重启级联从库复制:在级联从库上执行START SLAVE
4. 验证级联复制状态:检查级联从库的复制状态
# 情况3:主库故障
# 症状:主库无法正常运行,需要将中间从库提升为主库
# 处理步骤:
1. 选择中间从库作为新主库:选择一个数据最完整、延迟最小的中间从库
2. 停止新主库的复制:在新主库上执行STOP SLAVE
3. 提升新主库:在新主库上执行RESET MASTER
4. 配置其他中间从库指向新主库:使用MASTER_AUTO_POSITION=1重新配置复制
5. 配置级联从库指向新主库:使用MASTER_AUTO_POSITION=1重新配置复制
6. 启动所有从库的复制:执行START SLAVE
7. 验证新主库的状态:检查新主库的状态
# 情况4:复制错误
# 症状:级联复制过程中出现复制错误
# 处理步骤:
1. 查看复制错误:SHOW SLAVE STATUS\G | grep Last_SQL_Error
2. 分析错误原因:根据错误信息分析故障原因
3. 处理错误:根据错误原因,采取相应的处理措施
4. 跳过错误:如果是可以跳过的错误,使用SET GLOBAL sql_slave_skip_counter = 1
5. 重启复制:START SLAVE
# 示例:处理中间从库故障
# 检查中间从库状态
$ systemctl status mysqld
# 修复中间从库故障
# 例如,修复磁盘空间不足的问题
$ df -h
$ sudo rm -rf /mysql/data/binlog.old*
# 重启中间从库
systemctl restart mysqld
# 重启中间从库复制
mysql> START SLAVE;
# 重启级联从库复制
mysql> START SLAVE;
# 验证级联复制状态
mysql> SHOW SLAVE STATUS\G;
Part04-生产案例与实战讲解
4.1 级联复制的部署
级联复制的部署是确保其正常运行的基础,以下是具体的部署案例。
# 环境说明
# 主库:MySQL 8.0.28,4核8G,SSD,192.168.1.100
# 中间从库:MySQL 8.0.28,4核8G,SSD,192.168.1.101
# 级联从库:MySQL 8.0.28,4核8G,SSD,192.168.1.102
# 部署步骤
# 步骤1:配置主库
# vi /mysql/data/my.cnf
[mysqld]
server-id = 1
log_bin = /mysql/data/binlog
binlog_format = ROW
gtid_mode = ON
enforce_gtid_consistency = ON
# 步骤2:配置中间从库
# vi /mysql/data/my.cnf
[mysqld]
server-id = 2
log_bin = /mysql/data/binlog
log_slave_updates = ON
binlog_format = ROW
gtid_mode = ON
enforce_gtid_consistency = ON
relay_log_recovery = ON
# 步骤3:配置级联从库
# vi /mysql/data/my.cnf
[mysqld]
server-id = 3
binlog_format = ROW
gtid_mode = ON
enforce_gtid_consistency = ON
relay_log_recovery = ON
# 步骤4:重启所有MySQL实例
systemctl restart mysqld
# 步骤5:创建复制用户
# 在主库上创建复制用户
mysql> CREATE USER ‘repl’@’192.168.1.101’ IDENTIFIED BY ‘ReplPassword123!’;
mysql> GRANT REPLICATION SLAVE ON *.* TO ‘repl’@’192.168.1.101’;
mysql> FLUSH PRIVILEGES;
# 在中间从库上创建复制用户
mysql> CREATE USER ‘repl’@’192.168.1.102’ IDENTIFIED BY ‘ReplPassword123!’;
mysql> GRANT REPLICATION SLAVE ON *.* TO ‘repl’@’192.168.1.102′;
mysql> FLUSH PRIVILEGES;
# 步骤6:配置中间从库复制
# 在中间从库上执行
mysql> CHANGE MASTER TO
-> MASTER_HOST=’192.168.1.100′,
-> MASTER_USER=’repl’,
-> MASTER_PASSWORD=’ReplPassword123!’,
-> MASTER_AUTO_POSITION=1;
mysql> START SLAVE;
# 步骤7:配置级联从库复制
# 在级联从库上执行
mysql> CHANGE MASTER TO
-> MASTER_HOST=’192.168.1.101′,
-> MASTER_USER=’repl’,
-> MASTER_PASSWORD=’ReplPassword123!’,
-> MASTER_AUTO_POSITION=1;
mysql> START SLAVE;
# 步骤8:验证级联复制状态
# 检查主库状态
mysql> SHOW MASTER STATUS;
+—————+———-+————–+——————+—————————————-+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+—————+———-+————–+——————+—————————————-+
| binlog.000001 | 156 | | | 12345678-1234-1234-1234-1234567890ab:1 |
+—————+———-+————–+——————+—————————————-+
# 检查中间从库状态
mysql> SHOW SLAVE STATUS\G;
+—————————-+—————————————-+
| Slave_IO_Running | Yes |
| Slave_SQL_Running | Yes |
| Retrieved_Gtid_Set | 12345678-1234-1234-1234-1234567890ab:1 |
| Executed_Gtid_Set | 12345678-1234-1234-1234-1234567890ab:1 |
+—————————-+—————————————-+
mysql> SHOW MASTER STATUS;
+—————+———-+————–+——————+—————————————-+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+—————+———-+————–+——————+—————————————-+
| binlog.000001 | 156 | | | 12345678-1234-1234-1234-1234567890ab:1 |
+—————+———-+————–+——————+—————————————-+
# 检查级联从库状态
mysql> SHOW SLAVE STATUS\G;
+—————————-+—————————————-+
| Slave_IO_Running | Yes |
| Slave_SQL_Running | Yes |
| Retrieved_Gtid_Set | 12345678-1234-1234-1234-1234567890ab:1 |
| Executed_Gtid_Set | 12345678-1234-1234-1234-1234567890ab:1 |
+—————————-+—————————————-+
# 部署效果
# 级联复制成功部署
# 所有复制节点状态正常
# 数据从主库成功传递到级联从库
4.2 级联复制的监控
级联复制的监控是确保其正常运行的关键,以下是具体的监控案例。
# 环境说明
# 监控工具:Prometheus + Grafana
# 数据库:MySQL 8.0.28级联复制
# 监控步骤
# 步骤1:安装MySQL Exporter
# 在所有复制节点上安装MySQL Exporter
wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.14.0/mysqld_exporter-0.14.0.linux-amd64.tar.gz
tar -xzf mysqld_exporter-0.14.0.linux-amd64.tar.gz
mv mysqld_exporter-0.14.0.linux-amd64 /usr/local/mysqld_exporter
# 创建监控用户
mysql> CREATE USER ‘exporter’@’localhost’ IDENTIFIED BY ‘ExporterPassword123!’;
mysql> GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO ‘exporter’@’localhost’;
mysql> FLUSH PRIVILEGES;
# 创建配置文件
# vi /etc/.mysqld_exporter.cnf
[client]
user=exporter
password=ExporterPassword123!
# 启动MySQL Exporter
nohup /usr/local/mysqld_exporter/mysqld_exporter –config.my-cnf=/etc/.mysqld_exporter.cnf &
# 步骤2:配置Prometheus
# vi /usr/local/prometheus/prometheus.yml
global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_configs:
– job_name: ‘mysql’
static_configs:
– targets: [‘192.168.1.100:9104’, ‘192.168.1.101:9104’, ‘192.168.1.102:9104’]
# 步骤3:配置Grafana
# 登录Grafana,添加Prometheus数据源
# 导入MySQL监控面板
# 配置级联复制监控面板
# 步骤4:配置告警
# 在Grafana中配置级联复制告警规则
# 配置邮件告警
# 步骤5:验证监控效果
# 访问Grafana面板
# 查看级联复制状态
# 查看复制延迟
# 监控指标
# 复制线程状态:Slave_IO_Running, Slave_SQL_Running
# 复制延迟:Seconds_Behind_Master
# GTID执行状态:Gtid_executed
# 复制错误:Last_SQL_Error
# 中间从库性能:CPU、内存、磁盘IO
# 告警规则
# 复制线程停止:当Slave_IO_Running或Slave_SQL_Running为No时,发送紧急告警
# 复制延迟:当Seconds_Behind_Master超过阈值时,发送告警
# 复制错误:当Last_SQL_Error不为空时,发送告警
# 中间从库性能:当中间从库的CPU、内存或磁盘IO超过阈值时,发送告警
# 监控效果
# 实时监控级联复制状态
# 及时发现和处理级联复制问题
# 提高系统的可靠性和稳定性
4.3 级联复制的故障处理
级联复制的故障处理是确保其可靠性的关键,以下是具体的故障处理案例。
# 环境说明
# 主库:MySQL 8.0.28,4核8G,SSD,192.168.1.100
# 中间从库:MySQL 8.0.28,4核8G,SSD,192.168.1.101
# 级联从库:MySQL 8.0.28,4核8G,SSD,192.168.1.102
# 故障场景:中间从库故障
# 故障现象
# 中间从库服务器崩溃,无法正常运行
# 级联从库复制停止
# 故障分析
1. 中间从库无法正常运行,导致级联从库无法复制数据
2. 需要修复中间从库或重新配置级联从库
# 故障处理
## 步骤1:检查中间从库状态
$ systemctl status mysqld
# 输出:Active: failed
## 步骤2:修复中间从库故障
# 例如,修复磁盘故障
$ sudo fsck /dev/sda1
## 步骤3:重启中间从库
systemctl restart mysqld
## 步骤4:重启中间从库复制
mysql> START SLAVE;
## 步骤5:重启级联从库复制
mysql> START SLAVE;
## 步骤6:验证级联复制状态
# 检查中间从库状态
mysql> SHOW SLAVE STATUS\G | grep -E ‘Slave_IO_Running|Slave_SQL_Running’;
# 检查级联从库状态
mysql> SHOW SLAVE STATUS\G | grep -E ‘Slave_IO_Running|Slave_SQL_Running’;
# 故障处理效果
# 中间从库故障得到修复
# 级联复制恢复正常
# 数据一致性得到保障
# 备选方案:如果中间从库无法修复
# 步骤1:将级联从库直接指向主库
mysql> STOP SLAVE;
mysql> CHANGE MASTER TO
-> MASTER_HOST=’192.168.1.100′,
-> MASTER_USER=’repl’,
-> MASTER_PASSWORD=’ReplPassword123!’,
-> MASTER_AUTO_POSITION=1;
mysql> START SLAVE;
# 步骤2:验证级联从库状态
mysql> SHOW SLAVE STATUS\G | grep -E ‘Slave_IO_Running|Slave_SQL_Running’;
4.4 级联复制的性能优化
级联复制的性能优化是提高其效率的关键,以下是具体的性能优化案例。
# 环境说明
# 主库:MySQL 8.0.28,8核16G,SSD,192.168.1.100
# 中间从库:MySQL 8.0.28,8核16G,SSD,192.168.1.101
# 级联从库:MySQL 8.0.28,8核16G,SSD,192.168.1.102
# 业务场景:高并发写入,日写入量1000万条
# 问题描述
# 级联复制导致复制延迟增加,影响系统性能
# 故障分析
1. 中间从库的处理速度跟不上主库的写入速度
2. 级联从库的处理速度跟不上中间从库的复制速度
3. 并行复制配置不合理,导致从库SQL线程执行缓慢
# 优化方案
## 步骤1:优化中间从库并行复制
# 启用基于逻辑时钟的并行复制
mysql> STOP SLAVE;
mysql> SET GLOBAL slave_parallel_type = ‘LOGICAL_CLOCK’;
mysql> SET GLOBAL slave_parallel_workers = 8;
mysql> SET GLOBAL slave_preserve_commit_order = ON;
mysql> START SLAVE;
## 步骤2:优化级联从库并行复制
# 启用基于逻辑时钟的并行复制
mysql> STOP SLAVE;
mysql> SET GLOBAL slave_parallel_type = ‘LOGICAL_CLOCK’;
mysql> SET GLOBAL slave_parallel_workers = 8;
mysql> SET GLOBAL slave_preserve_commit_order = ON;
mysql> START SLAVE;
## 步骤3:优化中间从库配置
# 优化中间从库配置
# vi /mysql/data/my.cnf
[mysqld]
innodb_buffer_pool_size = 12G
innodb_log_file_size = 2G
innodb_flush_log_at_trx_commit = 2
innodb_file_per_table = ON
innodb_io_capacity = 2000
innodb_io_capacity_max = 4000
## 步骤4:优化级联从库配置
# 优化级联从库配置
# vi /mysql/data/my.cnf
[mysqld]
innodb_buffer_pool_size = 12G
innodb_log_file_size = 2G
innodb_flush_log_at_trx_commit = 2
innodb_file_per_table = ON
innodb_io_capacity = 2000
innodb_io_capacity_max = 4000
## 步骤5:验证优化效果
# 检查中间从库复制延迟
mysql> SHOW SLAVE STATUS\G | grep Seconds_Behind_Master;
# 检查级联从库复制延迟
mysql> SHOW SLAVE STATUS\G | grep Seconds_Behind_Master;
# 优化效果
# 中间从库复制延迟从100秒减少到0秒
# 级联从库复制延迟从200秒减少到50秒
# 系统整体性能提升30%
# 优化前后对比
# 优化前:中间从库复制延迟100秒,级联从库复制延迟200秒
# 优化后:中间从库复制延迟0秒,级联从库复制延迟50秒
Part05-风哥经验总结与分享
通过多年的MySQL数据库管理经验,我总结了以下关于MySQL级联复制的关键点:
1. 适用场景:级联复制适用于需要减轻主库压力、支持大规模从库部署的场景,如大型网站、多数据中心部署等。
2. 拓扑规划:合理规划复制拓扑,控制复制层次,减少复制延迟。
3. 配置要点:正确配置中间从库的log_slave_updates参数,确保级联从库能够复制数据。
4. 性能优化:启用并行复制,优化InnoDB参数,提高中间从库和级联从库的处理速度。
5. 监控告警:建立完善的监控系统,及时发现和处理级联复制的问题。
6. 故障处理:制定中间从库故障的处理方案,确保级联复制的可靠性。
7. 数据一致性:注意复制延迟对数据一致性的影响,合理配置复制参数。
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
