Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
复制/复制大型mysql数据库的最佳方式是什么_Mysql_Database Replication - Fatal编程技术网

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

复制/复制大型mysql数据库的最佳方式是什么,mysql,database-replication,Mysql,Database Replication,我们希望在mysql数据库(副本)上运行BI分析 目前,我们每天都会得到一个完整的mysql转储文件,但将该文件导入到“BI”服务器需要16个小时。转储文件本身大约9GB大,导致360个表的总容量为20GB(在磁盘上);最大的表文件(.ibd)约为6GB 我不是mysql专家,但我认为导入需要很多时间,因为转储文件只导入数据,数据库需要从头开始重新索引所有内容…(附带问题:有没有关于如何改进导入的想法?),但这并不能真正提高导入速度 有没有一种方法可以对源数据库进行某种形式的“快照”,以便它可以

我们希望在mysql数据库(副本)上运行BI分析

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

我不是mysql专家,但我认为导入需要很多时间,因为转储文件只导入数据,数据库需要从头开始重新索引所有内容…(附带问题:有没有关于如何改进导入的想法?),但这并不能真正提高导入速度

有没有一种方法可以对源数据库进行某种形式的“快照”,以便它可以按原样复制而不是导入?
我考虑一个包含所有.ibd文件(以及其他必要文件)的.zip文件。

是的,导入一个大型mysqldump是出了名的慢。转储文件包含索引的定义,但不包含索引存储本身。因此,每次导入转储文件时都必须重新生成索引

在我的公司,我们使用

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

我们使用此备份和恢复解决方案来克隆数据库,最大可达您的100倍

Percona XtraBackup是免费的、开源的

有几点需要注意:

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

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

有一个完整的网站专门解决这类问题: