SymmetricDS双向文件同步失败求助:客户端节点无法同步
SymmetricDS 双向文件同步故障排查与修复建议
针对你遇到的SymmetricDS 3.15.9双向文件同步卡住(仅主到客户端单向生效)的问题,结合你的配置和场景,以下是具体的排查与修复步骤:
1. 确认客户端节点的文件触发器配置已同步生效
- 登录客户端节点的PostgreSQL数据库,查询
sym_file_trigger表,确认sync_directory2这条记录是否存在。SymmetricDS的配置项(包括文件触发器)依赖数据库同步,如果server端的配置未同步到client,客户端无法启动文件监控。 - 查看客户端SymmetricDS日志文件(通常为
symmetric.log),搜索是否有Scanning directory相关日志,验证触发器是否已启动对目标目录的监控。
2. 补全双向路由的完整性配置
- 你已配置
client_2_server路由,但需确认server到client的文件触发器路由是否正常(即原单向同步的配置),两组路由需独立且无冲突。 - 检查
sym_file_trigger_router中的target_base_dir字段:你当前设置为空,需明确客户端同步到server的目标路径(例如server端的/filesync),或通过脚本动态适配。可修改before_copy_script为更明确的逻辑,比如:
先简化测试,排除脚本语法问题。targetBaseDir = "/filesync"
3. 排查文件系统权限问题
- 验证客户端SymmetricDS进程对监控目录(
/filesync)是否具备读写权限:文件创建/修改后,需能生成同步事件;无权限会导致事件无法触发。 - 验证server端目标目录对SymmetricDS进程是否具备写权限:若权限不足,客户端发送的文件会因无法写入而卡住,日志中会出现
Permission Denied类错误。
4. 检查同步事件与批次状态
- 在客户端数据库查询
sym_file_sync_event表,确认文件变化是否生成了同步事件;再查询sym_file_outgoing_batch表,查看待发送批次的状态:- 若状态为
READY:说明事件已生成但未发送,需检查客户端与server的网络连通性、节点组配置是否匹配。 - 若状态为
ERROR:查看错误详情,定位具体故障原因。
- 若状态为
- 在server端数据库查询
sym_file_incoming_batch表,确认是否收到客户端的文件批次,以及是否存在错误记录。
5. 适配版本差异(3.5示例 vs 3.15.9)
- 你参考的3.5版本示例在3.15.9中可能存在语法变化:比如
before_copy_script中的"需替换为实际双引号,或脚本变量引用逻辑调整。可先移除脚本,使用固定路径测试,确认同步逻辑正常后再添加动态路径配置。 - 验证
engine.getParameterService().getExternalId()在3.15.9中是否仍有效,可在日志中打印该变量值,确认是否获取到正确的节点标识。
6. 匹配Odoo实际附件存储路径
- 你提到Odoo附件存储在
./local路径,但当前文件触发器配置的base_dir为/filesync,需确保触发器监控的是Odoo实际的附件存储目录(例如/odoo/local),否则无法捕获文件变化事件。
内容的提问来源于stack exchange,提问作者Marck MR
相关产品推荐
相关产品推荐

