MySQL数据库复制

4
这是一个场景:
1. 我有一个MySQL服务器,其中有一个数据库,我们称之为consolidateddb。这个数据库是来自各个数据库的多个表的合并。 2. 我有另一个MySQL服务器,其中包含原始数据库,这些数据库是生产数据库,并且每天都会更新。 3. 公司希望将每个生产数据库中每个表的每个更新/插入/删除复制到consolidateddb中的相应表格中。
那么,复制是否可以实现这一点?我知道复制是在数据库与数据库之间进行的,但不是在属于不同数据库的表格之间进行到单个目标数据库。
我希望我的解释很清楚。谢谢。
编辑:递归复制每个数据库中的所有表格到单个从服务器上是否可行?或者这是一个丑陋的解决方案吗?

合并数据库为什么不直接将所有内容存储在从服务器的各个数据库中? - lsl
7个回答

12

为了澄清一些事情,让我们按照当前mysql的惯例进行命名。一个数据库是一个数据库服务器。一个模式是一个数据库实例。一个数据库服务器可以有多个模式。表存在于模式中。

如果您想要复制在主/生产服务器上定义的模式或表,则可以使用复制。复制通过传输运行在主服务器上的所有SQL语句的二进制日志到从服务器来工作,从服务器会如实地按顺序运行它们。

您可以选择复制所有数据,也可以选择某些模式或甚至仅选择某些表。

您无法选择来自不同模式的表并将它们复制到一个模式中,因为表属于特定的模式。

顺便说一下,重要通知。复制服务器不能成为多个主服务器的从服务器。您可以使用联合表来模仿这种情况,但那只会将数据显示在一个服务器上,而不会将数据复制到聚合服务器上。

复制的好处是,您的聚合服务器几乎一直拥有最新的数据。


2
你可以从每个主服务器获取二进制日志,使用mysqlbinlog解析这些日志,然后将其运行到汇总机器上。大致如下:
mysqlbinlog [binary log files] | mysql -h consolidated

你需要一种简单的应用程序(我猜如果你需要的话可以用bash完成)来包装这个逻辑。

0

你好,相反的情况是重新表述:将不同主数据库复制到一个从库中,该从库包含不同主数据库中的所有表。别问我为什么,我只是继承了这个怪胎。 - Moutaz

0

MySQL基于语句的复制(基本复制)通过在从服务器上运行与主服务器上运行的完全相同的语句来工作。这包括有关表所在数据库的信息。

我认为MySQL没有提供任何内置方法来在数据库之间移动复制语句(即“insert into db1.table1 ...” ->“insert into db2.table1”)。您可以通过手动更改复制日志来欺骗它,但这不会是MySQL复制的正常操作。


0

0
你可能想要查看maatkit工具包。它是一个免费下载的工具包,拥有许多专门优化诸如归档表之类的工具。我曾在过去的项目中使用它来将某些数据复制到另一个数据库等。您可以根据时间或任何其他因素进行操作。

0
据我所知,您可以设置复制(MySQL 4+),并在my.cnf文件中使从节点只处理某些表格或仅记录主节点的某些表格,无论哪种方式都可以解决您的问题。
以下是一些技术指南:

http://www.onlamp.com/pub/a/onlamp/2006/04/20/advanced-mysql-replication.html

我在复制设置方面几乎没有什么问题,所有的问题都出现在尝试同步数据库之后,特别是在重新启动后。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接