这是我想要实现的目标
我如何实现这一点,因为现在我需要在每个数据库上手动运行查询,以保持结构同步,这不是一个好的选择。我想要自动化这个过程,所以任何人都可以帮助我。任何建议或链接到任何可以让我实现这一目标的教程非常感谢
答案 0 :(得分: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()。