图数据库neoj4安装部署使用

我们来系统地讲解一下图数据库 Neo4j 的安装、部署和使用。这是一个从零开始的完整指南,涵盖了最核心和实用的部分。

Neo4j 简介

Neo4j 是世界领先的、原生的图数据库。它使用图(Graph)相关的概念来存储和操作数据,而不是传统的表结构。

  • 核心概念:
    • 节点(Node): 代表实体,例如一个人、一本书、一个部门。可以带有标签(Label)和属性(Properties)。
    • 关系(Relationship): 连接两个节点,代表它们之间的关联。关系是有方向 的,并且必须有类型(Type),也可以带有属性。
    • 属性(Properties): 键值对,用于描述节点或关系的特征。
    • 标签(Label): 对节点进行分组,类似于关系型数据库中的表。
  • 优点:
    • 非常擅长处理高度互联的数据
    • 查询复杂关系路径时,性能远超传统关系型数据库。
    • 使用直观的 Cypher 查询语言,易于理解和编写。

第一部分:离线安装部署

1. 下载离线安装包

访问 Neo4j 官网下载中心:

复制代码
https://neo4j.com/download-center/#community

选择 "Linux / Unix (tar)" 格式的社区版下载。这会得到一个类似 neo4j-community-5.x.x-unix.tar.gz 的压缩包。

2. 传输和解压

将安装包上传到目标服务器,然后解压:

bash 复制代码
# 解压到当前目录
tar -xzf neo4j-community-5.x.x-unix.tar.gz

# 移动到合适的安装目录
sudo mv neo4j-community-5.x.x /opt/neo4j

3. 创建专用用户(推荐)

bash 复制代码
# 创建neo4j用户
sudo useradd -M -s /bin/bash neo4j

# 更改安装目录所有者
sudo chown -R neo4j:neo4j /opt/neo4j

4. 设置环境变量

bash 复制代码
# 编辑profile文件
sudo vim /etc/profile

# 添加以下内容
export NEO4J_HOME=/opt/neo4j
export PATH=$PATH:$NEO4J_HOME/bin

# 使配置生效
source /etc/profile

第二部分:配置数据库存储目录

1. 主要配置文件

Neo4j 的主要配置文件是:

复制代码
/opt/neo4j/conf/neo4j.conf

2. 配置数据存储目录

bash 复制代码
# 编辑配置文件
sudo vim /opt/neo4j/conf/neo4j.conf

找到并修改以下关键配置:

properties 复制代码
# 数据文件目录(节点、关系、属性等)
server.directories.data=/opt/neo4j/data

# 日志文件目录
server.directories.logs=/opt/neo4j/logs

# 导入文件目录(用于LOAD CSV等操作)
server.directories.import=/opt/neo4j/import

# 插件目录
server.directories.plugins=/opt/neo4j/plugins

# 事务日志目录
server.directories.transaction.logs.root=/opt/neo4j/data/transactions

3. 创建目录并设置权限

bash 复制代码
# 创建所有必要的目录
sudo mkdir -p /opt/neo4j/{data,logs,import,plugins}

# 如果使用自定义目录,比如 /data/neo4j
sudo mkdir -p /data/neo4j/{data,logs,import,plugins}

# 设置权限
sudo chown -R neo4j:neo4j /opt/neo4j
# 或者如果是自定义目录
sudo chown -R neo4j:neo4j /data/neo4j

4. 其他重要存储配置

properties 复制代码
# 默认数据库名称
server.default_database=neo4j

# 是否允许升级现有数据库
server.allow_upgrade=true

第三部分:修改数据库账号密码

方法一:通过 Cypher 命令修改(推荐)

  1. 启动 Neo4j 服务
bash 复制代码
# 切换到neo4j用户
sudo -u neo4j /opt/neo4j/bin/neo4j start
  1. 访问 Cypher Shell
bash 复制代码
# 使用默认密码登录(初始密码通常是 neo4j)
/opt/neo4j/bin/cypher-shell -u neo4j -p neo4j
  1. 修改密码
