-
[TIL] PSQL-DB 데이터 복원하기 (pg_dumpall VS pg_dump 차이)TIL 2024. 10. 11. 01:18
도커 볼륨 postgresDB (개발환경) -> aws ec2 postgresDB(배포환경)으로 db 하나 전체를 옮기고자 하였다.
현재 개발 환경에서 db 서버를 도커 컨테이너로 이용하고 있었는데, 프론트엔드쪽에서 내가 만든 api를 이용하기 위해서는 배포를 해야했다. 기존의 테스트용 더미데이터와 db 테이블, 제약조건등 모두를 포함해서 today_review db를 옮기는 것이 목적이다.
하지만 today_review db 소유주인 kiju 계정으로 uuid 익스텐션을 설치할 권한이 없었기때문에 복원과정에서 일부데이터가 손실되는 문제가 발생했다. 그래서 postgres계정에 superuser 권한을 부여하고 이 계정으로 복원과 백업을 모두 진행해서 권한 문제가 발생하지 않도록 진행했다.
1. 데이터 백업하기
1. 도커 컨테이너 접속
2. pg_dumpall로 데이터 백업하기 (호스트 컴퓨터에 저장)
docker exec -t [컨테이너] pg_dumpall -U postgres -f [파일명]
docker exec -t postgres-db pg_dumpall -U postgres -f today-review-postgres-data.sql
2. 로컬 컴퓨터에서 aws로 백업된 dump파일 전송
scp -i [pem파일위치] [전송할 파일위치] [ec2사용자]@[ec2 ip주소]:[전송될 파일 위치]
3. 데이터 복원하기
pg_dumpall로 백업한 파일은 SQL스크립트 파일이기때문에 psql명령어 써서 복원.
psql --username=[사용자명] --dbname=[접속 db명] -f [백업파일(SQL스크립트파일)]
//데이터 복구 psql --username=kiju --dbname=postgres -f /docker-entrypoint-initdb.d/today_review_postgres_data.sql
-U postgres: 계정 권한관련 문제 피하기위해 슈퍼계정 postgres사용,
(해당 db를 생성한 계정이었음에도 uuid extension을 설치할 권한이 없어서 데이터 복원과정에서 문제가 계속 발생했었음)
복원할때 복원이 진행될 db에 대한 권한이 모두 있어야함.
'TIL' 카테고리의 다른 글
[TIL] Error - git 파일명 대소문자 구분 (0) 2024.10.13 [TIL] postgreSQL - postgres 슈퍼계정 권한 부여하기 (0) 2024.10.11 [TIL] 쿼리스트링 에러 (1) 2024.08.28 오버라이딩, 오버로딩 (0) 2024.07.02 [TIL] 자료구조 - 배열, 연속리스트, 연결리스트 차이 (0) 2024.06.26