기술/DB

[neo4j] docker 환경에서 neo4j data dump 하기 + 새로운 neo4j에 dump 파일 풀기

하기싫지만어떡해해야지 2025. 4. 3. 18:28

이번에 연구실 서버에 docker 환경에서 띄워놨던

neo4j에 있는 data를 옮겨야 할 일이 생겼다

그래서 neo4j 내부에서 명령어를 실행해서

dump라는 파일을 생성해서 받아올 수 있길래 그렇게 하려고했는데 문제가 발생했다

 

원래라면 neo4j에서 dump 명령어를 실행하려면

neo4j stop -> dump 명령어 실행을 해야하는데

docker 환경에서 neo4j를 stop을 하면

neo4j가 docker container의 main process라서

docker container가 자꾸 죽는 것이었다

 

docker container가 자꾸 죽으면..

neo4j 명령어 실행을 못하잖아 ㅋㅋ

 

그래서 또 구글링 + gpt를 하다가

neo4j 자체에서 cypher로

DATABASE STOP;인가를 해주면 된다고 했는데

안타깝게도 무료버전(community version) 쓰는 흑우라

데이터베이스 자체를 stop 시키는 그런

admin 쿼리는 날릴 수가 없다고 했다

 

그래서 마지막 회심의 일격으로

neo4j data 폴더를 그냥 tar로 압축해서

새로운 neo4j를 실행한 후 neo4j data 폴더를

고대로 바꿔치기했는데

이게 운이 좋으면 될 때도 있다고 했는데

나는 자꾸 build error가 떴다 ㅠ

버전 맞춰주고 다 했는데도 빌드 에러가 떴다

 

그래서 어떻게 할지 고민하다가

stack overflow와 연구실 동생에게서 받은 방법으로 성공해서

게시글에 공유도 할겸 기록하려고 한다


https://serverfault.com/questions/835092/how-do-you-perform-a-dump-of-a-neo4j-database-within-a-docker-container

 

How do you perform a dump of a Neo4j database within a Docker container?

A docker container for Neo4j is started as per the documentation and working properly using the following command: $ docker run \ --detach \ --publish=7474:7474 \ --publish=7473:7473 \...

serverfault.com

 

비슷한 글을 봤던 url은 여기다

(stack overflow가 아니었네?)

 

아무튼 처음에 저런 류의 방법을 망설였던 이유는

docker rm..

이 있으니까

잘못하다 내 데이터 날리면 어떡하나 하는 생각에

무서워서 시도조차 하지 않았었는데

생각해보니 volumes로 data를 미리 mount를 해두면

사실상 docker rm을 해도

새로운 neo4j docker를 뛰운 후 data를 고대로 사용해서 build하면

데이터를 통째로 날리는게 아니라는 생각이 들었다

 

아무튼 그래서 관련문제로 연구실 동생에게 물어봤더니

비슷한 방법으로 했고 성공했다고했다

 

** 단, 이 방법이 성공하려면 전제가 있다 ** 

반드시 기존에 data가 있는 neo4j docker에 

data 폴더가 volumes을 통해서

docker container 내부에 접속하지 않아도

data 폴더에 data들이 존재해야한다

그래야 기존 docker를 stop해도

data 폴더에 접근이 가능하고 mount가 가능해지니깐

 

 

내 생각에는 이 방법은 아주 약간은 야매같은데

우선 기존 데이터가 있는 docker를 stop 해준 다음

neo4j 폴더 내부에서 dump를 해줄 폴더를 생성한다

 

 

이렇게 나는 dumps라는 폴더를 생성해줬다

그러고 chmod -R 777을 통해서

dumps 폴더에 아무나 쓰기가 가능하도록 모드를 변경해준다

 

sudo chmod -R 777 /neo4j/dumps

 

그런 다음 아래와 같은 명령어를 입력해준다

 

docker run --rm \
  -v /home/neo4j/data:/data \
  -v /home/neo4j/dumps:/dumps \
  neo4j:latest \
  neo4j-admin database dump neo4j --to-path=/dumps --overwrite-destination=true

 

data와 dumps 폴더의 경로는 본인에 맞게 맞춰주고

neo4j 버전도 원하는 버전으로 맞춰준다

 

