第1章 延时从库
1.1 介绍
是我们人为配置的一种特殊从库.人为配置从库和主库延时N小时
1.2 为什么要有延时从
数据库故障?
物理损坏
主从复制非常擅长解决物理损坏.
逻辑损坏
普通主从复制没办法解决逻辑损坏
说明:一般公司不会去搞这样一个数据库,因为这个库是不对外提供服务的
1.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
第2章 延时从库的应用
1.1 故障恢复思路
1.监控到数据库逻辑删除(zabbix)
2.停业务挂维护页
3.停从库SQL线程,记录已经回放的位置点(截取日志的起点)
stop slave sql_thread;
记录回放位置点
mysql> show slave statusG
Relay_Log_File: yuxi-relay-bin.000002
Relay_Log_Pos: 320
4. 截取relaylog
起点: Relay_Log_File、Relay_Log_Pos
终点:误操作之前的位置点
show relaylog events in ‘yuxi-relay-bin.000002’;
进行截取
5. 模拟SQL线程回放日志
从库 source +截取的日志
6. 恢复业务(分为2种情况)
第一种情况:只有一个库的话
从库替代主库工作
第二种情况:多个库的话
从库导出故障库,还原到主库中
1.2 故障模拟及恢复
主库数据库操作
db01 [(none)]>create database relay charset utf8;
db01 [(none)]>use relay
db01 [relay]>create table t1 (id int);
db01 [relay]>insert into t1 values(1);
db01 [relay]>drop database relay;
数据恢复流程
第一个里程:
停止从库SQL线程
mysql> stop slave sql_thread;
第二个里程:
找relaylog的截取起点和终点
起点:
Relay_Log_File: db01-relay-bin.000002
Relay_Log_Pos: 320
终点:
mysql> show relaylog events in 'db01-relay-bin.000002';
误操作之前的位置点
第三个里程:进行截取
mysqlbinlog --start-position=320 --stop-position=980 /data/3308/data/db01-relay-bin.000002>/tmp/relay.sql
第四个里程:模拟SQL线程回放relaylog
-----测试环境因为没有开GTID所以不必要执行
-----set sql_log_bin=0;
mysql> source /tmp/relay.sql
第五个里程:从库导出,恢复到主库
第3章 过滤复制
1.1 作用
选择性的对默认库进行复制,其余的库不复制
1.2 控制主库方面(不建议采用)
此方式是对主库里面的一些库做二进制记录,从而控制传的时候只传指定的库的日志
但是,毕竟是数据库里面的库,这样不好
参数配置:
mysql> show master status;
binlog_do_db 白名单
binlog_ignore_db 黑名单
说明:
如果指定多可要分多行写,例如
binlog_do_db=word
binlog_do_db=school
…….
还需注意写入配置文件的时候必须要小写,这种模式了解即可
1.3 从库方面控制(三种模式)
在SQL_T回放日志,选择部分日志回放
1.3.1 第一种模式(这种模式是过滤复制的主选)----针对库级别
replicate_do_db=oldguo 白名单
replicate_ignore_db=world 黑名单
如果指定多可要分多行写,例如
binlog_do_db=word
binlog_do_db=school
1.3.2 第二种模式:针对表级别----不常用
replicate_do_table=world.t1
replicate_ignore_table
1.3.3 第三种模式:模糊匹配----不常用
replicate_wild_do_table=world.t*
replicate_wild_ignore_table