cypher 复制代码
# 在cypher-shell中执行
ALTER CURRENT USER SET PASSWORD FROM 'neo4j' TO 'YourNewPassword123';
  1. 退出
cypher 复制代码
:exit

方法二:通过配置文件重置(忘记密码时)

  1. 停止 Neo4j 服务
bash 复制代码
sudo -u neo4j /opt/neo4j/bin/neo4j stop
  1. 启用密码重置
    编辑配置文件:
bash 复制代码
sudo vim /opt/neo4j/conf/neo4j.conf

添加或修改:

properties 复制代码
# 启用初始化密码重置
server.initial.dbms.default_password=neo4j
dbms.security.auth_enabled=false
  1. 启动服务并重置密码
bash 复制代码
# 启动服务
sudo -u neo4j /opt/neo4j/bin/neo4j start

# 连接并重置密码
/opt/neo4j/bin/cypher-shell -u neo4j -p neo4j
ALTER CURRENT USER SET PASSWORD FROM 'neo4j' TO 'YourNewPassword123';
  1. 恢复安全设置
    重新编辑配置文件,注释掉或删除刚才添加的行:
properties 复制代码
# server.initial.dbms.default_password=neo4j
# dbms.security.auth_enabled=false
  1. 重启服务
bash 复制代码
sudo -u neo4j /opt/neo4j/bin/neo4j restart

第四部分:完整部署流程示例

1. 完整安装脚本

bash 复制代码
#!/bin/bash

# 解压安装包
tar -xzf neo4j-community-5.x.x-unix.tar.gz
sudo mv neo4j-community-5.x.x /opt/neo4j

# 创建用户
sudo useradd -M -s /bin/bash neo4j

# 创建目录结构
sudo mkdir -p /opt/neo4j/{data,logs,import,plugins,run}

# 设置权限
sudo chown -R neo4j:neo4j /opt/neo4j

# 备份原始配置
sudo cp /opt/neo4j/conf/neo4j.conf /opt/neo4j/conf/neo4j.conf.backup

2. 最小化配置文件

bash 复制代码
sudo -u neo4j nano /opt/neo4j/conf/neo4j.conf
properties 复制代码
# 服务器配置
server.mode=SINGLE
server.default_listen_address=0.0.0.0
server.memory.pagecache.size=1G
server.memory.heap.initial_size=1G
server.memory.heap.max_size=2G

# 目录配置
server.directories.data=/opt/neo4j/data
server.directories.logs=/opt/neo4j/logs
server.directories.import=/opt/neo4j/import
server.directories.plugins=/opt/neo4j/plugins

# 连接配置
server.bolt.enabled=true
server.bolt.tls_level=OPTIONAL
server.bolt.listen_address=:7687
server.http.enabled=true
server.http.listen_address=:7474

# 安全配置
server.security.auth_enabled=true

3. 启动和测试

bash 复制代码
# 启动服务
sudo -u neo4j /opt/neo4j/bin/neo4j start

# 检查状态
sudo -u neo4j /opt/neo4j/bin/neo4j status

# 测试连接(在另一终端)
/opt/neo4j/bin/cypher-shell -u neo4j -p neo4j

4. 创建系统服务(可选)

bash 复制代码
sudo vim /etc/systemd/system/neo4j.service
ini 复制代码
[Unit]
Description=Neo4j Graph Database
After=network.target

[Service]
Type=forking
User=neo4j
Group=neo4j
ExecStart=/opt/neo4j/bin/neo4j start
ExecStop=/opt/neo4j/bin/neo4j stop
ExecReload=/opt/neo4j/bin/neo4j restart
Restart=on-failure
LimitNOFILE=60000
TimeoutSec=120

[Install]
WantedBy=multi-user.target

启用服务:

bash 复制代码
sudo systemctl daemon-reload
sudo systemctl enable neo4j
sudo systemctl start neo4j

方法二:Docker 版 - 适用于开发和生产

