Neo4j Community 4.0.2意外停止后无法启动,令牌异常报错
问题描述
- 运行环境:AWS EC2 Ubuntu 16.04 实例,Neo4j 4.0.2 Community 版本
- 问题现象:原本正常运行的Neo4j实例意外停止后无法重启,创建全新EC2实例并用
neo4j-admin工具恢复数据后,问题依然存在 - Debug.log核心错误信息:
2022-08-25 17:29:52.209+0000 WARN [o.n.k.d.Database] [neo4j] Exception occurred while starting the database. Trying to stop already started components. Component 'org.neo4j.internal.recordstorage.RecordStorageEngine$2@668d9b0' failed to initialize. Please see the attached cause exception "Internal token for id 9 not found, but a public token exists on that id: NamedToken[name:account_id, id:9, internal:false].". ... Caused by: org.neo4j.token.api.TokenNotFoundException: Internal token for id 9 not found, but a public token exists on that id: NamedToken[name:account_id, id:9, internal:false].
解决方案
该错误源于Schema规则引用的属性键token(ID 9,名称account_id)仅存在公开token,缺失对应的内部token,导致启动时Schema校验失败。可通过以下步骤修复:
方法一:临时关闭Schema校验并重建约束/索引
- 停止Neo4j服务
sudo systemctl stop neo4j
- 修改配置跳过Schema校验
编辑Neo4j配置文件neo4j.conf,添加以下配置:
dbms.schema.verify_schema_enabled=false
- 启动服务并重建Schema
启动Neo4j:
sudo systemctl start neo4j
连接到Neo4j后,重新创建account_id对应的索引或约束(根据原数据库的实际配置选择):
# 若原配置为索引 CREATE INDEX account_id_idx FOR (n) ON (n.account_id); # 若原配置为唯一性约束 CREATE CONSTRAINT account_id_unique FOR (n) REQUIRE n.account_id IS UNIQUE;
- 恢复严格校验(可选)
确认数据库正常运行后,移除dbms.schema.verify_schema_enabled=false配置,重启Neo4j即可恢复默认的Schema严格校验。
方法二:通过导出/导入重建数据库
如果方法一无效,可尝试导出数据后导入到全新数据库:
- 导出原数据库
sudo systemctl stop neo4j neo4j-admin dump --database=neo4j --to=neo4j_backup.dump
- 创建新数据库并导入数据
# 创建新数据库 neo4j-admin database create neo4j_recovered # 导入备份数据 neo4j-admin load --database=neo4j_recovered --from=neo4j_backup.dump # 修改默认数据库为新库 echo "dbms.default_database=neo4j_recovered" >> /etc/neo4j/neo4j.conf
- 启动服务
sudo systemctl start neo4j
内容的提问来源于stack exchange,提问作者Ketan
相关产品推荐
相关产品推荐

