Skip to content

Neo4j 升级流程

升级前准备

版本兼容性检查

在升级前,首先需要检查目标版本与当前版本的兼容性。Neo4j 支持跨版本升级,但某些版本之间可能需要特定的升级路径。

  • 查看 Neo4j 官方文档中的版本兼容性矩阵
  • 确认当前数据库存储格式与目标版本兼容
  • 检查应用程序使用的驱动版本与目标 Neo4j 版本兼容

环境备份

升级前必须进行完整的环境备份,包括:

  1. 数据库文件备份

    bash
    neo4j-admin backup --database=neo4j --backup-dir=/path/to/backup
  2. 配置文件备份

    bash
    cp -r /etc/neo4j /path/to/config-backup
  3. 应用程序配置备份

升级计划制定

制定详细的升级计划,包括:

  • 升级时间窗口(建议在业务低峰期)
  • 升级步骤和顺序
  • 回滚计划
  • 测试验证计划
  • 相关人员和职责

升级类型

小版本升级

小版本升级(例如 4.4.1 → 4.4.2)通常只包含 bug 修复和安全补丁,升级过程相对简单。

大版本升级

大版本升级(例如 4.4 → 5.0)包含新功能和架构变更,升级过程较为复杂,可能需要数据迁移。

升级步骤

1. 停止 Neo4j 服务

bash
# Systemd 系统
sudo systemctl stop neo4j

# SysV 系统
sudo service neo4j stop

# 直接运行
neo4j stop

2. 安装目标版本

根据操作系统选择合适的安装方式:

Debian/Ubuntu

bash
wget -O - https://debian.neo4j.com/neotechnology.gpg.key | sudo apt-key add -
echo 'deb https://debian.neo4j.com stable latest' | sudo tee /etc/apt/sources.list.d/neo4j.list
sudo apt-get update
sudo apt-get install neo4j=<version>

RHEL/CentOS

bash
sudo rpm --import https://rpm.neo4j.com/neotechnology.gpg.key
sudo cat <<EOF > /etc/yum.repos.d/neo4j.repo
[neo4j]
name=Neo4j Yum Repo
baseurl=https://rpm.neo4j.com/stable
enabled=1
gpgcheck=1
EOF
sudo yum install neo4j-<version>

二进制安装

bash
wget https://dist.neo4j.org/neo4j-community-<version>-unix.tar.gz
tar -xf neo4j-community-<version>-unix.tar.gz
sudo mv neo4j-community-<version> /opt/neo4j

3. 迁移配置文件

对比新旧版本的配置文件,迁移自定义配置:

bash
# 查看配置文件差异
diff /path/to/old/neo4j.conf /path/to/new/neo4j.conf

# 迁移自定义配置
sudo cp /path/to/backup/neo4j.conf /etc/neo4j/
# 手动更新配置项,确保与新版本兼容

4. 运行迁移工具

对于大版本升级,需要运行迁移工具:

bash
neo4j-admin migrate --database=neo4j --force

5. 启动 Neo4j 服务

bash
# Systemd 系统
sudo systemctl start neo4j

# SysV 系统
sudo service neo4j start

# 直接运行
neo4j start

6. 验证升级结果

升级完成后,需要验证:

  1. 服务状态

    bash
    neo4j status
  2. 数据库连接

    bash
    cypher-shell -u neo4j -p <password> -d neo4j
  3. 版本信息

    cypher
    CALL dbms.components() YIELD name, version RETURN name, version;
  4. 数据完整性

    cypher
    MATCH (n) RETURN count(n);
    MATCH ()-[r]->() RETURN count(r);

集群升级

升级策略

Neo4j 集群升级支持两种策略:

  1. 滚动升级:逐个升级集群节点,适用于小版本升级
  2. 停机升级:停止所有节点,升级后再启动,适用于大版本升级

滚动升级步骤

  1. 升级只读副本节点
  2. 升级核心节点(一次升级一个)
  3. 最后升级主节点

停机升级步骤

  1. 停止所有集群节点
  2. 升级所有节点的软件
  3. 运行迁移工具(如果需要)
  4. 启动所有节点

回滚计划

如果升级过程中出现问题,需要执行回滚操作:

  1. 停止当前 Neo4j 服务
  2. 卸载目标版本
  3. 重新安装原版本
  4. 恢复备份的数据库文件和配置
  5. 启动服务并验证

升级后优化

数据库重建索引

升级后建议重建索引,确保索引与新版本兼容:

cypher
CALL db.indexes() YIELD name
WHERE name IS NOT NULL
CALL db.index.fulltext.drop(name) YIELD name AS dropped
RETURN dropped;

# 重新创建索引
CREATE FULLTEXT INDEX FOR (n:Label) ON EACH [n.property];

统计信息更新

更新数据库统计信息,优化查询性能:

cypher
CALL dbms.index.stats.refresh();

常见问题(FAQ)

Q1: 升级过程中出现 "Unsupported database version" 错误怎么办?

A1: 这通常是因为跨版本升级路径不正确。需要检查 Neo4j 官方文档,确认正确的升级路径,可能需要先升级到中间版本。

Q2: 升级后查询性能下降怎么办?

A2: 升级后建议重建索引并更新统计信息,这通常可以解决性能问题。如果问题仍然存在,可以使用 EXPLAINPROFILE 命令分析查询计划。

Q3: 集群升级时如何处理主节点切换?

A3: 在滚动升级过程中,主节点可能会自动切换。这是正常现象,升级完成后集群会自动恢复稳定状态。

Q4: 升级后应用程序无法连接到数据库怎么办?

A4: 检查应用程序使用的驱动版本是否与目标 Neo4j 版本兼容。如果驱动版本过旧,需要升级驱动到兼容版本。

Q5: 如何最小化升级对业务的影响?

A5: 建议在业务低峰期进行升级,采用滚动升级策略(如果支持),并提前通知相关业务方。同时,确保有完善的回滚计划,以便在出现问题时快速恢复服务。