这种方式灵活、干净,易于版本管理和部署。

  1. 拉取镜像

    bash 复制代码
    docker pull neo4j:latest
  2. 运行容器

    bash 复制代码
    docker run \
        --name my-neo4j \
        -p 7474:7474 -p 7687:7687 \
        -v /path/on/your/host/data:/data \
        -v /path/on/your/host/logs:/logs \
        -v /path/on/your/host/import:/var/lib/neo4j/import \
        -d \
        --env NEO4J_AUTH=neo4j/your_password \
        neo4j:latest
    • -p 7474:7474:映射 HTTP 端口,用于访问 Neo4j Browser。
    • -p 7687:7687:映射 Bolt 端口,用于应用程序连接。
    • -v ...:/data:数据持久化到宿主机。
    • -v ...:/logs:日志持久化。
    • -v ...:/import:方便你从宿主机导入 CSV 等文件。
    • --env NEO4J_AUTH=neo4j/your_password:设置默认用户 neo4j 的密码。
  3. 访问

    • 在浏览器中打开 http://localhost:7474
    • 输入用户名 neo4j 和你设置的密码 your_password 进行连接。

第五部分:验证和故障排查

验证部署

  1. 检查服务状态
bash 复制代码
/opt/neo4j/bin/neo4j status
  1. 检查端口监听
bash 复制代码
netstat -tlnp | grep -E '(7474|7687)'
  1. 测试Web访问
    浏览器访问 http://服务器IP:7474

常见问题排查

  1. 权限问题
bash 复制代码
# 确保所有文件属于neo4j用户
sudo chown -R neo4j:neo4j /opt/neo4j
  1. 端口冲突
bash 复制代码
# 检查端口占用
lsof -i :7474
lsof -i :7687
  1. 内存不足
    调整 neo4j.conf 中的内存设置:
properties 复制代码
server.memory.heap.initial_size=512m
server.memory.heap.max_size=1G
server.memory.pagecache.size=512m

第六部分:基本使用与 Cypher 入门

成功连接 Neo4j Browser 后,你会看到一个命令输入界面。我们将使用 Cypher 语言进行操作。

1. 创建数据(CREATE)

创建节点:

cypher 复制代码
// 创建带有 'Person' 标签的节点,并设置属性
CREATE (you:Person {name: 'You', age: 30, from: 'China'})

// 一次创建多个节点
CREATE (alice:Person {name: 'Alice', age: 25}),
       (bob:Person {name: 'Bob', age: 35})

创建关系:

cypher 复制代码
// 找到两个节点,并在它们之间创建关系
MATCH (you:Person {name: 'You'})
MATCH (alice:Person {name: 'Alice'})
CREATE (you)-[:FRIENDS_WITH {since: '2023-01-01'}]->(alice)

// 更简洁的写法,在创建关系的同时定义节点
CREATE (you:Person {name: 'You'})-[:LIKES]->(movie:Movie {title: 'The Matrix'})
2. 查询数据(MATCH)

查询所有节点和关系:

cypher 复制代码
MATCH (n) RETURN n

这会返回一个可视化的图。

查询特定节点:

cypher 复制代码
// 查询所有 'Person' 节点
MATCH (p:Person) RETURN p

// 查询名字是 'Alice' 的 'Person'
MATCH (p:Person {name: 'Alice'}) RETURN p

查询关系:

cypher 复制代码
// 查询 'You' 的所有朋友
MATCH (you:Person {name: 'You'})-[:FRIENDS_WITH]->(friend)
RETURN friend.name

// 查询谁喜欢 'The Matrix' 这部电影
MATCH (person)-[:LIKES]->(movie:Movie {title: 'The Matrix'})
RETURN person.name
3. 更新数据(SET)
cypher 复制代码
// 为 'You' 节点添加一个 'city' 属性
MATCH (you:Person {name: 'You'})
SET you.city = 'Beijing'
RETURN you
4. 删除数据(DELETE)

注意: 删除节点前,必须先删除与其相连的所有关系。

