2016-08-24 86 views
0

有没有人用SymmetricDS实现过双向配置?如何在SymmetricDS中配置双向同步?

有很多事情来配置,我得到了大部分:

server.properties:

#XXXXXXX nombre de la cabana 
#SSSSSSS ip del servidor 

engine.name=XXXXXXXXXXX 

# The class name for the JDBC Driver 
db.driver=com.mysql.jdbc.Driver 
# The JDBC URL used to connect to the database 
db.url=jdbc:mysql://localhost/HutteBullen_XXXXXXXXXXX? tinyInt1isBit=false 
# The user to login as who can create and update tables 
db.user=aDDD 
# The password for the user to login as 
db.password=CC 
registration.url=http://SSSSSSS:31415/sync/XXXXXXXXXXX 
sync.url=http://SSSSSSS:31415/sync/XXXXXXXXXXX 
# Do not change these for running the demo 
group.id=server 
external.id=000 
initial.load.create.first=true 
auto.registration = true 
auto.reload = true 
create.table.without.foreign.keys=true 

客户端嵌入式HSQL

client.properties(生成的代码) :

Properties props = new Properties(); 
      props.setProperty("engine.name", "cabana-" + args[0]); 
      props.setProperty("db.driver", "org.hsqldb.jdbcDriver"); 
      props.setProperty("db.user", args[1]); 
      props.setProperty("db.password", args[2]); 
      props.setProperty("registration.url", "http://" + args[4] + ":31415/sync/" + args[5]); 
      props.setProperty("group.id", "cabana"); 
      props.setProperty("external.id", args[0]); 
      props.setProperty("job.routing.period.time.ms", "5000"); 
      props.setProperty("job.push.period.time.ms", "10000"); 
      props.setProperty("job.pull.period.time.ms", "10000"); 
      props.setProperty("job.heartbeat.period.time.ms", "15000"); 

      props.setProperty("intial.load.create.first", "true"); 
      props.setProperty("create.table.without.foreign.keys", "true"); 
      props.setProperty("create.table.without.defaults", "true"); 

触发器:

insert into sym_trigger (trigger_id,source_table_name, channel_id, last_update_time,create_time, sync_on_incoming_batch) 
values('TriggerAll', '*', 'transaction', current_timestamp, current_timestamp,1); 
insert into sym_trigger_router (trigger_id,router_id,initial_load_order,last_update_time,create_time) 
values('TriggerAll','server_2_cabana', 100, current_timestamp,current_timestamp); 
insert into sym_trigger_router (trigger_id,router_id,initial_load_order,last_update_time,create_time) 
values('TriggerAll','cabana_2_server', 200, current_timestamp, current_timestamp); 

,然后这个问题,sym_conflict(服务器):

insert into sym_conflict (conflict_id, target_channel_id, source_node_group_id, target_node_group_id, detect_type, detect_expression, resolve_type,ping_back, resolve_changes_only, resolve_row_only, create_time, last_update_time) 
values ('Conflict-Server-Cabana', 'transaction', 'server', 'cabana', 'USE_TIMESTAMP', 'LASTMODIFIEDUTCDATETIME', 'NEWER_WINS', 'REMAINING_ROWS', 0, 1, current_timestamp, current_timestamp); 
insert into sym_conflict (conflict_id, target_channel_id, source_node_group_id, target_node_group_id, detect_type, detect_expression, resolve_type,ping_back, resolve_changes_only, resolve_row_only, create_time, last_update_time) 
values ('Conflict-Cabana-Server', 'transaction', 'cabana', 'server', 'USE_TIMESTAMP', 'LASTMODIFIEDUTCDATETIME', 'NEWER_WINS', 'REMAINING_ROWS', 0, 1, current_timestamp, current_timestamp); 

最大的问题是下一个: 我有一个星形拓扑结构同步多个节点。所有这些都以双向方式同步。它们都具有相同的模式,并且应该具有完全相同的数据。

插入和更新与上面的配置正常工作。问题是删除。我是节点1,我创建了一行,然后将它同步到中央服务器,然后同步到节点2。然后节点2决定删除这一行,它会在节点2上被删除,然后在服务器上被删除,但不会在创建该行的节点上被删除,我不知道为什么。它不保持一致。

有人用SymmetricDS实现完全双向复制吗?

+0

在解释是否有'sym_data'用于与中央节点上'table_name'表'pk_data'标识的行,什么? –

回答

0
+0

我已经设置了该变量。我编辑了我的答案,并添加了我为所有表格创建的触发器。 –

+0

你是否声明“on delete”触发器? –

+0

为每个表创建触发器是由Symmetric自动生成的。插入后,更新后和删除后由引擎创建。显示的SQL命令是要设置的配置触发。 '*'表示这将为所有表创建所有触发器。 –