4

这是我想要实现的目标

  1. 我想建立一个只保存表结构而没有数据的主数据库。
  2. 从属数据库将采用主数据库的结构。只有从数据库将包含数据
  3. 主数据库上的任何结构更改(例如更改表、删除表等)都应更新到从数据库,而不会丢失数据

我该如何实现这一点,因为现在我需要在每个数据库上手动运行查询,以保持结构同步,这不是一个好的选择。我想自动化这个过程,以便任何可以帮助我的人。非常感谢任何可以让我实现这一目标的建议或任何教程的链接

4

1 回答 1

1

它实际上无法完成,但是您可以通过某种方式破解。首先设置普通的从站。同步后,它们将具有与单个主控相同的架构。现在的诀窍是在主服务器上进行查询,这些查询传播到从服务器,但不要在主服务器上留下数据。首先像往常一样进行查询,确保每个表都有一个自动增量键:

INSERT INTO tbl (col1, col2, col3) VALUES (val1, val2, val3);
SELECT LAST_INSERT_ID();

当您进行查询时,记录时间,并将最后一个插入 id 保存在应用程序级别的队列中。间歇性地在从站上进行查询(例如,10 秒,具体取决于您的负载):

SHOW SLAVE STATUS;

并从当前系统时间中减去 Seconds_Behind_Master 值(调用此时间 t1)。现在遍历旧查询队列,只要该元素上的时间大于 t1,就删除第一个元素。每次删除队列中的元素时,您都希望从主服务器中删除该记录,但将其保留在从服务器上(您已经知道它是因为自从您进行所述查询以来它们已经更新)。所以现在清除主数据库(在给定时间将有大约 10 秒的数据)而不清除从属数据库:

SET sql_log_bin=0;
DELETE FROM tbl WHERE autoincrement_key=last_insert_id;
SET sql_log_bin=1;

其中 last_insert_id 是存储的 LAST_INSERT_ID() 以供查询清除。

于 2012-09-09T08:33:17.550 回答