cypher 复制代码
// 删除 'Bob' 节点(以及他所有的关系)
MATCH (bob:Person {name: 'Bob'})
DETACH DELETE bob

// 只删除关系,保留节点
MATCH (you:Person {name: 'You'})-[r:FRIENDS_WITH]->(alice:Person {name: 'Alice'})
DELETE r

第四部分:电影示例(经典入门案例)

让我们在 Neo4j Browser 中运行一个完整的例子。

  1. 清空数据库(可选,确保从空库开始):

    cypher 复制代码
    MATCH (n) DETACH DELETE n
  2. 创建电影图景

    cypher 复制代码
    // 创建演员和导演节点
    CREATE (Keanu:Person {name: 'Keanu Reeves', born: 1964})
    CREATE (Carrie:Person {name: 'Carrie-Anne Moss', born: 1967})
    CREATE (Laurence:Person {name: 'Laurence Fishburne', born: 1961})
    CREATE (Hugo:Person {name: 'Hugo Weaving', born: 1960})
    CREATE (LillyW:Person {name: 'Lilly Wachowski', born: 1967})
    CREATE (LanaW:Person {name: 'Lana Wachowski', born: 1965})
    
    // 创建电影节点
    CREATE (TheMatrix:Movie {title: 'The Matrix', released: 1999, tagline: 'Welcome to the Real World'})
    
    // 创建关系:谁演了什么角色,谁导演了电影
    CREATE (Keanu)-[:ACTED_IN {roles: ['Neo']}]->(TheMatrix)
    CREATE (Carrie)-[:ACTED_IN {roles: ['Trinity']}]->(TheMatrix)
    CREATE (Laurence)-[:ACTED_IN {roles: ['Morpheus']}]->(TheMatrix)
    CREATE (Hugo)-[:ACTED_IN {roles: ['Agent Smith']}]->(TheMatrix)
    CREATE (LillyW)-[:DIRECTED]->(TheMatrix)
    CREATE (LanaW)-[:DIRECTED]->(TheMatrix)
  3. 执行查询

    • 查询整个图

      cypher 复制代码
      MATCH (n) RETURN n

      你将看到一个漂亮的网络图。

    • 找到 "The Matrix" 的所有演员

      cypher 复制代码
      MATCH (movie:Movie {title: 'The Matrix'})<-[:ACTED_IN]-(actor)
      RETURN actor.name
    • 找到 "Keanu Reeves" 合作过的所有导演

      cypher 复制代码
      MATCH (keanu:Person {name: 'Keanu Reeves'})-[:ACTED_IN]->(movie)<-[:DIRECTED]-(director)
      RETURN director.name

备份和恢复 Neo4j 数据库。

备份 Neo4j 数据库

Neo4j 提供了 neo4j-admin 工具来进行数据库备份。以下是备份命令的基本格式:

bash 复制代码
neo4j-admin backup --backup-dir= --name=

例如:

bash 复制代码
neo4j-admin backup --backup-dir=/var/backups/neo4j --name=neo4j-backup

恢复 Neo4j 数据库

恢复 Neo4j 数据库也需要使用 neo4j-admin 工具。以下是恢复命令的基本格式:

bash 复制代码
neo4j-admin restore --from=/ --database= --force=true

例如:

bash 复制代码
neo4j-admin restore --from=/var/backups/neo4j/neo4j-backup --database=graph.db --force=true

完整示例

  1. 备份数据库
    假设你的 Neo4j 服务器正在运行并且你希望将其数据备份到本地磁盘上的某个目录中,可以按照以下步骤操作:
  2. 打开终端或命令行界面。
  3. 运行备份命令:
