如何在两台服务器之间复制整个 MySQL 数据库?

如何在两台服务器之间复制整个 MySQL 数据库?

两台机器之间有很好的连接(MySQL 5.5.28):

mysqldump -u root -p'password' --all-databases | ssh root@SERVERNAME mysql -u root -p'password' --all-databases

所以据我所知,这个 oneliner 就像在服务器#A 上获取 MySQL 转储,然后将转储复制到服务器#B,然后“将其导入服务器#B”。

Q1:数据库中没有其他内容?这是最快的方法吗? :) 或者还有更快的吗?当这一切进行时,会出现什么问题吗?

Q2:如何测试服务器#B 上的发送是否完全成功?如何检查两个数据库是否“逐位”相同?

答案1

首先,您应该意识到使用哪种存储引擎非常重要。

假设您的两个 mysql 服务器具有相同的版本。然后您可以对 MyISAM 表使用 mysqlhotcopy。这应该非常快,但这种方法仅限于 MyISAM 表。因为 mysqlhotcopy 直接复制文件,所以如果两个数据库“逐位”相同,那么借助diff.

从5.5.5版本开始,INNODB是默认的存储引擎。如果你使用 INNODB 存储引擎,情况看起来会有所不同。在这种情况下,您将无法使用mysqlhotcopy,只剩下mysqldump.

如果您使用 . 则可能会出现一些问题mysqldump。例如,如果 server#A 上的数据库有一个不存在的表的视图,则 mysql 会尝试在管道右侧创建一个不存在的表的视图,但会失败。在这种情况下,您可以使用该选项来避免中止--force

mysql --force ...

我已经复制了整个 mysql 数据库,mysqldump并且比较了两台服务器的转储,发现转储仅在时间戳上有所不同。这可能是您的解决方案。

您还应该看看 的其他选项mysqldump。例如我想到

--add-drop-database
--add-drop-table
--single-transaction    ( for transactional tables only (like INNODB))

相关内容