文章目錄
- 一. 官網說明
- 1. 操作說明
- 2. 注意事項
- 二. docker 容器化操作
- 1. 導出(備份)
- 停止容器
- 執行備份
- 2. 導入(恢復)
- 停止容器(如果未停止)
- 執行導入
- 3. 啟動容器
一. 官網說明
https://neo4j.com/docs/operations-manual/current/docker/dump-load/
1. 操作說明
- 確定備份工具:
- 使用 Neo4j 提供的
neo4j-admin
工具。 - 此工具適用于 Neo4j 4.x 版本,可用來創建數據庫的完整備份。
- 使用 Neo4j 提供的
- 逐個備份所有數據庫:
- Neo4j 支持多數據庫架構,每個數據庫需要單獨備份。
- 通過運行多個命令依次備份每個數據庫。
- 檢查備份:
- 驗證備份是否成功,檢查備份目錄中的內容確保所有數據庫都已備份。
?
2. 注意事項
- 備份目錄的存儲空間:
- 確保目標目錄有足夠的存儲空間容納所有備份文件。
- 數據庫的一致性:
- 在備份期間,建議不要進行寫操作,以避免數據不一致。
- 備份權限:
- 運行備份命令的用戶需要具有訪問 Neo4j 安裝目錄和目標備份目錄的權限。
?
二. docker 容器化操作
導出和導入時都需要停止容器,因為正在啟動的容器不允許操作,如下操作日志:
neo4j-admin database dump --to-path=/neo4j/backup/ neo4j# neo4j-admin database dump --to-path=/neo4j/backup/ neo4j
2024-12-11 13:24:49.126+0000 INFO [o.n.c.d.DumpCommand] Starting dump of database 'neo4j'
2024-12-11 13:24:49.146+0000 ERROR [o.n.c.d.DumpCommand] Failed to dump database 'neo4j': The database is in use. Stop database 'neo4j' and try again.
2024-12-11 13:24:49.148+0000 ERROR [o.n.c.d.DumpCommand] Dump failed for databases: 'neo4j'
Dump failed for databases: 'neo4j'
Run with '--verbose' for a more detailed error message.
也就是說我們無法在容器內進行操作,需要停止容器后進行備份,恢復
?
1. 導出(備份)
停止容器
首先停止要導出的neo4j數據庫,在docker compose文件所在位置下執行
docker compose stop neo4j[+] Stopping 1/1? Container neo4j Stopped
?
執行備份
在docker compose文件同級目錄下執行
docker run --interactive --tty --rm \--volume=./neo4j/data:/data \--volume=./neo4j/data/backup:/neo4j/backup/ \neo4j \
neo4j-admin database dump neo4j --to-path=/neo4j/backup/# 如下日志
neo4j-admin database dump neo4j --to-path=/neo4j/backup/
2024-12-11 13:01:51.864+0000 INFO [o.n.c.d.DumpCommand] Starting dump of database 'neo4j'
Done: 36 files, 257.9MiB processed in 0.281 seconds.
2024-12-11 13:01:52.449+0000 INFO [o.n.c.d.DumpCommand] Dump completed successfully
部分命令解釋:
### `--rm`
容器停止后自動刪除,避免占磁盤空間。
### `-v ./neo4j/data/backup:/neo4j/backup/ `
將宿主機的 `/data/neo4j` 目錄掛載到容器內的 `/neo4j/backup/` 目錄,實現數據共享與持久化。### `neo4j-admin database dump neo4j --to-path=/neo4j/backup/`
在容器內用 `neo4j-admin` 工具備份名為 `neo4j` 的數據庫,備份文件存到容器內 `/neo4j/backup/` 目錄(實際會存到宿主機對應掛載目錄)。
?
2. 導入(恢復)
停止容器(如果未停止)
首先停止要導入的neo4j數據庫,在docker compose文件所在位置下執行
docker compose stop neo4j
?
執行導入
docker run -it \--rm \-v ./neo4j/data/backup:/neo4j/backup/ \neo4j:latest \neo4j-admin database load --from-path=/neo4j/backup/ neo4j
# 如果數據庫存在會報如下錯誤
Failed to load database 'neo4j': Database already exists: neo4j
Load failed for databases: 'neo4j'
Load failed for databases: 'neo4j'
Run with '--verbose' for a more detailed error message.
?
強制導入(謹慎操作)
docker run -it \--rm \-v ./neo4j/data/backup:/neo4j/backup/ \neo4j:latest \neo4j-admin database load --from-path=/neo4j/backup/ neo4j --overwrite-destination=trueDone: 36 files, 257.9MiB processed in 0.209 seconds.
部分參數說明:
### `--rm`
容器停止后自動刪除,節省磁盤空間。### `-v./neo4j/data/backup:/neo4j/backup/`
將宿主機的 `./neo4j/data/backup` 目錄掛載到容器內 `/neo4j/backup/` 目錄,實現數據共享與持久化。### `neo4j:latest`
指定運行Neo4j的最新版本鏡像。### `neo4j-admin database load --from-path=/neo4j/backup/ neo4j --overwrite-destination=true`
在容器內用 `neo4j-admin` 工具,從 `/neo4j/backup/` 路徑(對應宿主機相關目錄)加載備份數據到名為 `neo4j` 的數據庫,`--overwrite-destination=true` 表示覆蓋原有數據庫
?
3. 啟動容器
docker compose start neo4j