1.延时从库
人为配置从库,当主库发生信息变化后,在延迟时间过后才会在从库执行
普通的主从复制,处理物理故障比较擅长
如果主库出现drop database操作
延时从库:主库做了某项操作之后,从库延时多长时间回放(sql线程)
针对sql线程延迟
(1)配置步骤
Stop slave
Change master to master_delay=300; 单位是秒
Start slave;
Show slave status\G
这样可以解决,当主库发生drop时,我们可以在延时时间内 断了从库,以便数据恢复
(2)延迟从库应用
1>故障恢复思路
1主1从,从库延时5分钟,主库误删除1个库
- 5分钟之内 侦测到误删除操作
- 停从库SQL线程
- 截取relaylog
起点 :停止SQL线程时,relay最后应用位置
终点:误删除之前的position(GTID) - 恢复截取的日志到从库
- 从库身份解除,替代主库工作
2>故障模拟恢复
#模拟主库操作
Create database ys charset utf8mb4;
Use ys
Create table t1 (id int);
Inset into t1 values (1),(2),(3),(4);
Insert into t1 values (11),(22),(33),(44);
Drop database ye;
(3)修复数据
停止线程 ;前提是要看主库的日志是否都到从库
Stop slave;\
截取relay log日志
起点:通过mysql> show slave status\G查看
467就是起点
终点:通过查看relay-log-file查看drop之前的位置点
mysql> show relaylog events in’localhost-relay-bin.000002’;
Pos是对应的relaylog的起点和终点,而end_log_pos是对应的binlog的位置点
此时终点是1133
截取日志
[root@localhost ~]# cd /data/3308/data/
[root@localhost data]# mysqlbinlog --start-position=476 --stop-position=1133 localhost-relay-bin.000002 >/tmp/relay.sql
导入从库恢复
mysql> stop slave;
mysql> reset slave all;
mysql> reset master; 清空realy log日志文件
mysql> set sql_log_bin=0;
mysql> source /tmp/relay.sql;
mysql> set sql_log_bin=1;
2.过滤复制
介绍:部分数据复制
使用场景:
(1)配置方法
主库:(主库一般很少用)
查看:Show master status;
白名单:Binlog_Do_DB=world
黑名单:Binlog_Ignore_DB
通过设置白名单和黑名单来控制库传输
从库:(用的多)
show slave status\G
Replicate_Do_DB:
Replicate_Ignore_DB:
从库的过滤复制是通过控制sql线程来回放指定的库
查看过滤复制参数:Show slave s