SymmetricDS 只同步一种方式

Posted

技术标签:

【中文标题】SymmetricDS 只同步一种方式【英文标题】:SymmetricDS only synchronizes one way 【发布时间】:2020-05-31 22:39:06 【问题描述】:

同步只适用于从客户端到服务器,与配置无关

--------------------------------------------------------------------------
-- Node Groups
------------------------------------------------------------------------------
insert into sym_node_group (node_group_id) values ('client');

------------------------------------------------------------------------------
-- Node Group Links
------------------------------------------------------------------------------

-- server sends changes to client when client pulls from server
insert into sym_node_group_link (source_node_group_id, target_node_group_id, data_event_action, is_reversible)
 values ('server', 'client', 'W', 1);

-- client sends changes to server when client pushes to server
insert into sym_node_group_link (source_node_group_id, target_node_group_id, data_event_action, is_reversible)
 values ('client', 'server', 'P', 1);


------------------------------------------------------------------------------
-- Channels
------------------------------------------------------------------------------
insert into sym_channel
(channel_id, processing_order, max_batch_size, enabled, description)
values('XXX', 1, 100000, 1, 'Everything');
 ------------------------------------------------------------------------------
-- Routers
------------------------------------------------------------------------------
    insert into sym_router
   (router_id,source_node_group_id,target_node_group_id,router_type,create_time,last_update_time)
    values('server_2_client', 'server', 'client', 'default',current_timestamp, current_timestamp);


insert into sym_router
(router_id,source_node_group_id,target_node_group_id,router_type,create_time,last_update_time)
values('client_2_server', 'client', 'server', 'default',current_timestamp, current_timestamp);
     ------------------------------------------------------------------------------
-- Triggers
------------------------------------------------------------------------------
insert into SYM_TRIGGER (trigger_id, source_table_name,
          channel_id, last_update_time, create_time)
                  values ('client_2_server', '*', 'XXX', current_timestamp, current_timestamp);
insert into SYM_TRIGGER (trigger_id, source_table_name,
          channel_id, last_update_time, create_time)
                  values ('server_2_client', '*', 'XXX', current_timestamp, current_timestamp);
     ------------------------------------------------------------------------------
-- SYM_TRIGGER_ROUTER
------------------------------------------------------------------------------
insert into SYM_TRIGGER_ROUTER (trigger_id, router_id, initial_load_order, create_time, last_update_time)
values ('client_2_server', 'client_2_server', 100, current_timestamp, current_timestamp);
insert into SYM_TRIGGER_ROUTER (trigger_id, router_id, initial_load_order, create_time, last_update_time)
values ('server_2_client', 'server_2_client', 200, current_timestamp, current_timestamp);

【问题讨论】:

你试过is_reversible等于0吗? 我有一个猜测,但我不知道为什么,触发器根本没有为服务器创建。客户端根据以下内容创建所有触发器:插入 SYM_TRIGGER (trigger_id, source_table_name, channel_id, last_update_time, create_time) values ('client_2_server', '*', 'XXX', current_timestamp, current_timestamp);配置,但是当服务器启动时它不会运行配置。这是一种让它刷新的方法吗?我已将 start.refresh.cache.job=true 设置为 true。 服务器数据库中的任何表上是否创建了任何触发器? 是的,仅适用于 sym 表。 是一种强制创建触发器的方法吗?使用脚本将其插入服务器数据库后,不会读取。是否有可能检测到 condig 已更改? 【参考方案1】:

您缺少插入 sym_node_group 的内容(除非您的帖子中有复制粘贴错误):

insert into sym_node_group (node_group_id) values ('server');

此外,将 sym_node_group_link 行的 is_reversible 设置为 0。这是您不需要的实验性功能。要获得双向复制,您只需要在每个方向上都有一个组链接,而您已经拥有了。

【讨论】:

服务器是默认创建的,它就在那里。问题是 SymmetricDS 启动的服务器已启动。我添加了未创建的配置。然后它没有重新同步。我需要从代码中调用 synctriggers(),然后它创建了丢失的表。【参考方案2】:

因为我的配置是在 SymetricEngine 启动后添加的(它是通过 Flyway 插入到数据库中的)

我需要手动触发同步。

ServerSymmetricEngine serverEngine = new ServerSymmetricEngine(new File(url.getPath()));
serverEngine.setDeploymentType("server");
serverEngine.setup();
serverEngine.start();
// Here was the script inserts by flyway
serverEngine.syncTriggers();

【讨论】:

以上是关于SymmetricDS 只同步一种方式的主要内容,如果未能解决你的问题,请参考以下文章

SymmetricDS 完全配置安装手册

更新由 symmetricds 同步的表

多种数据库之间的同步工具SymmetricDS

基于SymmetricDS的多主一从数据库同步方案

SymmetricDS:保持单独的自动增量计数器

如何在 symmetricDS 社区版运行时动态添加引擎