如何在差异mysql数据库服务器上的两个数据库之间同步一个表的子集?

我有一个主要的MySQL数据库,其中一个车表中有以下列:

+---------------+-----------------+------+ |carId |name |model | +---------------+-----------------+------+ |1 |ford |focus | |2 |Toyota |Yaris | +---------------+-----------------+------+ 

这是我想要实现的:

我想在其他一些msql服务器中创build新的数据库,并想创build如上所述的同一个表,并且希望在新车表中添加以下列

 +---------------+-----------------+------------+-----------+------------+ |carId |name |model |make |workHistory | +---------------+-----------------+------------+-----------+------------+ |1 |ford |focus |2001 |yes | |2 |Toyota |Yaris |2002 |no | +---------------+-----------------+------------+-----------+------------+ 
  1. 我想要新的数据库表从主sql数据库车表中获取carIdnamemodel列的数据。 并且只想将列( makeworkHistory )的数据插入到新的数据库车表中。 所以这个新车表将结合来自主MySQL数据库和新数据库的数据。
  2. 如果主数据库车表有任何变化,我希望这些变化与新数据库中的车表同步。 例如,如果我们删除了主数据库车表中的ID,它也应该从新车表中删除。

这不是关于复制 – 只是使用一个额外的表:

 CREATE TABLE car_more ( carId INT NOT NULL, make INT, workHistory PRIMARY KEY (carId) ); 

如果引用的数据库(是指数据库还是表?)位于mysql的单独实例中,则使用联合引擎提供对现有表的远程访问。 那么你可以使用….访问数据

 SELECT a.carId, a.name, a.model, b.make, b.workHistory FROM car a LEFT JOIN car_more b ON (a.carId=b.carId); 

如果它们在同一个mysq实例上,那么只需在数据库名称前添加表名:

 SELECT a.carId, a.name, a.model, b.make, b.workHistory FROM maindb.car a LEFT JOIN alternatedb.car_more b ON (a.carId=b.carId); 

(你可以使用mysql的amster-master复制来维护汽车表的本地副本 – 但是这更复杂)

首先是数据库devise。 为什么只需workHistory数据库中的makeworkHistory列? 它看起来像他们是相关的,并在与其他列的数据一对一的关系。 从逻辑上说,这些数据属于一起…为什么要将它分开?

在数据库pipe理方面,更容易获得一个复制的所有数据的规范拷贝。

其次,你打算写入第二个数据库还是只读取它? 只读是更容易pipe理。


假设你想要一个只读的从站,按照正常的方式设置复制,并确保从站的权限只允许SELECT

如果您不想在主表中添加额外的列,请使用carIdmodelworkHistory创build第二个表,然后创build一个视图 ,将它们连接到carId


如果你想写奴隶,你将需要多主复制或类似的东西。 这更复杂。 如果这是你想要的,我会添加更多。