2010-01-29 81 views
3

我有200GB/400Mrows mysql/innodb数据库 - 远远超出了我发现的合理范围。大型mysql数据库的可靠备份?

一个令人惊讶的问题是恢复备份。 mysqldump生成巨大的sql文件,大约需要一周时间才能导入到新的数据库中(尝试使其更快速地像更大/更小的事务,在导入期间关闭密钥等,网络压缩等等失败,myisam导入似乎快两倍,但不会有交易)。

更糟糕的是 - 我希望得到一些帮助 - 在一周的时间内传输大于200GB的网络连接具有破坏的不平凡的机会,并且sql导入过程不能在任何非平凡的方式。

什么是最好的处理方式?现在,如果我看到一个破碎的我连接手动揣摩当它结束通过检查最后导入的表的最高主键,然后有一个perlscript基本上做到这一点:

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/' 

这个真没有要走的路,那么最好的方法是什么?

回答

1

你的MySQL盒子是否有足够的硬盘空间来存放所有的数据?本地存储在这里最好,但如果它不是一个选项,你也可以尝试使用iSCSI的某种NAS设备。它仍然在网络上发生,但在这种情况下,您将获得更高的吞吐量和可靠性,因为您只依赖一台操作系统相当纤薄并且几乎不需要重新启动的NAS。

+0

这一切都在亚马逊云上。目前还没有崩溃,到目前为止,但我并不感到非常高兴的事实,如果有曾经是其中之一,它将至少一个星期采取还原备份+随机特设Perl脚本,如果失败的话中途因任何原因。 – taw 2010-01-29 17:57:54

0

你需要数据库中的所有东西吗?

你可以把一些信息档案数据库,并添加东西到你的应用程序,可以让人们在存档查看记录,

显然,这取决于您的应用程序依赖大量而设置的,但它可能是一个解决方案?你的数据库很可能只会变得更大....

+0

从长远来看,这将是必要的修复它,但现在我只是想保持它的所有运行正常。 – taw 2010-01-29 17:51:34

1

不能使用mysqldump来备份大型数据库 - 200G是可行的,但更大的人也变得越来越坏。

最好的办法是把数据库目录的卷快照和zip这在某种程度上 - 这就是我们通常做 - 或rsync的别的地方。

如果你的文件系统或块设备不支持快照,那么你基本上有麻烦了。您可以关闭数据库进行备份,但我不认为您想这样做。

要恢复它,只需做相反的事情,然后重新启动并等待innodb恢复来解决问题(可能需要一些时间)。

的maatkit MK-平行转储和恢复工具有点比mysqldump的更好,速度明智的 - 但我不是100%确信自己正确性


编辑的:重新解读这个问题,我认为文件系统快照+ rsync可能是最好的方法;您可以在不影响实时系统的情况下执行此操作(只需要传输自上次备份以来更改的内容),并且如果连接失败,则可以恢复rsync,并且它会继续停止。

+0

有关于这方面的一个重要的一点是要确保你的备份文件ibdata(ibdata1中等等)在MySQL数据目录。这被innodb使用,如果没有它,备份将是错误的。 – 2017-05-06 08:43:46