【问题标题】:What is the best way to replicate/copy a big mysql database复制/复制大型mysql数据库的最佳方法是什么
【发布时间】:2021-06-04 05:02:36
【问题描述】:

我们想在一个(一个)mysql 数据库的(副本)上运行 BI 分析。

目前我们每天都会得到一个完整的 mysql 转储文件,但是将这个文件导入我们的“BI”服务器最多需要 16 个小时。转储文件本身大约 9GB 大,产生 360 个表,总共 20GB(在磁盘上);最大的表文件 (.ibd) 约为 6GB。

我不是 mysql 专家,但我认为导入需要很长时间,因为转储文件只导入数据,并且数据库需要从头开始重新索引所有内容......(作为一个附带问题:任何想法可能关于如何改进导入?)我们一直在考虑为数据文件使用单独的 SSD,向服务器添加更多 RAM/CPU,但这并没有真正提高导入速度...

有没有办法获得源数据库的某种“快照”,以便可以按原样复制而不是导入? 我想到了一个包含所有 .ibd 文件(和其他必要文件)的 .zip 文件

【问题讨论】:

标签: mysql database-replication


【解决方案1】:

是的,导入大型 mysqldump 非常慢。转储文件包含索引的定义,但不包含索引存储本身。所以每次导入转储文件时都必须重建索引。

在我的公司,我们使用Percona XtraBackup

这是一个物理备份工具,这意味着结果不是必须导入的 SQL 转储文件。它只是复制 .ibd 文件和 iblog 文件来协调事务。 .ibd 文件包含数据行和索引。

我们使用此备份和恢复解决方案来克隆多达 100 倍于您的数据库的数据库。

Percona XtraBackup 是免费和开源的。

有一些注意事项:

  • 我上次检查时无法在 Windows 上运行(我已经好几年没检查过了,因为我不使用 Windows)。
  • 您可以在不中断源实例服务的情况下进行备份,但要“恢复”您需要关闭本地 MySQL 服务器,将备份复制到 datadir,然后重新启动 MySQL 服务器。
  • 几乎不可能只将一个数据库导入一个实例。换句话说,备份和恢复是针对完整实例的,包含所有表和模式。这将覆盖您在本地实例上的任何其他内容。而 mysqldump 更灵活,因为您可以只转储和导入一个表或一个模式,并且您可以导入到正在运行的 MySQL 服务器实例而无需停止它。

值得一提的是,如果你没有使用适当的备份工具,你不应该尝试对正在运行的 MySQL 服务器的 MySQL 数据目录进行 zip 归档。您几乎肯定会得到一份不一致的数据文件副本,这意味着它们将被损坏且不可恢复。

【讨论】:

    猜你喜欢
    • 2010-09-05
    • 2012-05-15
    • 2010-09-16
    • 2010-11-13
    • 2018-09-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-22
    • 1970-01-01
    相关资源
    最近更新 更多