灾难如下:
我们的公司正在使用一个用于测试管理的 Web 应用程序:测试链接。一个团队已经为此工作了一个多月了。昨天,另一个团队也想开始使用 testLink,所以他们让我帮他们安装。
安装是在第一个 TestLink 运行的同一台服务器上进行的,我正在使用Wamp服务器.2.0我在其中运行 testLink,所以我开始再次安装它,不幸的是在同一个 WampServer 上。我有点累了,而且我在安装中没有提到我给第二个 TestLink 相同的数据库名称和第一个一样..安装成功...但是等一下!!第一个数据库中的所有数据都丢失了!!被一个空的新数据库覆盖了..!我感觉肯定有人要杀我了!
所以我开始用谷歌搜索,但是自从安装第一个 TestLink 以来没有进行过数据库备份...我真的觉得我没有解决方案...我尝试运行软件来备份被覆盖和意外删除的文件,但这没有帮助...当然......
我发现这个博客一个关于的故事MySQL 二进制日志,但看起来至少需要有一个备份才能恢复丢失的数据。在我的我的配置文件文件,log-bin=mysql-bin
行已取消注释,我可以在 mysql\data\ 下找到如下所示的文件:mysql-bin.00000x
我跑了mysqlbinlog在其中一个上使用命令:mysqlbinlog --start-datetime="2011-04-01 00:00:00" mysql-bin.000006
,这使我的屏幕看起来像一个矩阵,我可以识别看起来像TestLink命令的行,该命令似乎成功结束..但没有..数据库中的表保持不变,为空...
我是否遗漏了什么?是否有一线希望之光?
请帮忙..
答案1
bin-log 会记录启动时的所有查询,因此您基本上有三个选择:
- 从一开始就启用了 bin-log,并记录了对数据库的所有查询。在这种情况下,您可以简单地从 bin-log 恢复整个数据库。
- 您有一个在启用 bin-log 后某个时间进行的旧备份。在这种情况下,您可以从备份中恢复,并从 binlog 中进行备份的位置开始(增量备份)。
- bin-log 不包含来自数据库源的所有查询,并且您没有备份。在这种情况下,您(最终)将能够恢复 bin-log 中包含的所有数据,但不存在的任何数据将永远丢失。您可以尝试手动恢复任何丢失的数据,但根据您的数据结构/大小,这可能很简单甚至不可能。
听起来你没有备份,所以只剩下选项 1 和 3。检查第一个 bin-log 文件,看看其中最早的条目来自哪里,看看哪种情况适用于你。如果你正在寻找 mysqlbinlog 的具体用法,请参阅官方文档这很好地解释了事情。
如果您能从中恢复,您应该/必须做的下一件事就是实施数据库的定期备份计划,包括异地副本。
答案2
我最终解决了问题,并按照 uesp 的说法使用 bin-log 文件将损失降到最低。我使用mysqlbinlog binlog_file | mysql -u root -p
恢复了数据库中 75% 的数据及其结构。剩余的 25% 是手动写入的,我们花了大约半天时间才恢复全部数据。
是的,那是一次糟糕的经历,但却是一次丰富的经历,我设置了每天凌晨 3 点自动运行备份,压缩转储.sql
,将其附加到电子邮件并发送到其他机器,以防主机烧毁:)
谢谢大家的帮助,MySQL 官方文档也确实很有帮助!
祝你有美好的一天!