1、介绍
是我们人为配置的一种特殊从库, 人为配置从库和主库延时N小时
2、为什么要有延时从库
- 数据库故障
- 物理损坏 (主从复制非常擅长解决物理损坏)
- 逻辑损坏 (普通主从复制没办法解决逻辑损坏)
3、配置延时从库
``` SQL线程延时: 数据已经写入relaylog中了, SQL线程”慢点”运行 一般企业建议3-6小时, 具体看公司运维人员对于故障的反应时间
停止主从同步
mysql>stop slave;
设置延时从库, 时间: (秒)
mysql>CHANGE MASTER TO MASTER_DELAY = 300;
启动主从同步
mysql>start slave;
查看延时状态
mysql> show slave status \G SQL_Delay: 300 SQL_Remaining_Delay: NULL
<a name="JVKEn"></a># 4、故障模拟及恢复主库发生了逻辑损坏 (DROP、truncate)时,可以使用延时从库快速恢复数据<a name="MRcoq"></a>#### 环境
主从复制, 2小时延迟从库, 10:00 drop database relay;
<a name="S5UDT"></a>
#### 思路
- 及时监控故障: 主库 10:05发现故障, 从库此时8:05数据状态
- 立即将从库的SQL线程关闭, 需要对relay库 业务挂维护页
- 停止所有同步线程 (sql_thred、IO_thred)
- 在延时从库: 恢复到误删除之前的数据
手工模拟SQL线程工作, 直到drop之前位置点。
SQL线程上次执行到的位置 到 drop之前
relay.info —> 分析drop位置点 —> 截取relaylog日志 —> source
create database delaydb charset utf8mb4; use delaydb; create table t1(id int); insert into t1 values(1),(2),(3); commit;<a name="XCkpw"></a> #### 故障模拟
drop database delaydb;
<a name="T6qBl"></a>
#### 处理故障恢复
- 截取日志 起点: show slave status\G Relay_Log_File: centos7-relay-bin.000006 Relay_Log_Pos: 324
终点: mysql -e “show relaylog events in ‘centos7-relay-bin.000006’;” | grep -B 10 “drop database relay”
导出, 传输到主库 mysqlbinlog —start-position=342 —stop-position=1068 /data/3317/data/centos7-relay-bin.000006 > /tmp/relay.sql
导入主库 mysql> reset slave all; mysql> set sql_log_bin=0; mysql> source /tmp/relay.sql; mysql> set sql_log_bin=1; ```
