【问题标题】:What's the fastest way to import a large mysql database backup?导入大型mysql数据库备份的最快方法是什么?
【发布时间】:2009-04-26 01:08:21
【问题描述】:

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

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

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

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

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

更新:

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

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

  • 我们可能需要每天或每小时将生产数据放入开发环境。这完全取决于开发人员正在做什么。我们经常遇到特定的客户问题,这些问题是由于某些数据分布在数据库中的多个表中而导致的,需要在开发环境中进行调试。

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

  • 我们不需要完整的生产数据库,但是将我们需要和不需要的东西分开并不是一件容易的事(有很多表具有外键关系)。这可能是我们最终必须要去的地方,但如果可以的话,我们想避免它更长一点。

【问题讨论】:

    标签: mysql backup database-backups


    【解决方案1】:

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

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

    相关问题是:

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

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

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

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

    mysqldump 需要多长时间?

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

    您需要所有数据吗?

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

    结论

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

    【讨论】:

    • 我回答了您的问题作为对我的问题的修改。你提出了一些好的观点。我没有放弃 mysqldump,我更想知道是否有一种方法可以优化它,而不仅仅是使用默认值,考虑到我的情况(优化导入速度)。
    【解决方案2】:

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

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

    【讨论】:

    • 这种场景下复制的问题是开发通常会改变dev数据库。恕我直言,完整的转储是合适的解决方案。
    猜你喜欢
    • 2022-11-11
    • 1970-01-01
    • 2014-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-20
    • 2011-02-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多