2015-09-03 27 views
0

场景:我想将MySQL表从一个数据库复制到其他数据库。使用mysqldump从实时站点的其他数据库导入MySQL表可能会导致麻烦?

可能的最佳解决方案:可能是使用MySQL复制功能。 目前我正在作为解决方法(mysqldump)工作的解决方案,因为无法花时间了解当前最后期限的复制。

所以我目前使用的命令是这样的:

mysqldump -u user1 -ppassword1 --single-transaction SourceDb TblName | mysql -u user2 -ppassword2 DestinationDB 

基于一些测试,它似乎是工作的罚款。 在执行上述命令时,我运行了ab命令,并在目标站点上发出了1000个请求,并尝试从浏览器访问该站点。

我关心的是我们用整个表导入数据的目标实况站点(它将在内部删除现有的表格并使用新数据创建新的表格)。

我可以肯定,活动网站不会中断,而这个过程中还是有任何风险因素? 如果是,那么可以解决?

+0

您的意思是在讨论数据库时在同一台服务器上的模式,还是指的是不同的MySQL服务器? – Gruber

+0

现在,我看到了相同的MySQL服务器。将来,我可能会有更多的服务器。 –

+0

如果数据位于同一台服务器上,则可以直接从一个模式引用它们到另一个模式。那么,为什么你想模仿复制?如果您使用多台服务器,则可以使用'FEDERATED'数据引擎来避免重复数据。 – Gruber

回答

0

因此,您已经承认复制是最好的解决方案,我同意这一点。

你说你在“目的地”一边有1000个请求?这1000个目的地连接是只读的吗? 对于活动连接而言,正确删除和重新创建表格不是正确的选择。

可以提示一个改进。而不是直接加载到表,加载到不同的数据库和交换表。就目标数据库/表的连接而言,这应该更快。

  • 创建新表不同的数据库

mysqldump -u user1 -ppassword1 --single-transaction -hSOURCE_HOST SourceDb TblName | mysql -uuser2 -ppassword2 -hDESTINATION_HOST DB_New

(你确定你没有 “-H” 在这里?)

  • 交换表

rename table DB.TblName to DB.old_TblName, DB_New.new_TblName to DestinationDB.TblName;

如果你在同一个主机上(我不这么认为),你可能想使用pt-online-schema-change和swap表!

+0

- “这1000个目标连接是只读吗?” 你的意思是只读连接?我想,这就像模仿真正的用户从浏览器发出请求一样。 - 交换表是很好的选择。我也准备了这个解决方案。谢谢!但在我的测试中,我发现没有交换也能正常工作。所以想要确保mysqldump实用程序在内部管理这种情况。 - 数据库现在在同一主机上。我不知道pt-online-schema-change,但我们不打算改变模式,只会改变数据。 –