延时从库,原理,在SQL线程上做手脚,不影响IO线程连接dump线程取数据。
MySQL延时从库操作
mysql> stop slave;
Query OK, 0 rows affected (0.00 sec)
mysql> change master to
-> master_delay=180;
Query OK, 0 rows affected (0.01 sec)
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)
#新从库
change master to
master_host='10.0.0.51',
master_user='slave',
master_password='123',
master_log_file='mysql-bin.000001',
master_port=3306,
master_log_pos=250,
master_delay=3600;
企业中一般会延时3-6小时
企业案例
思考问题:
总数据量级500G,正常备份去恢复需要1.5-2小时
1)配置延时3600秒
mysql>CHANGE MASTER TO MASTER_DELAY = 3600;
2)主库
drop database db;
3)怎么利用延时从库,恢复数据?
思路:
1.停止SQL线程
mysql> stop slave sql_thread;
2.找到relaylog的名字和起始位置点
[root@db03 data]# cat relay-log.info
./db03-relay-bin.000003
283
3.查看relay log到删库之前
[root@db03 data]# mysqlbinlog --base64-output=decode-rows -vvv db03-relay-bin.000003
12611
4.导出被删除的库
[root@db03 data]# mysqldump -uroot -p123 -A > /tmp/zls1_new.sql
5.截取relay log
[root@db03 data]# mysqlbinlog --start-position=283 --stop-position=12611 db03-relay-bin.000003 > /tmp/delay.sql
6.将导出的sql文件发送到主库
[root@db03 data]# scp /tmp/*.sql 172.16.1.51:/tmp
7.在主库导入数据
[root@db01 data]# mysql < /tmp/zls1_new.sql
[root@db01 data]# mysql < /tmp/delay.sql
8.在延时从库开启SQL线程
mysql> start slave sql_thread;
Query OK, 0 rows affected (0.00 sec)
网友评论