复制/复制大型 mysql 数据库的最佳方法是什么

时间:2021-06-03 19:09:45

标签: mysql database-replication

我们希望在(一个)mysql 数据库上运行 BI 分析。

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

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

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

1 个答案:

答案 0 :(得分:1)

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

在我公司,我们使用 Percona XtraBackup

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

我们使用这种备份和恢复解决方案来克隆比您的数据库大 100 倍的数据库。

Percona XtraBackup 是免费和开源的。

有一些注意事项:

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

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

相关问题