You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SymmDS初始加载完成后重复建表致复制失败的解决咨询

解决SymmDS初始加载后重复创建表导致复制失败的问题

问题背景

使用SymmDS 3.15.6配置SQL Server到MySQL的复制,通过auto.reload=true和initial.load.create.first=true完成初始加载后,SymmDS反复尝试创建已存在的表,导致复制失败并产生日志错误。

之前的操作步骤:

  1. 创建Sym系统表
D:\replication\bin\symadmin --engine mssql-000 create-sym-tables
  1. 插入复制配置
insert into sym_node (node_id,node_group_id,external_id,sync_enabled,sync_url,schema_version,symmetric_version, database_type,database_version,batch_to_send_count, batch_in_error_count,created_at_node_id)
  values ('002','azure','002',1,null,null,null,null,null,0,0,'000');

insert into sym_node_security (node_id,node_password,registration_enabled,registration_time,initial_load_enabled,initial_load_time, created_at_node_id) 
values ('002','5d1c92bbacbe2edb9e1ca5dbb0e481',1,null,1,current_timestamp,'000');

insert into sym_node_group (node_group_id) values ('azure');
 
insert into sym_node_group_link (source_node_group_id, target_node_group_id, data_event_action) values ('mssql', 'azure', 'W');

insert into sym_channel (channel_id, processing_order, max_batch_size, enabled, description)  values('oe_transaction', 1, 100000, 1, 'convert transaction');

insert into sym_trigger (trigger_id, source_table_name, channel_id, last_update_time, create_time)  values ('mssql_outbound', '*','oe_transaction',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('mssql_2_azure', 'mssql', 'azure', 'default',current_timestamp, current_timestamp);

insert into sym_trigger_router  (trigger_id,router_id,initial_load_order,last_update_time,create_time)
values('mssql_outbound','mssql_2_azure', 100, current_timestamp, current_timestamp);
commit;

执行配置导入:

D:\replication\bin\dbimport --engine mssql-000 D:\replication\samples\insert_config_azure.sql
  1. 开启节点注册
D:\replication\bin\symadmin --engine mssql-000 open-registration mysql 001
  1. 启动SymmDS服务

问题根源

  • initial.load.create.first=true会触发SymmDS在初始加载阶段创建目标表;
  • 触发器配置中source_table_name='*'匹配所有表,包括已创建的业务表;
  • auto.reload=true触发配置重载时,SymmDS会再次执行表创建逻辑,与已存在的表冲突。

修复与恢复步骤

1. 调整触发器范围,排除重复创建

修改触发器配置,要么指定具体同步表,要么排除Sym系统表:

方式一:指定具体同步表

UPDATE sym_trigger 
SET source_table_name = '表名1,表名2,表名3' 
WHERE trigger_id = 'mssql_outbound';
COMMIT;

方式二:排除系统表(保留全表匹配但避免重复创建Sym表)

UPDATE sym_trigger 
SET exclude_table_name = 'sym_%' 
WHERE trigger_id = 'mssql_outbound';
COMMIT;

执行后刷新配置:

D:\replication\bin\symadmin --engine mssql-000 reload-config

2. 关闭目标节点的初始加载开关

更新节点安全配置,防止后续再次触发初始加载:

UPDATE sym_node_security 
SET initial_load_enabled = 0 
WHERE node_id = '002';
COMMIT;

3. 清理失败批次

查看所有错误批次:

D:\replication\bin\symadmin --engine mssql-000 list-batches --error

标记错误批次为完成状态:

D:\replication\bin\symadmin --engine mssql-000 mark-batch complete [失败批次ID]

4. 调整长期配置(可选)

在目标节点的symmetric.properties文件中修改参数,避免后续重复触发表创建:

# 初始加载完成后关闭自动创建表
initial.load.create.first=false

5. 重启SymmDS服务

停止源端和目标端的SymmDS进程,重新启动后验证复制是否正常运行。

内容的提问来源于stack exchange,提问作者Jeetendra Nigam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 02:06:02