이게 뭘 하는 명령어냐면

새로운 docker container를 실행하는데

나의 원래 서버에 있던 data 폴더와 dumps 폴더를

mount해서 neo4j:latest 버전을

새로운 container에 그대로 올린 다음

가장 마지막 줄에 있는 dump 명령어를 수행하는 것이다

그런 다음 명령어 수행이 끝나면

해당 docker container는 알아서 삭제된다

 

정확하게 neo4j를 멈추지 않았는데

어떻게 저게 작동하는건지는 모르겠으나

위 url에 들어가서 확인해보면

uri로 connect가 되지않아서? 가능한듯하다

(약간 야매같은 방식)

 

아무튼 저 명령어를 실행해주면

2025-04-03 09:10:55.716+0000 INFO  [o.n.c.d.DumpCommand] Starting dump of database 'neo4j'

Files: 1/38, data:  0.0%
Files: 1/38, data:  0.0%
Files: 2/38, data:  0.0%
Files: 3/38, data:  0.0%
Files: 4/38, data:  1.0%
Files: 4/38, data:  2.0%
Files: 4/38, data:  3.0%
Files: 4/38, data:  4.0%
Files: 4/38, data:  5.0%
Files: 4/38, data:  6.0%
Files: 4/38, data:  6.6%
Files: 5/38, data:  6.6%
Files: 6/38, data:  7.0%
Files: 6/38, data:  8.0%
Files: 6/38, data:  8.0%
Files: 7/38, data:  8.0%
Files: 8/38, data:  8.0%
Files: 9/38, data:  8.0%
Files: 10/38, data:  8.0%
Files: 11/38, data:  8.4%
Files: 12/38, data:  8.4%
Files: 13/38, data:  8.4%
Files: 14/38, data:  8.4%
Files: 15/38, data:  8.4%
Files: 16/38, data:  8.4%
Files: 17/38, data:  8.4%
Files: 18/38, data:  8.5%
Files: 19/38, data:  8.5%
Files: 20/38, data:  9.0%
Files: 21/38, data:  9.0%
Files: 22/38, data:  9.0%
Files: 23/38, data:  9.0%
Files: 23/38, data: 10.0%
Files: 23/38, data: 11.0%
Files: 23/38, data: 12.0%
Files: 23/38, data: 13.0%
Files: 23/38, data: 14.0%
Files: 23/38, data: 15.0%
Files: 23/38, data: 16.0%
Files: 23/38, data: 17.0%
Files: 23/38, data: 18.0%
Files: 23/38, data: 19.0%
Files: 23/38, data: 20.0%
Files: 23/38, data: 21.0%
Files: 23/38, data: 22.0%
Files: 23/38, data: 23.0%
Files: 23/38, data: 24.0%
Files: 23/38, data: 25.0%
Files: 23/38, data: 26.0%
Files: 23/38, data: 27.0%
Files: 23/38, data: 28.0%
Files: 23/38, data: 29.0%
Files: 23/38, data: 30.0%
Files: 23/38, data: 31.0%
Files: 23/38, data: 32.0%
Files: 23/38, data: 33.0%
Files: 23/38, data: 34.0%
Files: 23/38, data: 35.0%
Files: 23/38, data: 36.0%
Files: 23/38, data: 37.0%
Files: 23/38, data: 38.0%
Files: 23/38, data: 39.0%
Files: 23/38, data: 40.0%
Files: 23/38, data: 41.0%
Files: 23/38, data: 42.0%
Files: 23/38, data: 43.0%
Files: 23/38, data: 44.0%
Files: 23/38, data: 44.3%
Files: 24/38, data: 44.4%
Files: 25/38, data: 44.4%
Files: 26/38, data: 44.5%
Files: 27/38, data: 44.5%
Files: 28/38, data: 44.5%
Files: 29/38, data: 44.6%
Files: 30/38, data: 44.7%
Files: 31/38, data: 44.7%
Files: 32/38, data: 45.0%
Files: 32/38, data: 46.0%
Files: 32/38, data: 47.0%
Files: 32/38, data: 48.0%
Files: 32/38, data: 49.0%
Files: 32/38, data: 50.0%
Files: 32/38, data: 51.0%
Files: 32/38, data: 52.0%
Files: 32/38, data: 53.0%
Files: 32/38, data: 54.0%
Files: 32/38, data: 55.0%
Files: 32/38, data: 56.0%
Files: 32/38, data: 57.0%
Files: 32/38, data: 58.0%
Files: 32/38, data: 59.0%
Files: 32/38, data: 60.0%
Files: 32/38, data: 61.0%
Files: 32/38, data: 62.0%
Files: 32/38, data: 63.0%
Files: 32/38, data: 64.0%
Files: 32/38, data: 64.6%
Files: 33/38, data: 64.6%
Files: 34/38, data: 64.6%
Files: 35/38, data: 64.6%
Files: 36/38, data: 64.7%
Files: 37/38, data: 65.0%
Files: 37/38, data: 66.0%
Files: 37/38, data: 67.0%
Files: 37/38, data: 68.0%
Files: 37/38, data: 69.0%
Files: 37/38, data: 70.0%
Files: 37/38, data: 71.0%
Files: 37/38, data: 72.0%
Files: 37/38, data: 73.0%
Files: 37/38, data: 74.0%
Files: 37/38, data: 75.0%
Files: 37/38, data: 76.0%
Files: 37/38, data: 77.0%
Files: 37/38, data: 78.0%
Files: 37/38, data: 79.0%
Files: 37/38, data: 80.0%
Files: 37/38, data: 81.0%
Files: 37/38, data: 82.0%
Files: 37/38, data: 82.3%
Files: 38/38, data: 83.0%
Files: 38/38, data: 84.0%
Files: 38/38, data: 85.0%
Files: 38/38, data: 86.0%
Files: 38/38, data: 87.0%
Files: 38/38, data: 88.0%
Files: 38/38, data: 89.0%
Files: 38/38, data: 90.0%
Files: 38/38, data: 91.0%
Files: 38/38, data: 92.0%
Files: 38/38, data: 93.0%
Files: 38/38, data: 94.0%
Files: 38/38, data: 95.0%
Files: 38/38, data: 96.0%
Files: 38/38, data: 97.0%
Files: 38/38, data: 98.0%
Files: 38/38, data: 99.0%
Files: 38/38, data: 100.0%
Files: 38/38, data: 100.0%
Done: 38 files, 1.415GiB processed in 11.351 seconds.
2025-04-03 09:11:07.687+0000 INFO  [o.n.c.d.DumpCommand] Dump completed successfully

 

