cd ~/DeciKG
docker compose stop neo4j
mkdir -p ./dumps
chmod 777 ./dumps
docker run --rm \
--user 0:0 \
--env NEO4J_ACCEPT_LICENSE_AGREEMENT=eval \
-v decikg_neo4j_data:/data \
-v "$(pwd)/dumps":/backups \
neo4j:5.26-enterprise \
neo4j-admin database dump neo4j --to-path=/backups
sudo chown -R $USER:$USER ./dumps
ls -lh ./dumps
1) EC2へ転送
ssh ec2-user@<EC2_HOST> "mkdir -p ~/dumps"
scp ~/DeciKG/dumps/neo4j.dump ec2-user@<EC2_HOST>:/home/ec2-user/dumps/
2) EC2側:Neo4jの /data の実体ボリューム名を確認
EC2の DeciKG/docker-compose.yml は同じでも、実体volume名はプロジェクト名で変わるので、まず確認します。
ssh ec2-user@<EC2_HOST>
cd ~/DeciKG
docker inspect decikg-neo4j --format '{{json .Mounts}}' | jq .
この出力の中で /data の "Name" を見てください。
例:"Name": "decikg_neo4j_data"
以下のコマンドでは その名前を <EC2_DATA_VOL> に入れます。
3) EC2側:load(上書き復元)
# EC2上で実行
cd ~/DeciKG
docker compose stop neo4j# /data ボリューム名を置換して実行してください
EC2_DATA_VOL="<EC2_DATA_VOL>"docker run --rm \
--env NEO4J_ACCEPT_LICENSE_AGREEMENT=eval \
-v "${EC2_DATA_VOL}:/data" \
-v "$HOME/dumps:/backups" \
neo4j:5.26-enterprise \
neo4j-admin database load neo4j --from-path=/backups --overwrite-destination=true
4) 起動 → 反映確認
cd ~/DeciKG
docker compose up -d neo4jdocker compose exec neo4j cypher-shell -u neo4j -p "$NEO4J_PASSWORD" \
"MATCH (n) RETURN count(n) AS node_count;"
5) (任意)EC2側の dumps を片付け
rm -f ~/dumps/neo4j.dump
よくある詰まりポイント(先回り)
- version mismatch:ローカルが
neo4j:5.26-enterpriseなので、EC2側も同じに揃える(compose.ymlが同じならOK) - DB名:
SHOW DATABASESでneo4jだったので load target はneo4jでOK - ボリューム名違い:EC2は
decikg_neo4j_dataとは限らないので、inspectで見て置換
次に、EC2での docker inspect ... | jq . の結果(/dataの "Name" だけでOK)を貼ってくれれば、**EC2用の load コマンドを “置換なしの確定版”**にして返します。
コメントを残す