SET @event_start_timestamp = CURRENT_TIMESTAMP;
INSERT localDB.local_table ( {columns} )
SELECT {columns}
FROM serviceDB.federated_table
WHERE must_be_transferred
AND created_at < @event_start_timestamp;
UPDATE serviceDB.federated_table
SET must_be_transferred = FALSE
WHERE must_be_transferred
AND created_at < @event_start_timestamp;
1条答案
按热度按时间bgibtngc1#
这些部分同步必须使用专门创建的方案来执行。
可能实现:
1.测试您的服务器示例是否支持The FEDERATED Storage Engine。默认情况下允许此操作。
1.测试目标服务器是否可以使用CREATE SERVER访问存储在源服务器上的数据。
创建连接到远程源服务器和所需远程数据库服务器请检查远程数据是否可访问
1.在目标服务器上创建一个每20秒执行一次的事件过程(首先将其禁用)。我建议您在单独的服务数据库中创建它。在此事件过程中执行如下查询
目的服务器将相应得SELECT查询发送到远程源服务器.它执行此查询并将输出发送回.插入接收到得行.然后目的服务器发送删除标志得UPDATE.
1.启用事件调度程序。
1.启用事件过程。
确保事件过程执行得足够快。它必须在下一次触发之前完成其工作。即,将代码作为常规存储过程执行,并检查其执行时间。也许您会增加调度规则时间。
您可以使用在您的服务数据库中创建的一些服务表中的静态标志来排除此类并行触发。如果设置了该标志(前一事件尚未完成其工作),则事件过程将退出。我建议您在任何情况下都执行此检查。
您必须处理下一种情况:
可能的解决方案。
标志
must_be_transferred
不应是布尔值,而应是(无符号微小)整数,其值如下:0 -同步时不需要; 1 -需要同步; 2 -选择用于复制,3 -选择用于复制,但在选择后改变。算法:
2
;flag OR 2
(或flag IN (2,3)
)复制行;flag XOR 2
及以上条件清除标志。flag OR 1
根据需要同步标记更改的行。