요론게 뜨면서 모든 data들이 dump가 된 것을 확인할 수 있다

 

그러고 dumps 폴더에 가면

야무지게 dump 파일이 생긴 것을 확인할 수 있다

 

그런 다음 저 neo4j.dump 파일을

내 로컬로 가져와서

새로 띄워준 neo4j에 실행시켜줄 예정이다

내 로컬에서 scp로 접속해서 파일을 전송해준다

scp [계정]@[ip주소]:/home/neo4j/dumps/neo4j.dump /Downloads

 

 

비밀번호를 쳐주면 야무지게 dump파일이

복사 전송되는 것을 확인할 수 있다

 

이번에 neo4j desktop을 로컬환경에서 새로 깔았기때문에

고놈을 이용해서 아주 편하게 dump를 시켜줄 예정이다

 

neo4j desktop에 접속한 다음

 

오른쪽 아래에 Reveal files in Finder를 클릭한 뒤

폴더가 나오면 해당 폴더에 neo4j.dump파일을 넣어주자

 

 

그런 다음 오른쪽 점 세개를 누른 다음

가장 위에 있는

Create new DBMS from dump를 클릭해주자

 

 

새로 생성할 neo4j 이름과 비번을 치고 잠시 기다려주면

이렇게 알음다운 문구가 뜨는 것을 확인할 수 있다

 

그러고 브라우저에 접속하면

야무지게 데이터들이 고대로 생긴 모습을 볼 수 있다

참고로 버전이 다르면 에러뜨더라..

꼭 같은 버전으로 해주자 ^^...

 

이런 쓸데없이 시간을 걸리게 하는 것들은

이렇게 기록해놓고 나중에도 야무지게 써먹으면 좋다