【问题标题】:Repair corrupted neo4j database (2.3.2 community)修复损坏的neo4j数据库(2.3.2社区)
【发布时间】:2016-02-01 01:38:32
【问题描述】:

我的 neo4j-2.3.2-community 数据库磁盘空间不足(80G)。我彻底关闭了它,然后添加了更多磁盘,并尝试重新启动它,只是得到了神秘的错误消息并让它拒绝启动。

今天早上,当我意识到磁盘已满并且不再接受任何插入时,我将其关闭。直到今天晚上,我才开始尝试恢复它。对于关闭和重新启动之间日志中的明显差距,我深表歉意。该数据库仍处于原型/概念验证阶段。在过去一周左右的时间里,我一直在运行作业以在其中加载数据。我真的,真的不想从那个数据加载过程重新开始。实在是太慢了。

我希望有人会告诉我有一个“neo4j --force_repair”类型的命令行选项可以解决问题。我的数据加载器足够智能,可以在尝试加载新记录之前检查它成功插入数据库的最后一条记录,所以如果我们丢失了一些记录应该没问题。

这是我在 console.log 中看到的内容。

2016-01-31 16:25:56.648+0000 INFO  Successfully shutdown Neo4j Server
2016-01-31 16:25:56.810+0000 INFO  Successfully stopped database
2016-01-31 16:25:56.811+0000 INFO  Successfully shutdown database
2016-02-01 01:16:10.591+0000 INFO  Successfully shutdown Neo4j Server
2016-02-01 01:16:10.593+0000 ERROR Failed to start Neo4j: Starting Neo4j failed: Component 'org.neo4j.server.database.LifecycleManagingDatabase@2d9e9010' was successfully initialized, but failed to start. Please see attached cause exception. Starting Neo4j failed: Component 'org.neo4j.server.database.LifecycleManagingDatabase@2d9e9010' was successfully initialized, but failed to start. Please see attached cause exception.
org.neo4j.server.ServerStartupException: Starting Neo4j failed: Component 'org.neo4j.server.database.LifecycleManagingDatabase@2d9e9010' was successfully initialized, but failed to start. Please see attached cause exception.
    at org.neo4j.server.exception.ServerStartupErrors.translateToServerStartupError(ServerStartupErrors.java:67)
    at org.neo4j.server.AbstractNeoServer.start(AbstractNeoServer.java:234)
    at org.neo4j.server.Bootstrapper.start(Bootstrapper.java:97)
    at org.neo4j.server.CommunityBootstrapper.start(CommunityBootstrapper.java:48)
    at org.neo4j.server.CommunityBootstrapper.main(CommunityBootstrapper.java:35)
Caused by: org.neo4j.kernel.lifecycle.LifecycleException: Component 'org.neo4j.server.database.LifecycleManagingDatabase@2d9e9010' was successfully initialized, but failed to start. Please see attached cause exception.
    at org.neo4j.kernel.lifecycle.LifeSupport$LifecycleInstance.start(LifeSupport.java:462)
    at org.neo4j.kernel.lifecycle.LifeSupport.start(LifeSupport.java:111)
    at org.neo4j.server.AbstractNeoServer.start(AbstractNeoServer.java:194)
    ... 3 more
Caused by: java.lang.RuntimeException: Error starting org.neo4j.kernel.impl.factory.CommunityFacadeFactory, /home/neo4j/neo4j-community-2.3.2/data/graph.db
    at org.neo4j.kernel.impl.factory.GraphDatabaseFacadeFactory.newFacade(GraphDatabaseFacadeFactory.java:143)
    at org.neo4j.kernel.impl.factory.CommunityFacadeFactory.newFacade(CommunityFacadeFactory.java:43)
    at org.neo4j.kernel.impl.factory.GraphDatabaseFacadeFactory.newFacade(GraphDatabaseFacadeFactory.java:108)
    at org.neo4j.server.CommunityNeoServer$1.newGraphDatabase(CommunityNeoServer.java:66)
    at org.neo4j.server.database.LifecycleManagingDatabase.start(LifecycleManagingDatabase.java:95)
    at org.neo4j.kernel.lifecycle.LifeSupport$LifecycleInstance.start(LifeSupport.java:452)
    ... 5 more
