导入大型mysql数据库备份的最快方法是什么?

时间:2009-04-26 01:08:21

标签: mysql backup database-backups

使用innodb表导出/导入mysql数据库的最快方法是什么?

我有一个生产数据库,我经常需要下载到我的开发机器来调试客户问题。我们目前这样做的方法是下载我们的常规数据库备份,这些备份是使用“mysql -B dbname”生成的,然后是gzip。然后我们使用“gunzip -c backup.gz | mysql -u root”导入它们。

从我从“mysqldump --help”读取的内容可以看出,mysqldump默认情况下会运行-opt,看起来它会打开一些我能想到的可以使导入更快的东西,比如关闭索引并将表导入为一个大量的导入语句。

有更好的方法可以做到这一点,还是我们应该做的进一步优化?

注意:我主要想要优化将数据库加载到我的开发机器上的时间(一个相对较新的macbook pro,有很多ram)。备份时间和网络传输时间目前不是大问题。

更新

回答答案中提出的一些问题:

  • 生产数据库架构每周最多更改几次。我们正在运行rails,因此在陈旧的生产数据上运行迁移脚本相对容易。

  • 我们需要每天或每小时将生产数据放入开发环境中。这完全取决于开发人员的工作内容。我们经常遇到特定的客户问题,这些问题是由于数据库中的许多表分布的数据,需要在开发环境中进行调试。

  • 老实说,我不知道mysqldump需要多长时间。不到2小时,因为我们目前每2小时运行一次。但是,这不是我们想要优化的,我们希望优化导入到开发人员工作站。

  • 我们不需要完整的生产数据库,但分离我们做什么和不需要的东西并不是完全无关紧要的(有很多表与外键关系)。这可能是我们最终要去的地方,但是如果可以的话,我们想要避免它更久。

2 个答案:

答案 0 :(得分:3)

这取决于你如何定义“最快”。

正如乔尔所说,开发时间很贵。 Mysqldump可以处理和处理您自己需要处理的大量案例,或者花时间评估其他产品以确定它们是否能够处理它们。

相关问题是:

您的生产数据库架构多久更改一次?

注意:我指的是添加,删除或重命名表,列,视图等,即会破坏实际代码的内容。

您需要多久将生产数据放入开发环境中?

根据我的经验,根本不常见。我一般都发现每月一次就足够了。

mysqldump需要多长时间?

如果不到8小时,可以在一夜之间完成cron工作。问题解决了。

您需要所有数据吗?

优化此方法的另一种方法是简单地获取相关的数据子集。当然,这需要编写自定义脚本以获取实体和所有相关相关实体的子集,但会产生最快的最终结果。该脚本还需要通过架构更改来维护,因此这是一个耗时的方法,应该用作绝对的最后手段。生产样本应足够大,以包含足够广泛的数据样本,并识别任何潜在的性能问题。

<强>结论

基本上,只要你绝对不能使用mysqldump。花时间在另一个解决方案上的时间不是花在开发上的时间。

答案 1 :(得分:2)

考虑使用复制。这将允许您实时更新您的副本,即使您必须关闭从属服务器,MySQL复制也可以进行追赶。您还可以在普通服务器上使用并行MySQL实例,该实例将数据复制到支持在线备份的MyISAM表。只要表具有相同的定义,MySQL就允许这样做。

另一个可能值得研究的选项是来自着名的MySQL性能专家Percona的XtraBackup。它是InnoDB的在线备份解决方案。但是,我自己没有看过它,所以我不会保证它的稳定性,或者它甚至可以解决你的问题。