使用innodb表导出/导入mysql数据库的最快方法是什么?
我有一个生产数据库,我经常需要下载到我的开发机器来调试客户问题。我们目前这样做的方法是下载我们的常规数据库备份,这些备份是使用“mysql -B dbname”生成的,然后是gzip。然后我们使用“gunzip -c backup.gz | mysql -u root”导入它们。
从我从“mysqldump --help”读取的内容可以看出,mysqldump默认情况下会运行-opt,看起来它会打开一些我能想到的可以使导入更快的东西,比如关闭索引并将表导入为一个大量的导入语句。
有更好的方法可以做到这一点,还是我们应该做的进一步优化?
注意:我主要想要优化将数据库加载到我的开发机器上的时间(一个相对较新的macbook pro,有很多ram)。备份时间和网络传输时间目前不是大问题。
更新
回答答案中提出的一些问题:
生产数据库架构每周最多更改几次。我们正在运行rails,因此在陈旧的生产数据上运行迁移脚本相对容易。
我们需要每天或每小时将生产数据放入开发环境中。这完全取决于开发人员的工作内容。我们经常遇到特定的客户问题,这些问题是由于数据库中的许多表分布的数据,需要在开发环境中进行调试。
老实说,我不知道mysqldump需要多长时间。不到2小时,因为我们目前每2小时运行一次。但是,这不是我们想要优化的,我们希望优化导入到开发人员工作站。
我们不需要完整的生产数据库,但分离我们做什么和不需要的东西并不是完全无关紧要的(有很多表与外键关系)。这可能是我们最终要去的地方,但是如果可以的话,我们想要避免它更久。
答案 0 :(得分:3)
这取决于你如何定义“最快”。
正如乔尔所说,开发时间很贵。 Mysqldump可以处理和处理您自己需要处理的大量案例,或者花时间评估其他产品以确定它们是否能够处理它们。
相关问题是:
您的生产数据库架构多久更改一次?
注意:我指的是添加,删除或重命名表,列,视图等,即会破坏实际代码的内容。
您需要多久将生产数据放入开发环境中?
根据我的经验,根本不常见。我一般都发现每月一次就足够了。
mysqldump需要多长时间?
如果不到8小时,可以在一夜之间完成cron工作。问题解决了。
您需要所有数据吗?
优化此方法的另一种方法是简单地获取相关的数据子集。当然,这需要编写自定义脚本以获取实体和所有相关相关实体的子集,但会产生最快的最终结果。该脚本还需要通过架构更改来维护,因此这是一个耗时的方法,应该用作绝对的最后手段。生产样本应足够大,以包含足够广泛的数据样本,并识别任何潜在的性能问题。
<强>结论强>
基本上,只要你绝对不能使用mysqldump。花时间在另一个解决方案上的时间不是花在开发上的时间。
答案 1 :(得分:2)
考虑使用复制。这将允许您实时更新您的副本,即使您必须关闭从属服务器,MySQL复制也可以进行追赶。您还可以在普通服务器上使用并行MySQL实例,该实例将数据复制到支持在线备份的MyISAM表。只要表具有相同的定义,MySQL就允许这样做。
另一个可能值得研究的选项是来自着名的MySQL性能专家Percona的XtraBackup。它是InnoDB的在线备份解决方案。但是,我自己没有看过它,所以我不会保证它的稳定性,或者它甚至可以解决你的问题。