Caused by: org.neo4j.kernel.lifecycle.LifecycleException: Component 'org.neo4j.kernel.recovery.Recovery@4ec23a22' failed to initialize. Please see attached cause exception.
    at org.neo4j.kernel.lifecycle.LifeSupport$LifecycleInstance.init(LifeSupport.java:434)
    at org.neo4j.kernel.lifecycle.LifeSupport.init(LifeSupport.java:66)
    at org.neo4j.kernel.lifecycle.LifeSupport.start(LifeSupport.java:102)
    at org.neo4j.kernel.NeoStoreDataSource.start(NeoStoreDataSource.java:600)
    at org.neo4j.kernel.lifecycle.LifeSupport$LifecycleInstance.start(LifeSupport.java:452)
    at org.neo4j.kernel.lifecycle.LifeSupport.start(LifeSupport.java:111)
    at org.neo4j.kernel.impl.transaction.state.DataSourceManager.start(DataSourceManager.java:112)
    at org.neo4j.kernel.lifecycle.LifeSupport$LifecycleInstance.start(LifeSupport.java:452)
    at org.neo4j.kernel.lifecycle.LifeSupport.start(LifeSupport.java:111)
    at org.neo4j.kernel.impl.factory.GraphDatabaseFacadeFactory.newFacade(GraphDatabaseFacadeFactory.java:139)
    ... 10 more
Caused by: java.lang.IllegalArgumentException: Unknown entry type -1 for version -1. At position LogPosition{logVersion=252, byteOffset=100663356} and entry version V2_1
    at org.neo4j.kernel.impl.transaction.log.entry.LogEntryVersion.entryParser(LogEntryVersion.java:207)
    at org.neo4j.kernel.impl.transaction.log.entry.VersionAwareLogEntryReader.readLogEntry(VersionAwareLogEntryReader.java:92)
    at org.neo4j.kernel.impl.transaction.log.LogEntryCursor.next(LogEntryCursor.java:54)
    at org.neo4j.kernel.recovery.LatestCheckPointFinder.find(LatestCheckPointFinder.java:77)
    at org.neo4j.kernel.recovery.PositionToRecoverFrom.apply(PositionToRecoverFrom.java:53)
    at org.neo4j.kernel.recovery.DefaultRecoverySPI.getPositionToRecoverFrom(DefaultRecoverySPI.java:135)
    at org.neo4j.kernel.recovery.Recovery.init(Recovery.java:72)
    at org.neo4j.kernel.lifecycle.LifeSupport$LifecycleInstance.init(LifeSupport.java:424)
    ... 19 more

【问题讨论】:

    标签: neo4j


    【解决方案1】:

    看起来事务日志仅被部分写入。如果这是真的,那么数据存储本身就不太可能损坏。

    警告:在对 data/graph.db 文件夹进行任何手动更改之前,请务必准备好备份副本。

    在继续之前,请阅读以上段落。备份了吗?如果是,请尝试通过rm neostore.transaction.db.* 删除data/graph.db 中的事务日志文件。尝试启动 Neo4j。如果它仍然无法启动,请粘贴包含最新启动序列的data/graph.db/messages.log 的 sn-p - 这应该可以提供更多信息。

    【讨论】:

    • (我现在正在尝试 - 让您在几分钟后知道...)对于关系数据库,我经常将事务日志放在与主数据存储不同的卷上。我通常将事务日志放在性能最高的卷上。我也喜欢将它分开,因为我可以更轻松地单独跟踪和管理事务日志(归档、数量和大小等)。这也是 Neo4j 的最佳实践吗?
    • 这似乎已经解决了。 :-) 谢谢! -- 80G 中的 62G 是那些事务日志。 (!)显然他们从不默认旋转或存档?有没有办法知道何时不再需要它们以便我可以清除它们?我的原型数据库中有大约 100 万个节点,并且可能是关系的 10 倍(计算它们需要很长时间)。
    • 你需要设置配置选项keep_logical_logs。在企业版中,您需要为 a) 集群传播和 b) 在线备份保留逻辑日志。在社区版中,您通常可以使用keep_logical_logs=false。没有简单的方法将 tx 日志放到单独的目录/磁盘中 - 在 SSD 驱动器的世界中,恕我直言,无论如何都不需要这样做。
    • 我遇到了同样的问题,不幸的是,删除我的事务日志会在下次重启后给我一个不同的错误。记住那个备份!
    猜你喜欢
    • 2016-06-20
    • 2016-04-29
    • 2018-01-02
    • 1970-01-01
    • 2021-02-04
    • 2016-08-24
    • 1970-01-01
    • 1970-01-01
    • 2011-04-15
    相关资源
    最近更新 更多