我已于下午 14:00 在复制服务器上恢复实时数据库备份(上午 01:00 完成)。
备份已成功恢复且复制服务器已正确更新,但如何恢复在 01:00AM 到 14:00PM 之间在实时服务器上更新的数据。
是否有可用的工具,或者可以通过任何脚本或命令行进行操作,请帮忙。
问候, 索拉布
最佳答案
您无法“恢复”此类数据(因为它们从未存在于该接收实例中),但您可以“应用”备份后对实时数据库所做的所有更改。
最简单的方法是让复制服务器(通常称为“从属服务器”)在进行备份时的位置开始从主服务器的 binlog 进行复制。如果您使用“mysqldump”进行备份,“--master-data”选项将为您完成此操作。
既然你错过了这个机会,我认为有两种可能的方法:
1) 使用“mysqldump --master-data”重复这一切。
2) 使用“mysqlbinlog”将那段时间的变化从主服务器反馈到从服务器,通过管道将其输入“mysql”:
mysqlbinlog ... | mysql -h 从属...
方法 2 要求您仍然拥有这些可用的二进制日志,并且它假设主服务器的更改适用于从服务器,即使您在这些之后的 01:00 - 14:00 期间提供这些更改14:00 起 - 这可能成立,也可能不成立。
此外,它还要求您可以确定要传输的第一个和最后一个更改在二进制日志中的确切位置。
不要尝试使用“--start-datetime”和“--stop-datetime”进行传输,我发现长时间运行的事务会产生一些意想不到的效果。仅使用它们分别查看 01:00 和 14:00 左右的操作,确定您需要的第一个操作(接近 01:00)和您已经执行的第一个操作(接近 14:00)的确切位置,然后使用“--start-position”和“--stop-position”进行传输。
方法 1 绝对更容易实现,我强烈推荐它。 MySQL手册页面上有如何设置slave的说明 http://dev.mysql.com/doc/refman/5.5/en/mysqldump.html涵盖了这一切。
如果您使用物理文件副本或 LVM 快照进行初始传输(而不是“mysqldump”),也请重复此操作,但记录此时主服务器的 binlog 位置(“显示主服务器状态”),然后让从服务器启动从那里(“将主人更改为...”)。
关于MySql DB差异备份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24241580/