如何使用mysql二进制日志从drop database命令中恢复数据?

9
我该如何恢复使用“drop database”命令删除的mysql数据库?我可以访问二进制日志,这应该可以实现此类回滚。
5个回答

10

文档很糟糕。它暗示DROP DATABASE可以恢复,但只有在我不熟悉的奇怪情况下才能这样做http://dev.mysql.com/doc/refman/5.0/en/binary-log.html

根据文档,binlog只是基于给定参考点执行的命令序列。因此,当您执行“DROP DATABASE”时,它不会“哦,他正在删除数据库,我们应该备份以防万一”,而是仅将“DROP DATABASE”写入最后一个binlog。恢复并不像倒带一样简单。

您需要从上一个已知良好状态恢复数据库,并应用从该恢复点到DROP命令之间发生的binlog。

http://dev.mysql.com/doc/refman/5.0/en/recovery-from-backups.html

我不确定如何确定使用哪些二进制日志。

拥有完整的文件系统备份是最好的。至少您应该拥有这些备份以便后续使用。


6
如果您没有数据库备份,那么情况就很糟糕了。删除数据库是永久性的。

1
真的吗?我以为日志记录了所有东西。你能再详细解释一下吗? - Orion Edwards

5
假设您已有备份,二进制日志将记录自该备份后发生的所有内容。使用mysqlbinlog实用程序,您可以执行以下操作:
mysqlbinlog the_log_file > update.sql
不过我认为您可能需要编辑该文件,以删除任何不想再次执行的内容(如Drop数据库语句)。
祝好运!

0

只是为了补充Kent Fredric的答案,如果您正在使用二进制日志记录自数据库创建以来,您可以回滚drop database命令。


这可以作为注释添加,而不是“答案”。 - mysqlrockstar
谢谢@MySQLRockstar,我知道,但至少需要50个声望才能这样做:\ - melloc

0

没有备份,没有派对。

所以我会回答:

为了再也不处于你的情况,安装超级简单和超级强大的 automysqlbackup(如果您在 Linux 上):

sudo apt-get install automysqlbackup

对其进行配置:

sudo nano /etc/default/automysqlbackup

然后自动将其内容上传到 Dropbox、Ubuntu One 或类似的服务中。

只有这样才能幸福地生活 :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接