4

这是场景:

  1. 我有一个带有数据库的 MySQL 服务器,我们称它为soliddb。这个数据库是来自不同数据库的几个表的合并
  2. 我有另一个 MySQL 服务器,带有原始数据库,这些数据库是生产数据库,并且每天都在更新。
  3. 该公司希望将生产数据库中每个表上的每个更新/插入/删除复制到统一数据库中的相应表中。

复制能做到这一点吗?我知道复制是在数据库到数据库上完成的,而不是在属于不同数据库的表上复制到一个目标数据库。

我希望我的解释很清楚。谢谢。

编辑:将每个数据库中所有表的递归副本复制到单个从站工作吗?或者它是一个丑陋的解决方案?

4

7 回答 7

12

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

如果您想复制在主/生产服务器上定义的模式或表,复制将帮助您。复制通过将在主服务器上运行的所有 sql 语句的二进制日志传送到从服务器,从服务器忠实地运行它们,就好像它们在自身上按顺序运行一样。

您可以选择复制所有数据,或者您可以选择一些模式甚至只是一些表。

您不能从不同的模式中选择表并将它们复制到一个模式中,一张表属于特定的模式。

顺便说一句,重要通知。复制服务器不能成为多个主服务器的从服务器。您可以使用联合表来模拟这一点,但这永远不会将数据复制到整合服务器,只是将它们显示为好像来自不同服务器的数据在一台服务器上一样。

复制的好处是您的整合服务器将或多或少一直更新数据。

于 2009-04-30T19:54:54.787 回答
2

您可以从每个主服务器获取二进制日志,对其进行解析mysqlbinlog,然后将其运行到整合的机器中。

非常近似的东西:

mysqlbinlog [binary log files] | mysql -h consolidated

你需要某种简单的应用程序(我怀疑如果你需要它可以在 bash 中完成)来包装逻辑。

于 2009-05-06T17:07:25.233 回答
0

查看将不同的数据库复制到不同的从站,看看它是否对您有任何帮助。

于 2009-04-27T12:21:23.937 回答
0

您也许可以使用MySQL Proxy来完成它

于 2009-04-28T05:23:41.343 回答
0

据我所知,您可以设置复制(MySQL 4+)并在 my.cnf 文件中让从属服务器仅处理某些表或让主服务器仅记录某些表,无论哪种方式都可以解决您的问题。

以下是一些技术的指南:

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

我的复制设置问题很少,我所有的问题都来自尝试同步数据库,尤其是在重新启动等之后。

于 2009-04-30T13:23:50.500 回答
0

您可能想查看maatkit工具包。它是免费下载的,并且有许多专门用于优化存档表等工具的工具。我在过去的项目中使用它来将某些数据复制到另一个数据库等。你可以根据时间或任何其他数量的因素来做。

于 2009-04-29T14:15:48.420 回答
0

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

我不认为 MySQL 提供任何内置方式来在数据库之间移动复制语句(即“插入 db1.table1 ...”->“插入 db2.table1”)。您可以通过即时手动更改复制日志来欺骗它,但它不会是现成的 MySQL 复制。

于 2009-04-27T12:44:28.890 回答