24

我犯了一个大错误,我在 MySQL 中更新了一个没有“where”子句的表:'(

它是自动提交的。

有没有办法从它回滚?

4

3 回答 3

14

不,没有任何查询可以“撤消”已提交的数据修改查询。

如果您有数据库的备份,则可以恢复备份并使用 DBA 工具(在 MySQL 的情况下,它是mysqlbinlog)从备份回数据库后的日志中“重播”所有数据修改查询,但跳过问题查询。

如果您没有备份以及自该备份以来的所有日志,则您无法恢复数据。

于 2012-12-24T03:01:54.820 回答
1

查找事务日志。我会更新更多信息,但日志可能只会在有限的时间内保留,所以时间至关重要!

请参阅:http ://dev.mysql.com/doc/refman/5.0/en/point-in-time-recovery.html

于 2012-12-24T02:05:59.003 回答
0

如果您启用了 mysql binlog 并且它是基于 ROW 的格式,那么您可以获取更新前后每一行的值。使用它可以恢复表的状态。

于 2014-12-04T06:15:06.480 回答