docker postgresql 데이터 백업하기

  1. SQL 덤프 시도

    PostgreSQL 백업 및 복구 - 명령어 사용

    pg_dumpall로 백업한 뒤 psql 복구를 하려고 시도

    1. docker-compose up -d

    2. docker exec -it oj-postgres bash

    3. su - postgres

    4. psql —username onlinejudge —dbname onlinejudge

    5. pg_dumpall -U postgres > /var/lib/postgresql/data/20211123.dump

      Untitled

      이래서 백업된줄 알았는데 나중에 확인해보니까 파일 내용이 비었더라.. 하

      하여간 파일 제대로 생긴 줄 알고 다음꺼 진행했었음

    6. 새로운 서버가 있어야되니까 postgresql 컨테이너를 새로운거 생성

      • 5432 포트 바인드 되어있어서 5435로 시도
      • docker run -p 5435:5435 —name [container 이름] -e POSTGRES_PASSWORD=[비밀번호] -d postgres

      Untitled

      이래서 컨테이너는 postgres-test로 하나 만들었고

    7. 이제 postgres-test 실행해서 db 생성 후에 dump파일 복원시켜주면 되겠다고 생각

      • docker exec -it postgres-test bash
      • su - postgres
      • 디비생성: createdb testdb
      • 복원: psql testdb < dump파일 경로

      Untitled

      하는데 파일이 없다 당연함 다른 컨테이너임

      아니 그러면 dump파일을 새로운 복사해가지고? 하는건 좀 아니지 않나? 하고 생각하고 dump파일 열었는데 텅~ .. 비었음

      Untitled

      하 .. 내일 다시 .. dump파일 제대로 만들어지는지부터 .. 5시간했는데 5분한 것 같아보이네 .. 눈물나네..

      또 다른 방법 2

      Docker PostgreSQL Dump 하기

      1. docker exec -t -u onlinejudge ddce6b9b77dd pg_dumpall -c > dump_postgresql.sql

      Untitled


      1. docker-compose up -d
      2. docker exec -it oj-postgres bash
      3. su - postgres
      4. pg_dumpall -U onlinejudge > /var/lib/postgresql/data/dump_postgresql.sql ( 이거 경로는 접근하기 쉬운곳으로 수정)

      Untitled

      psql -U {유저네임} -d {덤프파일 풀고 싶은 DB명} -a -f {덤프파일위치}

      EX) psql -U onlinejudge -d onlinejudge -a -f C:\Users\Downloads\[파일명].sql

      (참고 https://mozi.tistory.com/557)

      volume 파일 백업

      https://royleej9.tistory.com/entry/Docker-volume-BackupRestore

      • tar만들기

      docker run --rm --volumes-from oj-backend -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /data && docker run --rm --volumes-from oj-redis -v $(pwd):/backup ubuntu tar cvf /backup/backup_redis.tar /data

      • 복원할것(BE랑 redis)

      sudo docker run --rm --volumes-from oj-backend -v $(pwd):/backup ubuntu bash -c "cd /data && tar xvf /backup/backup_backend.tar --strip 1"

      sudo docker run --rm --volumes-from oj-redis -v $(pwd):/backup ubuntu bash -c "cd /data && tar xvf /backup/backup_redis.tar --strip 1"

      • DB 복원

      data안에 postgres 안에 dump_postgresql.sql넣고

      sudo docker exec -it oj-postgres bash
      su - postgres
      psql -U onlinejudge -d onlinejudge -a -f /var/lib/postgresql/data/dump_postgresql.sql
      
      1. docker exec -it oj-postgres bash
      2. su - postgres
      3. psql -U onlinejudge -d onlinejudge -a -f /var/lib/postgresql/data/dump_postgresql1.sql

      Untitled

      sudo chmod 755 [경로]
      

      Untitled

      흠 그 명령어가 어디서 생긴거지

      어떤 명령어?