neo4j-admin load 导致“不是有效的 Neo4j 归档文件”
使用 neo4j-admin load
加载 .dump 文件时,会观察到以下错误
$ neo4j-admin load --from=/var/lib/neo4j/neo4j.dump --database=neo4j --force --verbose
org.neo4j.cli.CommandFailedException: Not a valid Neo4j archive: /
Caused by: org.neo4j.dbms.archive.IncorrectFormat: /var/lib/neo4j/neo4j.dump
at org.neo4j.dbms.archive.Loader.openArchiveIn(Loader.java:172)
at org.neo4j.dbms.archive.Loader.load(Loader.java:74)
at org.neo4j.commandline.dbms.LoadCommand.load(LoadCommand.java:131)
... 11 more
Caused by: java.util.zip.ZipException: Not in GZIP format
有时,这与 .dump 文件的格式无关,就像 Not in GZIP format 提示的那样,而是由于操作系统设置干扰了 Java 系统属性。
Java 使用系统属性 java.io.tmpdir
,在大多数 Linux 系统中,这通常默认为 /tmp
。此位置是 JVM 用于创建和存储临时文件的目录。一些系统管理员在遵循安全最佳实践以限制攻击面时,会确保 /tmp
挂载时带有 noexec
选项。此选项会提示内核拒绝允许在此位置执行任何代码或存储任何内容。
一种故障排除方法
检查此选项是否已设置。例如,在 RHEL 服务器上
$ mount | grep /tmp
tmpfs on /tmp type tmpfs (rw,noexec,relatime,seclabel,size=524288k)
因此,在此机器上,/tmp
已设置为带有 noexec
选项。
修复/解决方法
将 java.io.tmpdir
的默认设置从 /tmp
覆盖为另一个位置,然后运行 neo4j-admin load
。
例如
$ export _JAVA_OPTIONS="-Djava.io.tmpdir=/var/lib/neo4j/import/temp"
$ neo4j-admin load --from=/var/lib/neo4j/neo4j.dump --database=neo4j --force
Done: 34 files, 971.0KiB processed.
此页面有帮助吗?