[이전 포스트] 로컬 데이터베이스를 WSL 우분투로 백업하기
이 포스트는..
해당 포스트는 로컬에 있는 PostgreSQL 의 데이터베이스를 같은 운영체제 내에서 pg_dump 를 사용하여 백업하는 과정을 담고 있습니다.
[들어가기 전] pg_dump 란?
찾아보니 postgreSQL 데이터베이스를 백업하는 방식이 3 가지가 있었다. 그 중에서 갠적으로는 제일 간편하고 활용하기 적당하다고 생각했던 것이 pg_dump 이다.
pg_dump는 PostgreSQL 데이터베이스를 백업하는 데 사용되는 공식적인 명령줄 유틸리티로 소개된다. pg_dump를 사용하면 데이터베이스를 텍스트 덤프 파일 또는 이진 덤프 파일로 백업할 수 있는데. 이러한 덤프 파일은 pg_restore를 사용하여 나중에 데이터베이스를 복원하는 데 사용된다고 한다.
일반적으로 pg_dump는 다음과 같은 방법으로 사용된다.
텍스트 형식으로 데이터베이스 백업(이 형식으로 할 예정)
pg_dump -U username -d dbname > backup.sql
여기서 -U 옵션은 데이터베이스에 연결할 사용자 이름을 지정하는 것이고, -d 옵션은 백업할 데이터베이스 이름을 지정한다. 즉, 타겟 데이터베이스를 백업하고 난 뒤 backup.sql 파일에 저장되게 된다.
현재 예시는 같은 로컬에서 동작할 때의 예시이고, 만일 다른 호스트에 있는 데이터베이스에 접근하는 경우라면 pg_dump -h 호스트이름(or주소) 를 입력하여 접근한다.
그리고 텍스트 형식의 백업 파일은 다음과 같은 형식으로 복원할 수 있다.
psql -U username -d dbname -f backup.sql
pg_restore 를 사용해서도 가능하지만 .sql 형태의 백업 형태는 psql 를 주로 사용한다고 한다. 만일 백업 파일 확장자가 .backup 이거나 .dump 혹은 .txt 형태라면 pg_restore 를 주로 사용한다.
이진 형식으로 데이터베이스 백업
텍스트 말고도 이진 형태로도 백업할 수 있다(이진 형식의 장점은 대규모 데이터를 빠르고 효율적으로 백업하고 복원할 수 있다는 점이다. 다만 이진 데이터 형식이므로 복원하기 전에는 데이터 편집이 어렵다).
pg_dump -U username -d dbname -Fc -f backup.dump
여기서 -Fc 옵션은 이진 형식으로 백업을 생성하도록 지정한다. -f 옵션은 백업 파일의 이름을 명확히 할 때 지정하는 옵션이다. 이 경우 백업 파일은 backup.dump 로 저장된다.
이진 형식의 경우는 다음과 같이 복원하면 된다.
pg_restore -U username -d dbname backup.dump
만일 백업 시 -Fc 를 명시하지 않은 경우 텍스트 형식으로 백업이 되는데, 이 때는 다음과 같이 복원 대상의 파일 형식이 무엇인지 지정해주어야 한다. (안 그러면 오류 발생.)
pg_restore -U username -d dbname -Fc backup.dump
psql.exe 가 있는 곳으로 커맨드 경로 지정하기
윈도우에서 psql 을 사용해서 데이터베이스를 백업하고자 하는데, 해당 백업을 시도하려면 psql.exe 파일이 있는 곳에서 커맨드를 입력해야 정상적으로 인식된다.
psql.exe 파일은 C: -> Program Files -> PostgreSQL -> 15 -> bin 경로로 접근하면 아래 이미지와 같이 확인할 수 있다. 즉, powershell 등의 스크립트에서 다음 경로에서 psql 관련 명령어를 입력해야 정상적으로 인식된다.
위 경로를 확인하였다면, 해당 주소를 복사 해두자
그 다음 powershell 실행(관리자 모드로) 하고을 킨 뒤 cd 경로 형태로 입력하여 커맨드 경로를 이동시킨다.
cd C:\Program Files\PostgreSQL\15\bin
데이터베이스 백업하기
psql 명령어가 정상동작하는 지 테스트하기
백업 이전에 psql 이 정상적으로 동작하는지 체크 해보자. 아마 아래 에러 메시지와 추가적인 안내 메시지가 뜨는 것을 볼 수 있을지도 모른다.
자세히 보면, .\psql 을 입력하면 된다고 나와 있다. 이를 반영해서 입력해보면 정상적으로 인식되는 것을 확인할 수 있다.
데이터베이스 백업하기
이제 진짜 데이터베이스 백업을 시도해볼 것이다. 다음 명령어 형식에 맞춰서 입력해보자.
데이터베이스 복원하기 | psql
앞서 백업한 파일이 정상적으로 처리되었는지 확인하기 위한 방법 중 정확한 것은 복원해보면 된다.
아래 형식에 맞춰서 입력해보자
.\psql -U postgres -d postgres2 -f postgres3.sql
정상적으로 실행이 이루어지면 아래 명령어들이 실행되는 것을 볼 수 있다.
백업을 시도한 데이터베이스를 pgadmin 으로 접속해보면 정상적으로 데이터베이스 복원이 완료된 것을 확인할 수 있다.
[마무리] 해당 데이터를 AWS RDS 로 ..
오늘 까지의 여정은 결국 최종적인 목적지인 AWD RDS 에 파일을 올리기 위한 과정중 준비단계에 해당 합니다.
따라서, 다음 포스트는 이제 로컬에 있는 데이터베이스를 PSCP 를 이용해 ec2 인스턴스에 올리고, ec2 인스턴스에서 RDS 데이터베이스에 접근하여 데이터베이스를 복원하는 과정이 될 것 같네요.
누군가는 배포가 쉽다고 했지만, 저에게는 배포라는 과정 동안에 배워야할 게 산더미라 참 어렵다고 느껴지네요. 그래도 계속해서 하다보면 익숙해지고 응용력도 생기지 않을까 기대하며 계속 나아가 봅니다.
2024년 3월 21일 자 변경 사항 |
현재 RDS 를 사용하는 것은 보류 처리하였습니다. VPC 에서 예상치 못한 요금 증가폭이 매서워서 초기에는 보류하고, 나중에 필요하면 확장하는 형식으로 하기로 했습니다. 다만 데이터베이스 복원 과정은 다음 포스트에서 이어집니다. RDS가 아닐 뿐.. |