bash 复制代码
neo4j-admin backup --backup-dir=/var/backups/neo4j --name=neo4j-backup
  1. 检查备份文件:
    运行上述命令后,你会在指定的备份目录(在这个例子中是 /var/backups/neo4j)找到一个名为 neo4j-backup 的子目录,其中包含了备份的数据文件。

  2. 恢复数据库
    假设你想从刚才创建的备份中恢复数据库,可以按照以下步骤操作:

  3. 停止 Neo4j 服务:
    在恢复之前,必须先停止正在运行的 Neo4j 服务以防止数据损坏。

    bash 复制代码
    sudo systemctl stop neo4j
  4. 运行恢复命令:

    bash 复制代码
    neo4j-admin restore --from=/var/backups/neo4j/neo4j-backup --database=graph.db --force=true

    这里的 --force=true 参数表示如果目标数据库已经存在,则强制覆盖它。

  5. 启动 Neo4j 服务:

    bash 复制代码
    sudo systemctl start neo4j

注意事项

  • 权限:确保运行备份和恢复命令的用户有足够的权限访问目标备份目录和数据库目录。
  • 服务状态:在执行恢复操作之前,必须先停止正在运行的 Neo4j 服务。
  • 网络配置:如果你是在远程机器上运行备份和恢复命令,请确保防火墙和网络配置允许从备份客户端到 Neo4j 服务器的通信。
    通过以上步骤,你可以成功地备份和恢复 Neo4j 数据库。

:进阶与生产部署建议

  1. 驱动与编程

    Neo4j 官方提供了多种语言的驱动,如 Java, Python, JavaScript, .NET, Go 等。你可以在应用程序中通过这些驱动连接并操作 Neo4j。

    • Python 示例 :使用 neo4j 驱动包。

      python 复制代码
      from neo4j import GraphDatabase
      
      driver = GraphDatabase.driver("bolt://localhost:7687", auth=("neo4j", "your_password"))
      
      def get_friends_of(tx, name):
          result = tx.run("""
              MATCH (p:Person {name: $name})-[:FRIENDS_WITH]->(friend)
              RETURN friend.name
          """, name=name)
          return [record["friend.name"] for record in result]
      
      with driver.session() as session:
          friends = session.execute_read(get_friends_of, "You")
          print(friends)
      
      driver.close()
  2. 生产部署

    • Neo4j AuraDB:官方托管的云服务,无需运维,开箱即用,是最省心的生产环境选择。
    • Neo4j Enterprise:企业版,支持因果集群,提供高可用、横向扩展和高级安全功能。可以部署在自有服务器或云虚拟机(如 AWS EC2)上。
    • 配置优化 :调整内存设置(如 dbms.memory.heap.initial_sizedbms.memory.pagecache.size)对于生产性能至关重要。

总结

图数据库的强大之处在于探索关系,当你处理社交网络、推荐系统、知识图谱、供应链、风控等涉及复杂关系的场景时,Neo4j 会展现出巨大的优势。记得在生产环境中使用强密码,并定期备份数据。

相关推荐
麦聪聊数据17 分钟前
Web 原生架构如何重塑企业级数据库协作流?
数据库·sql·低代码·架构
未来之窗软件服务18 分钟前
数据库优化提速(四)新加坡房产系统开发数据库表结构—仙盟创梦IDE
数据库·数据库优化·计算机软考
Fcy64836 分钟前
Linux下 进程(一)(冯诺依曼体系、操作系统、进程基本概念与基本操作)
linux·运维·服务器·进程
袁袁袁袁满38 分钟前
Linux怎么查看最新下载的文件
linux·运维·服务器
代码游侠1 小时前
学习笔记——设备树基础
linux·运维·开发语言·单片机·算法
Gary Studio1 小时前
rk芯片驱动编写
linux·学习
mango_mangojuice1 小时前
Linux学习笔记(make/Makefile)1.23
java·linux·前端·笔记·学习
Harvey9031 小时前
通过 Helm 部署 Nginx 应用的完整标准化步骤
linux·运维·nginx·k8s
Goat恶霸詹姆斯2 小时前
mysql常用语句
数据库·mysql·oracle
大模型玩家七七2 小时前
梯度累积真的省显存吗?它换走的是什么成本
java·javascript·数据库·人工智能·深度学习