AWS RDS自己带了一个基于时间点恢复数据到新实例的功能,
https://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/USER_PIT.html
测试使用后发现,它会和实际恢复时间差一点,
比如选择恢复时间点是15:00:00,它会恢复到14:59:59这个时间点,会往前推一秒,并不是你选择的时间点。
其实自己用备份恢复出来的实例也可以做时间点恢复
1、确定删除的位点或GTID
root@ip-172-31-30-45:~# mysqlbinlog -vv --base64-output=decode-rows -hczg.ckmuhrbhkmox.ap-east-1.rds.amazonaws.com -uroot -pchai123456 -P3306 -R mysql-bin-changelog.000008 |grep -C 10 -E 'drop|DROP' # at 4700 #210918 6:22:15 server id 2081322070 end_log_pos 4731 CRC32 0x521188a0 Xid = 1344 COMMIT/*!*/; # at 4731 #210918 6:22:23 server id 2081322070 end_log_pos 4796 CRC32 0xaf9d03a7 GTID last_committed=13 sequence_number=14 rbr_only=no SET @@SESSION.GTID_NEXT= '6ba74488-1843-11ec-84ea-068e077e2970:42'/*!*/; # at 4796 #210918 6:22:23 server id 2081322070 end_log_pos 4891 CRC32 0x663a9ac4 Query thread_id=2 exec_time=0 error_code=0 SET TIMESTAMP=1631946143/*!*/; SET @@session.pseudo_thread_id=2/*!*/; drop database ceshi /*!*/; # at 4891 #210918 6:25:00 server id 2081322070 end_log_pos 4948 CRC32 0x6391db15 Rotate to mysql-bin-changelog.000009 pos: 4 SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/; DELIMITER ; # End of log file /*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/; /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;
看到drop database ceshi命令是在GTID位点【'6ba74488-1843-11ec-84ea-068e077e2970:42'】位点删除的,
对应是在 【4796】 这个pos位点删除的。
在接位点的时候不能接到这两个位点上,因为这两个位点上已经执行了DROP操作,必须要接到之前的位点上。
接GTID可以接到 【'6ba74488-1843-11ec-84ea-068e077e2970:41'】
接POS位点可以接到 【4700】
2、利用快照还原数据库(控制台操作)
RDS控制台----快照---选择快照---操作---还原快照
3、连接新数据库接主从,同步到指定位点
CALL mysql.rds_set_external_master_with_auto_position('172.31.30.122',3306,'root','chai123456',0,0); CALL mysql.rds_start_replication_until_gtid('6ba74488-1843-11ec-84ea-068e077e2970:41'); --这一步会自动启动同步