3

我有 200GB / 400Mrows mysql/innodb 数据库——远远超出了我发现的合理范围。

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

更糟糕的是 - 我希望能得到一些帮助 - 在一周的时间段内传输 > 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/'

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

4

3 回答 3

1

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

您最好的选择是获取数据库目录的卷快照并以某种方式将其压缩 - 这就是我们通常所做的 - 或者在其他地方同步它。

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

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

maatkit mk-parallel-dump 和恢复工具在速度方面比 mysqldump 好一点 - 但我不是 100% 相信它们的正确性


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

于 2010-01-30T08:06:38.947 回答
1

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

于 2010-01-29T17:20:31.507 回答
0

您需要数据库中的所有内容吗?

您能否将一些信息推送到存档数据库并在您的应用程序中添加一些内容,以便人们查看存档中的记录,

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

于 2010-01-29T17:24:24.670 回答