1.场景
1 2 3 4 5 6 7 8 9 10 11 12 |
总数据量级500G,正常备份去恢复需要1.5-2小时 1.配置延时3600秒 mysql> CHANGE MASTER TO MASTER_DELAY = 3600; 2.主库 drop database db; 3.怎么利用延时从库,恢复数据? 提示: 1.从库relaylog存放在datadir目录下 2.mysqlbinlog 可以截取relaylog内容 3.show relaylog events in 'db01-relay-bin.000001'; |
2.环境准备
1 2 3 4 5 6 7 8 9 10 11 12 |
1.日常备份 [root@db01 ~]# mysqldump -uroot -p123 -A -R --triggers --single-transaction --master-data=2 > /tmp/full$(date +%F).sql 2.设置延时从库 mysql> stop slave; mysql> change master to master_delay=3600; mysql> start slave; 3.插入新数据 mysql> use master; mysql> insert test values(100),(200); |
3.模拟删除数据库
1 2 |
mysql> drop database master; |
4.使用延时从库恢复数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
1.停止从库的sql线程 mysql> stop slave sql_thread; 2.查看状态 mysql> show slave status\G Slave_IO_Running: Yes Slave_SQL_Running: No 3.导出从库相应的库 [root@db02 ~]# mysqldump -uroot -p123 -B master > /tmp/master.sql 4.截取relay-log位置点 1)确认起始位置点 [root@db02 ~]# cat /usr/local/mysql/data/relay-log.info ./db02-relay-bin.000002 283 2)确认结束位置点 [root@db02 ~]# mysqlbinlog /usr/local/mysql/data/db02-relay-bin.000002 COMMIT/*!*/; # at 504 3)截取数据 [root@db02 ~]# mysqlbinlog --start-position=283 --stop-position=504 /usr/local/mysql/data/db02-relay-bin.000002 > /tmp/huifu.sql 5.将sql文件推送至主库 [root@db02 ~]# scp /tmp/master.sql 172.16.1.51:/tmp [root@db02 ~]# scp /tmp/huifu.sql 172.16.1.51:/tmp 6.恢复数据到主库 mysql> source /tmp/master.sql; mysql> source /tmp/huifu.sql; 7.查看主库数据是否恢复 8.开启从库的sql线程 mysql> start slave sql_thread; #注意,有时为了数据准确在主库恢复数据时我们会关闭binlog,要是使用延时从库恢复数据,主库千万不要关闭binlog |