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

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

从阅读“mysqldump --help”可以看出,mysqldump默认运行 --opt ,看起来它打开了一堆我能想到的可以使导入更快的东西,例如关闭索引并将表作为一个庞大的导入语句导入。

有没有更好的方法来做到这一点,或者我们应该做进一步的优化?

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

更新:

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

  • 生产数据库架构每周最多更改几次。我们正在运行 rails,因此在陈旧的生产数据上运行迁移脚本相对容易。
  • 我们需要每天或每小时将生产数据放入开发环境。这完全取决于开发人员正在做什么。我们经常遇到特定的客户问题,这是由于某些数据分布在数据库中的多个表中而导致的,需要在开发环境中进行调试。
  • 老实说,我不知道 mysqldump 需要多长时间。不到 2 小时,因为我们目前每 2 小时运行一次。然而,这不是我们想要优化的,我们想要优化到开发人员工作站的导入。
  • 我们不需要完整的生产数据库,但是将我们做的和不需要的分开并不是一件容易的事(有很多表有外键关系)。这可能是我们最终不得不去的地方,但如果可以的话,我们希望避免它更长的时间。
  • 最佳答案

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

    正如乔尔所说,开发人员的时间很昂贵。 Mysqldump 可以工作并处理很多情况,否则您必须自己处理或花时间评估其他产品以查看它们是否处理它们。

    相关问题是:

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

    注意: 我指的是添加、删除或重命名表、列、 View 等,即会破坏实际代码的东西。

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

    根据我的经验,根本不经常。我通常发现一个月一次就足够了。

    mysqldump 需要多长时间?

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

    您需要所有数据吗?

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

    结论

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

    关于mysql - 导入大型mysql数据库备份的最快方法是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/790055/

    10-13 08:14
    查看更多