可靠备份巨大的MySQL数据库?

3
我有一份200GB / 400M行的mysql/innodb数据库,这已经远远超出了合理范围,我发现其中一个令人惊讶的问题是还原备份。mysqldump生成了巨大的sql文件,将其导入到新数据库中需要大约一周的时间(尝试通过更大/更小的事务、在导入期间关闭键、网络压缩等方法来加快速度,但都失败了,myisam导入似乎快2倍,但就没有事务)。更糟糕的是,如果在一周的时间内传输>200GB的网络连接出现故障,则无法以任何非平凡的方式继续进行sql导入过程。如何处理这个问题呢?目前,如果我注意到连接断开,我会手动尝试通过检查最后导入表的最高主键来确定何时结束,然后使用perl脚本执行以下操作:
perl -nle 'BEGIN{open F, "prelude.txt"; @a=<F>; print @a; close F;}; print if $x; $x++ if /INSERT.*last-table-name.*highest-primary-key/'

这真的不是最好的选择,那么什么才是最佳方案呢?
3个回答

1

你的MySQL盒子是否有足够的硬盘空间来存储所有数据的副本?本地存储是最好的选择,但如果不行,你也可以尝试使用一些利用iSCSI的NAS设备。虽然仍然是通过网络进行传输,但在这种情况下,你可以获得更高的吞吐量和可靠性,因为你只依赖于一个几乎不需要重新启动的具有相当简单操作系统的NAS。


一切都在亚马逊云上。到目前为止还没有崩溃,但我并不感到非常高兴的是,如果有任何问题,恢复备份至少需要一周时间+随机的临时perl脚本,如果由于任何原因它在中途失败了。 - taw

1

使用mysqldump备份大型数据库是不可行的 - 200G是可行的,但更大的话情况会越来越糟。

您最好的选择是对数据库目录进行卷快照,然后以某种方式进行压缩 - 这通常是我们所做的 - 或将其同步到其他地方。

如果您的文件系统或块设备不支持快照,则基本上处于麻烦中。您可以关闭数据库以进行备份,但我想您不希望这样做。

要恢复它,只需执行相反的操作,然后重新启动并等待(可能需要一些时间)innodb恢复修复问题。

maatkit mk-parallel-dump和restore工具在速度方面比mysqldump要好一些 - 但我并不100%确信它们的正确性。


编辑:重新阅读问题,我认为文件系统快照+rsync可能是最好的选择;您可以在不影响实时系统的情况下执行此操作(您只需要传输自上次备份以来发生变化的内容),并且如果连接失败,您可以恢复rsync,并且它将从中断处继续。


关于这个问题的一个重要提示是确保备份MySQL数据目录中的ibdata文件(如ibdata1等)。这是InnoDB使用的文件,如果没有它,备份将是错误的。 - Oliver M Grech

0
你需要数据库中的所有信息吗?
你能否将一些信息推送到归档数据库,并添加一些东西到你的应用程序中,以便人们可以查看归档记录,
显然这取决于你的应用程序和设置,但这可能是一个解决方案?你的数据库可能只会变得更大....

从长远来看,有必要修复它,但现在我只是试图让所有东西都正常运行。 - taw

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