运维管理13 分钟阅读
Neo4j 运维命令 100 条
Neo4j 是原生图数据库,使用节点、关系和属性表达数据,并通过 Cypher 完成查询与管理。Neo4j DBA 除了管理数据库对象,还需要关注事务、查询计划、索引、约束、内存、日志、备份恢复和集群拓扑。
2026年8月19日阅读—点赞—收藏—
dba100neo4j墨力计划
在知识库中专注阅读,并随时返回相关工具与课程
Neo4j 是原生图数据库,使用节点、关系和属性表达数据,并通过 Cypher 完成查询与管理。Neo4j DBA 除了管理数据库对象,还需要关注事务、查询计划、索引、约束、内存、日志、备份恢复和集群拓扑。
Neo4j 是原生图数据库,使用节点、关系和属性表达数据,并通过 Cypher 完成查询与管理。Neo4j DBA 除了管理数据库对象,还需要关注事务、查询计划、索引、约束、内存、日志、备份恢复和集群拓扑。
下面整理 Neo4j 当前版本常用的 100 条命令,覆盖 cypher-shell、Cypher 管理语句、neo4j 服务命令和 neo4j-admin 工具。部分多数据库、在线备份、安全和集群能力仅在 Enterprise Edition 中提供,文中会明确提示。
Neo4j 2025/2026 版本仍在持续演进,命令选项可能与 Neo4j 5.x 存在差异。生产执行删除数据库、终止事务、恢复备份、迁移存储格式和集群管理命令前,应对照当前 Operations Manual。
1cypher-shell -a neo4j://localhost:7687 \2 -u neo4j -p 'Password'1cypher-shell -a neo4j://localhost:7687 \2 -u neo4j -p 'Password' \3 -d appdb1cypher-shell -a neo4j+s://neo4j.example.com:7687 \2 -u appuser -p 'Password'1CALL dbms.components()2YIELD name, versions, edition3RETURN name, versions, edition;1SHOW CURRENT USER;1CALL db.info()2YIELD name3RETURN name;1SHOW DATABASES;1SHOW DEFAULT DATABASE;1:use system1:exit1neo4j status1neo4j start1neo4j stop1neo4j restart1neo4j console适合测试和故障诊断,不建议作为生产常驻启动方式。
1neo4j --help1neo4j-admin server validate-config1neo4j-admin server report报告可能包含配置、日志和环境信息,对外发送前应脱敏。
1SHOW SETTINGS2YIELD name, value, dynamic, description3RETURN name, value, dynamic, description4ORDER BY name;1SHOW SETTINGS2YIELD name, value, dynamic3WHERE name STARTS WITH 'server.memory'4RETURN name, value, dynamic5ORDER BY name;1CREATE DATABASE appdb IF NOT EXISTS;多数据库管理通常需要 Enterprise Edition,并应在 system 数据库执行。
1START DATABASE appdb;1STOP DATABASE appdb;1SHOW DATABASE appdb2YIELD name, type, access, currentStatus,3 requestedStatus, statusMessage4RETURN *;1ALTER DATABASE appdb2SET DEFAULT LANGUAGE CYPHER 25;该语法适用于 Neo4j 2025.06 及以后版本。
1ALTER DATABASE appdb SET ACCESS READ ONLY;1ALTER DATABASE appdb SET ACCESS READ WRITE;1CREATE COMPOSITE DATABASE graph_fabric;复合数据库属于 Enterprise 能力。
1DROP DATABASE appdb IF EXISTS2DUMP DATA;具体保留选项随版本演进,应先查看当前版本语法。
1DROP DATABASE appdb IF EXISTS2DESTROY DATA;该操作不可逆,必须先确认备份。
1CREATE (:Customer {2 customerId: 1001,3 name: 'Alice'4});1UNWIND range(1, 1000) AS id2CREATE (:Customer {3 customerId: id,4 name: 'Customer-' + toString(id)5});1MATCH (c:Customer {customerId: 1001}),2 (o:Order {orderId: 2001})3CREATE (c)-[:PLACED {4 createdAt: datetime()5}]->(o);1MERGE (c:Customer {customerId: 1001})2ON CREATE SET c.createdAt = datetime()3ON MATCH SET c.updatedAt = datetime();1MATCH (c:Customer)2RETURN c.customerId, c.name3ORDER BY c.customerId4LIMIT 100;1MATCH (c:Customer)-[r:PLACED]->(o:Order)2RETURN c, r, o3LIMIT 100;1MATCH (c:Customer {customerId: 1001})2SET c.status = 'ACTIVE',3 c.updatedAt = datetime();1MATCH (c:Customer {customerId: 1001})2REMOVE c.temporaryFlag;1MATCH (:Customer {customerId: 1001})2 -[r:PLACED]->3 (:Order {orderId: 2001})4DELETE r;1MATCH (c:Customer {customerId: 1001})2DETACH DELETE c;1SHOW INDEXES;1CREATE INDEX customer_name_idx IF NOT EXISTS2FOR (c:Customer)3ON (c.name);1CREATE INDEX order_customer_time_idx IF NOT EXISTS2FOR (o:Order)3ON (o.customerId, o.orderTime);1CREATE TEXT INDEX customer_email_text IF NOT EXISTS2FOR (c:Customer)3ON (c.email);1CREATE FULLTEXT INDEX product_search IF NOT EXISTS2FOR (p:Product)3ON EACH [p.name, p.description];1CALL db.index.fulltext.queryNodes(2 'product_search',3 'database'4)5YIELD node, score6RETURN node, score7LIMIT 20;1CREATE VECTOR INDEX document_embedding IF NOT EXISTS2FOR (d:Document)3ON d.embedding4OPTIONS {5 indexConfig: {6 `vector.dimensions`: 1536,7 `vector.similarity_function`: 'cosine'8 }9};1CALL db.index.vector.queryNodes(2 'document_embedding',3 10,4 $queryVector5)6YIELD node, score7RETURN node.docId, score;1CREATE CONSTRAINT customer_id_unique IF NOT EXISTS2FOR (c:Customer)3REQUIRE c.customerId IS UNIQUE;1CREATE CONSTRAINT order_id_exists IF NOT EXISTS2FOR (o:Order)3REQUIRE o.orderId IS NOT NULL;存在性约束通常属于 Enterprise Edition。
1CREATE CONSTRAINT customer_key IF NOT EXISTS2FOR (c:Customer)3REQUIRE (c.tenantId, c.customerId) IS NODE KEY;1SHOW CONSTRAINTS;1DROP INDEX customer_name_idx IF EXISTS;1DROP CONSTRAINT customer_id_unique IF EXISTS;1EXPLAIN2MATCH (c:Customer {customerId: 1001})3RETURN c;1PROFILE2MATCH (c:Customer {customerId: 1001})3RETURN c;PROFILE 会真正执行语句,写操作应在测试环境或可回滚事务中分析。
1SHOW TRANSACTIONS2YIELD transactionId, database, username,3 currentQuery, elapsedTime, status4RETURN *5ORDER BY elapsedTime DESC;1SHOW TRANSACTIONS2YIELD transactionId, database, username,3 currentQuery, elapsedTime4WHERE elapsedTime > duration('PT1M')5RETURN *;1TERMINATE TRANSACTIONS 'appdb-transaction-123';事务 ID 应从 SHOW TRANSACTIONS 获取。
1SHOW CONNECTIONS2YIELD connectionId, connectTime, clientAddress,3 username, userAgent4RETURN *;1TERMINATE CONNECTIONS 'bolt-123';1SHOW PROCEDURES2YIELD name, description, mode3RETURN name, mode, description4ORDER BY name;1SHOW FUNCTIONS2YIELD name, category, description3RETURN name, category, description4ORDER BY name;1tail -f logs/query.log是否记录及阈值由 server.logs.query.* 配置控制。
1tail -n 200 logs/debug.log1SHOW USERS;1CREATE USER appuser2SET PASSWORD 'Replace_With_Strong_Password'3CHANGE NOT REQUIRED;1ALTER USER appuser2SET PASSWORD 'Replace_With_New_Strong_Password'3CHANGE NOT REQUIRED;1ALTER USER appuser SET STATUS SUSPENDED;1ALTER USER appuser SET STATUS ACTIVE;1CREATE ROLE app_reader IF NOT EXISTS;自定义角色和细粒度权限属于 Enterprise Edition。
1GRANT ROLE app_reader TO appuser;1GRANT ACCESS ON DATABASE appdb2TO app_reader;1GRANT MATCH {*} ON GRAPH appdb2TO app_reader;1SHOW ROLE app_reader PRIVILEGES;1REVOKE GRANT MATCH {*} ON GRAPH appdb2FROM app_reader;1DROP USER appuser IF EXISTS;1DROP ROLE app_reader IF EXISTS;1LOAD CSV WITH HEADERS2FROM 'file:///customers.csv' AS row3MERGE (c:Customer {4 customerId: toInteger(row.customer_id)5})6SET c.name = row.name;1neo4j-admin database import full appdb \2 --nodes=Customer=customers.csv \3 --relationships=PLACED=orders_rel.csvFull Import 面向新数据库,执行前应核对 CSV 头和字段类型。
1neo4j-admin database import incremental appdb \2 --stage=all \3 --nodes=Customer=customers_delta.csv增量导入的版本、数据库状态和集群限制应以当前手册为准。
1neo4j-admin database dump appdb \2 --to-path=/backup/neo4j1neo4j-admin database load appdb \2 --from-path=/backup/neo4j \3 --overwrite-destination=true替换数据库前应按当前版本要求停止或删除目标数据库。
1neo4j-admin database backup appdb \2 --to-path=/backup/neo4j \3 --type=FULL在线备份属于 Enterprise Edition。
1neo4j-admin database backup appdb \2 --to-path=/backup/neo4j \3 --type=DIFF1neo4j-admin backup inspect \2 /backup/neo4j/appdb.backup1neo4j-admin backup aggregate \2 --from-path=/backup/neo4j \3 appdb1neo4j-admin database restore appdb \2 --from-path=/backup/neo4j恢复后通常还需要在 system 数据库执行 CREATE DATABASE appdb。
1neo4j-admin database check appdb一致性检查可能消耗大量 I/O,生产执行前应评估资源。
1neo4j-admin database info appdb1SHOW SERVERS;集群管理属于 Enterprise Edition。
1ENABLE SERVER 'server-id';服务器 ID 应从 SHOW SERVERS 获取。
1SHOW DATABASE appdb2YIELD name, address, role, writer,3 currentStatus, statusMessage4RETURN *;1DEALLOCATE DATABASES2FROM SERVER 'server-id';1DROP SERVER 'server-id';必须先确认服务器不再承载数据库。
1neo4j-admin server report \2 --list不同版本的报告选项可能不同,可先执行 neo4j-admin server report --help。
1neo4j-admin database migrate appdb升级前应先完成备份,并核对支持的跨版本迁移路径。
1df -h2ps -ef | grep '[n]eo4j'1journalctl -u neo4j --since "30 minutes ago"若使用压缩包安装,应检查 logs/neo4j.log 和 logs/debug.log。
1neo4j status2neo4j-admin server validate-config3cypher-shell -u neo4j -p 'Password' -d system \4"SHOW DATABASES"5cypher-shell -u neo4j -p 'Password' -d system \6"SHOW TRANSACTIONS"7df -h每日巡检还应覆盖索引状态、约束、长事务、查询日志、JVM 内存、Page Cache、备份结果、证书和集群成员状态。
Neo4j 运维的关键是理解图查询的访问路径。出现性能问题时,应结合 PROFILE、索引、关系扩展数量、事务和 Page Cache 进行判断,不能简单套用关系型数据库的索引经验。
Community 与 Enterprise 在多数据库、权限、在线备份和集群方面差异明显,发布文章和生产执行时都应明确版本与 Edition,避免读者照搬不适用的命令。