【问题标题】:Fastest method of producing a copy of a MySQL database生成 MySQL 数据库副本的最快方法
【发布时间】:2012-08-28 09:18:31
【问题描述】:

我们有一个非常大的数据库,我们需要偶尔在我们的 dev+staging 机器上复制它。

目前我们使用mysqldump,然后使用“mysql -u xx -p dbname

如果不需要 2 天就可以完成!

是否可以简单地将整个数据库作为文件从一台服务器复制到另一台服务器并跳过整个导出/导入废话?

干杯

【问题讨论】:

    标签: mysql replicate


    【解决方案1】:

    有两种解决方案:

    • 拥有一个单独的复制从站,您可以随时停止并进行文件级备份
    • 如果您使用 innodb 引擎 - 您可以使用 file system level snapshot [例如使用 lvm],然后将文件复制到您的测试环境中
    • 如果您有大量表/数据库 - 您可以并行转储和恢复过程以加快速度。

    【讨论】:

      【解决方案2】:

      我在可以运行脚本、访问源和目标以及有足够空间为任务准备数据方面有很多限制。

      我从托管服务提供商处获得了我的压缩数据库转储。
      我拆分了解压缩的命令,所以INSERT INTO 行被放入一个文件中,而所有其他行进入第二个文件。

      然后我从第二个创建数据库结构。
      我将 INSERT INTO 语句转换为与表相关的 CSV 文件。
      最后,我并行上传 csv 文件(最多同时上传 50 个表),这样在 3 小时内克隆了 130GB 的文本文件转储,而不是使用逐语句方法时需要 17 小时。

      在 3 小时内,我包括:

      • 副本超过(10 分钟),
      • 健全性检查(10 分钟)和
      • 过滤日志(10 分钟),因为日志条目只需要来自最近一学年。

      远程压缩文件大小在 7GB 到 13GB 之间,通过 40MBps 的线路传输。
      通过 40MBps 线路上传到远程服务器。

      如果你的mysql服务器在本地,上传速度会更快。

      如果可用,我会使用 scp、gzip、zgrep、sed、awk、ps、mysqlimport、mysql 和其他一些实用程序来加速解压缩和过滤(pv、rg、pigz)。

      如果我可以直接访问数据库服务器,那么具有文件夹级别快照功能的 LVM 将是首选解决方案,它的速度仅受媒体复制速度的限制。

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多