还原mysql到过去的任何特定时间?

上个星期,我们的一个开发人员在生产mysqlupdate xxx set yyy=zzz ,而没有在哪里运行更新查询。 我们每天都在备份mysql 00:01,他在17上做了这个:xx,有没有办法将数据库恢复到以前的任何特定时间? 显然我们不能每秒都拍快照。

恢复程序:

  1. 还原mysql备份,说2017-06-11 00:01:00
  2. mysqlbinlog binglog *到文本文件queries.sql
  3. 在2017-06-11 00:01:00之前删除查询
  4. 删除update xxx set yyy=zzz后的查询update xxx set yyy=zzz
  5. mysql <queries.sql

您需要从以前的备份中恢复。 您只能在交易期间进行ROLLBACK ,即如果您以BEGIN;开头BEGIN; 你可以做改变,然后用COMMIT;确认它们COMMIT; 撤消一个ROLLBACK; 。 除此之外,没有其他的撤消历史。

应该不需要每秒备份,但是如果有风险再次发生,您可以考虑更频繁的sqldumps – 或者不让开发人员使用生产数据库。

如果启用了二进制日志 ,则可以重做 (而不是取消)备份后所做的所有修改。 由于二进制日志只存储查询,而不是数据,所以必须从备份开始,而不是从当前状态开始。 如果上周发生了这个错误,现在可能不是一种select,但是至less可以使未来成为可能。

update xxx set yyy=zzz;错误update xxx set yyy=zzz; 你只有一列有错误的数据。 根据列和其他多less表取决于这些数据,可以防止将整个数据库从上次备份恢复到以前的状态。 如果幸运的话,可以只从转储中获取这个特定的表,并修改INSERT查询以UPDATE单列的查询。