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

分布式rebar3应用Mnesia同步遇inconsistent_database错误求助

解决Mnesia节点同步的inconsistent_database错误

第一步:彻底统一节点Cookie

Cookie是Erlang节点通信的核心验证机制,细微差异会直接导致节点无法正常协作:

  • 在两个节点的Erlang shell中执行erlang:get_cookie().,输出的原子值必须完全一致(包括大小写、特殊字符、无多余空格)
  • 临时修正:在不一致的节点执行erlang:set_cookie(node(), '你的目标Cookie').(注意Cookie是原子类型,需用单引号包裹)
  • 永久生效:在rebar3应用的vm.args文件中添加-setcookie 你的目标Cookie,确保两个节点启动参数完全相同

第二步:修复网络分区并重新同步Mnesia

  1. 先停止从节点(node2@pc2)的Mnesia服务:
    mnesia:stop().
    
  2. 验证节点连通性:在主节点(node1@pc1)执行net_adm:ping('node2@pc2').,必须返回pong(若返回pang,先排查防火墙、hostname解析问题)
  3. 启动从节点Mnesia并同步:
    • 在主节点执行,将从节点加入集群:
      mnesia:change_config(extra_db_nodes, ['node2@pc2']).
      
    • 在从节点执行,设置schema的副本类型(按需选择disc_copies磁盘备份或ram_copies内存备份):
      mnesia:change_table_copy_type(schema, node(), disc_copies).
      
    • 等待所有表同步完成:
      mnesia:wait_for_tables(mnesia:system_info(tables), 30000).
      

第三步:验证同步效果

  • 在从节点执行mnesia:table_info(你的表名, disc_copies).,确认当前节点已被列为副本节点
  • 在主节点插入测试数据,从节点查询验证是否同步成功

注意事项

  • 确保两个节点的Mnesia表结构、schema完全一致,无任何差异
  • 若之前出现过多次分区错误,建议清理节点的Mnesia数据目录(默认路径_build/default/rel/你的应用/data/mnesia)后重新同步

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 18:01:18