PostgreSQL 백업 및 복구 방법

PostgreSQL에서 데이터를 백업하는 방법이 몇 가지 있습니다. 이 글에서는 비교적 직관적인 방법으로 볼 수 있는, 텍스트 파일 덤프를 이용해서 sql문을 저장하고 데이터를 복구하는 방법을 알아보겠습니다. 사용한 OS는 CentOS 7입니다.

PostgreSQL 백업 및 복구 방법

먼저 현재 저장된 데이터를 보면 testdb라는 데이터베이스와 users 테이블에 일부 샘플 데이터가 있습니다. 이 데이터를 지우고 복구하는 테스트를 진행합니다. 

postgres=# \l
                                  List of databases
   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges
-----------+----------+----------+-------------+-------------+-----------------------
 postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
 template0 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
 template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
 testdb    | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
(4 rows)

 

postgres=# select * from users;
 id |  name   |       email
----+---------+--------------------
  1 | User 1  | user1@example.com
  2 | User 2  | user2@example.com
  3 | User 3  | user3@example.com
  4 | User 4  | user4@example.com
  5 | User 5  | user5@example.com
  6 | User 6  | user6@example.com
  7 | User 7  | user7@example.com
  8 | User 8  | user8@example.com
  9 | User 9  | user9@example.com
 10 | User 10 | user10@example.com
(10 rows)

 

1. 데이터 백업 경로 생성

데이터 백업은 슈퍼계정인 postgres로 합니다. 쉘에서 postgres 사용자로 전환합니다.

[root@localhost /]# sudo -i -u postgres
-bash-4.2$

 

백업 데이터를 저장할 디렉토리를 생성합니다. postgres가 권한을 가지고 있는 경로로 해야 하기 때문에 /var/lib/pgsql 밑으로 pgsql_backup을 만들겠습니다.

-bash-4.2$ cd
-bash-4.2$ pwd
/var/lib/pgsql

 

-bash-4.2$ mkdir pgsql_backup

 

2. 데이터 백업

데이터 백업은 pg_dump (부분 백업) 또는 pg_dumpall (전체 백업) 명령을 사용합니다.

 

[특정 데이터베이스만 백업]

pg_dump [백업할 데이터베이스명] > [백업 경로]

 

[모든 데이터베이스 백업]

pg_dumpall > [백업 경로]

 

저는 모든 데이터베이스를 백업하는 방법으로 진행하겠습니다. 백업 파일명은 alldb.sql로 정했습니다.

-bash-4.2$ pg_dumpall > /var/lib/pgsql/pgsql_backup/alldb.sql

 

백업 완료 후 해당 경로에 가보시면 설정한 이름으로 텍스트 파일이 생성된 걸 보실 수 있습니다. sql문으로 구성된 텍스트 파일이기 때문에 내용도 볼 수 있습니다.

 

3. (옵션) 데이터 삭제

제가 복구 테스트를 위해 데이터를 삭제하는 부분입니다. users 테이블에 있는 값을 delete하고 testdb를 drop 하겠습니다.

postgres=# delete from users;
DELETE 10

 

postgres=# drop database testdb;
DROP DATABASE

 

데이터 확인

 

4. 데이터 복구

데이터가 복구되는 원리는 앞서 백업한 sql문을 다시 postgresql에서 실행하는 것입니다.

psql -U postgres -f /var/lib/pgsql/pgsql_backup/alldb.sql

 

5. 복구 데이터 확인

데이터가 정상적으로 복구되었습니다.

 

데이터 복구

반응형

'Database' 카테고리의 다른 글

SQL, AVG 함수 사용법 (평균 계산)  (0) 2023.05.31
SQL, SUM 함수 사용법 (합계 계산)  (0) 2023.05.30
CentOS PostgreSQL 설치 방법  (0) 2023.05.28
MongoDB 백업 및 복원 방법  (0) 2023.05.28
CentOS 7 MongoDB 설치 방법 (YUM)  (0) 2023.05.27

댓글

Designed by JB FACTORY