PostgreSQL 백업 및 복원

PostgreSQLBeginner
지금 연습하기

소개

이 랩에서는 PostgreSQL 데이터베이스를 백업하고 복원하는 필수 기술을 배우게 됩니다. 데이터 손실을 방지하기 위해 백업을 올바르게 관리하는 것은 모든 데이터베이스 관리자에게 중요한 기술입니다.

샘플 데이터베이스를 생성하고 데이터를 채우는 것부터 시작합니다. 그런 다음 pg_dump 유틸리티를 사용하여 데이터베이스의 전체 백업을 생성합니다. 이어서 psql 명령줄 도구를 사용하여 백업 파일에서 데이터베이스를 복원하는 방법을 배우게 됩니다. 마지막으로 데이터베이스에서 단일 특정 테이블을 백업하고 복원하는 연습을 합니다.

샘플 데이터베이스 생성 및 채우기

이 단계에서는 salesdb라는 PostgreSQL 데이터베이스를 생성하고 샘플 데이터로 채우게 됩니다. 이 데이터베이스는 후속 단계에서 백업 및 복원 작업을 위한 기반이 됩니다.

1 단계: 데이터베이스 생성

먼저 터미널에서 createdb 명령줄 유틸리티를 사용하여 salesdb 데이터베이스를 생성합니다. 이는 CREATE DATABASE SQL 명령에 대한 편리한 래퍼입니다.

createdb salesdb

2 단계: 데이터베이스에 연결

다음으로 psql 대화형 터미널을 사용하여 새로 생성된 salesdb 데이터베이스에 연결합니다.

psql -d salesdb

이제 salesdb=#와 같이 표시되는 psql 프롬프트가 나타나며, 이는 salesdb 데이터베이스에 연결되었음을 나타냅니다.

3 단계: 테이블 생성 및 데이터 삽입

psql 셸 내에서 다음 SQL 명령을 실행하여 customersproducts라는 두 개의 테이블을 생성합니다.

customers 테이블 생성:

CREATE TABLE customers (
    id SERIAL PRIMARY KEY,
    name VARCHAR(100) NOT NULL
);

products 테이블 생성:

CREATE TABLE products (
    id SERIAL PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    price NUMERIC(10, 2)
);

이제 두 테이블에 샘플 데이터를 삽입합니다.

customers에 데이터 삽입:

INSERT INTO customers (name) VALUES ('Alice'), ('Bob');

products에 데이터 삽입:

INSERT INTO products (name, price) VALUES ('Laptop', 1200.00), ('Mouse', 25.00);

4 단계: 데이터 확인

데이터가 올바르게 삽입되었는지 확인하려면 두 테이블에 대해 SELECT 쿼리를 실행합니다.

SELECT * FROM customers;

출력은 다음과 같아야 합니다.

 id | name
----+-------
  1 | Alice
  2 | Bob
(2 rows)

이제 products 테이블을 확인합니다.

SELECT * FROM products;

출력은 다음과 같아야 합니다.

 id |  name  |  price
----+--------+---------
  1 | Laptop | 1200.00
  2 | Mouse  |   25.00
(2 rows)

마지막으로 psql 셸을 종료하여 일반 터미널로 돌아갑니다.

\q

다음 단계를 위한 데이터베이스 설정을 성공적으로 완료했습니다.

전체 데이터베이스 백업

이 단계에서는 pg_dump 유틸리티를 사용하여 salesdb 데이터베이스의 전체 백업을 생성합니다. pg_dump는 데이터베이스를 재구성하는 데 사용할 수 있는 SQL 명령이 포함된 파일을 생성합니다.

pg_dump 이해하기

pg_dump는 단일 데이터베이스를 백업하기 위한 표준 PostgreSQL 유틸리티입니다. 데이터베이스가 활발하게 사용 중인 경우에도 일관된 스냅샷을 생성합니다. 기본적으로 일반 텍스트 SQL 스크립트 파일을 생성합니다.

1 단계: 백업 수행

터미널에서 다음 명령을 실행하여 salesdb 데이터베이스를 프로젝트 디렉터리 내의 salesdb.sql이라는 파일로 덤프합니다.

pg_dump salesdb > ~/project/salesdb.sql

명령을 분석해 보겠습니다.

  • pg_dump salesdb: salesdb 데이터베이스를 백업하려는 것을 지정합니다.
  • > ~/project/salesdb.sql: 명령의 표준 출력을 ~/project 디렉터리의 salesdb.sql이라는 파일로 리디렉션합니다.

2 단계: 백업 파일 확인

먼저 ls 명령을 사용하여 파일이 생성되었는지 확인합니다.

ls -l ~/project

파일 목록에서 salesdb.sql을 볼 수 있어야 합니다.

다음으로 백업 파일의 내용을 검사하여 pg_dump가 무엇을 생성했는지 이해합니다. head 명령을 사용하여 처음 몇 줄을 봅니다.

head ~/project/salesdb.sql

출력에는 pg_dump 버전 및 데이터베이스 환경 설정을 위한 명령에 대한 주석을 포함하여 SQL 스크립트의 시작 부분이 표시됩니다. 이는 백업 파일이 유효한 SQL 스크립트임을 확인합니다.

백업에서 데이터베이스 복원

이 단계에서는 일반 텍스트 SQL 백업 파일에서 데이터베이스를 복원하는 방법을 배우게 됩니다. 새 데이터베이스를 생성한 다음 psql 유틸리티를 사용하여 백업 파일의 SQL 명령을 실행합니다.

데이터베이스 복원 이해하기

pg_dump로 생성된 일반 텍스트 SQL 파일의 경우 psql 유틸리티가 복원을 위한 표준 도구입니다. 파일에서 SQL 명령을 읽고 지정된 데이터베이스에 대해 실행하여 테이블과 데이터를 효과적으로 다시 생성합니다.

1 단계: 복원을 위한 새 데이터베이스 생성

원본 데이터베이스를 덮어쓰지 않도록 백업을 새롭고 비어 있는 데이터베이스로 복원합니다. salesdb_restored라는 데이터베이스를 생성합니다.

createdb salesdb_restored

2 단계: 백업 복원

이제 psql을 사용하여 salesdb.sql 백업을 salesdb_restored 데이터베이스로 복원합니다.

psql -d salesdb_restored -f ~/project/salesdb.sql

명령을 분석해 보겠습니다.

  • psql: 스크립트 파일도 실행할 수 있는 PostgreSQL 대화형 터미널입니다.
  • -d salesdb_restored: 복원을 위한 대상 데이터베이스를 지정합니다.
  • -f ~/project/salesdb.sql: 실행할 SQL 명령이 포함된 입력 파일을 지정합니다.

CREATE TABLEINSERT와 같이 실행되는 SQL 명령의 출력을 볼 수 있습니다.

3 단계: 복원된 데이터베이스 확인

salesdb_restored 데이터베이스에 연결하여 테이블과 데이터가 성공적으로 복원되었는지 확인합니다.

psql -d salesdb_restored

psql 셸 내에서 먼저 테이블을 나열합니다.

\dt

customersproducts 테이블이 표시되어야 합니다.

              List of relations
 Schema |   Name    | Type  |  Owner
--------+-----------+-------+----------
 public | customers | table | labex
 public | products  | table | labex
(2 rows)

다음으로 customers 테이블을 쿼리하여 데이터가 있는지 확인합니다.

SELECT * FROM customers;

출력은 원본 데이터와 일치해야 합니다.

 id | name
----+-------
  1 | Alice
  2 | Bob
(2 rows)

psql 셸을 종료합니다.

\q

백업에서 데이터베이스를 성공적으로 복원했습니다.

단일 테이블 백업 및 복원

때로는 전체 데이터베이스가 아닌 특정 테이블만 백업하거나 복원해야 할 수도 있습니다. pg_dump 유틸리티는 -t 옵션을 사용하여 이를 지원합니다.

1 단계: 단일 테이블 백업

원본 salesdb 데이터베이스에서 customers 테이블만 백업해 보겠습니다.

터미널에서 다음 명령을 실행합니다.

pg_dump -d salesdb -t customers > ~/project/customers_table.sql
  • -d salesdb: 소스 데이터베이스를 지정합니다.
  • -t customers: 덤프할 대상 테이블을 지정합니다.
  • > ~/project/customers_table.sql: 출력을 새 백업 파일로 리디렉션합니다.

2 단계: 데이터 손실 시뮬레이션

복원 프로세스를 시연하기 위해 먼저 salesdb_restored 데이터베이스에서 customers 테이블을 삭제하여 실수로 삭제된 것을 시뮬레이션해 보겠습니다.

psql -d salesdb_restored -c "DROP TABLE customers;"

명령은 DROP TABLE을 출력하여 삭제를 확인합니다.

3 단계: 단일 테이블 복원

이제 테이블별 백업 파일에서 customers 테이블을 salesdb_restored 데이터베이스로 복원합니다.

psql -d salesdb_restored -f ~/project/customers_table.sql

4 단계: 테이블 복원 확인

마지막으로 salesdb_restored 데이터베이스에 연결하여 customers 테이블이 다시 돌아왔는지, 그리고 products 테이블은 그대로 유지되었는지 확인합니다.

psql -d salesdb_restored

psql 내에서 테이블을 나열합니다.

\dt

customersproducts 테이블이 다시 나열된 것을 볼 수 있어야 합니다.

              List of relations
 Schema |   Name    | Type  |  Owner
--------+-----------+-------+----------
 public | products  | table | labex
 public | customers | table | labex
(2 rows)

복원된 customers 테이블을 쿼리하여 데이터가 손상되지 않았는지 확인합니다.

SELECT * FROM customers;

출력에는 원본 고객 데이터가 표시되어야 합니다.

 id | name
----+-------
  1 | Alice
  2 | Bob
(2 rows)

psql 셸을 종료합니다.

\q

개별 테이블을 성공적으로 백업하고 복원했습니다.

요약

이 실습에서는 PostgreSQL 데이터베이스를 백업하고 복원하는 기본적인 절차를 배웠습니다. 이러한 기술은 데이터 보호 및 재해 복구에 필수적입니다.

다음과 같은 방법을 배웠습니다.

  • 데이터베이스를 생성하고 테이블과 데이터로 채우는 방법.
  • pg_dump를 사용하여 전체 데이터베이스를 일반 텍스트 SQL 파일로 내보내는 방법.
  • psql을 사용하여 SQL 백업 파일에서 새 데이터베이스로 데이터베이스를 복원하는 방법.
  • pg_dump-t 옵션을 사용하여 데이터베이스에서 단일 테이블을 백업하는 방법.
  • 데이터베이스로 단일 테이블을 복원하는 방법.

이러한 명령을 숙달하면 PostgreSQL 데이터를 효과적으로 관리하고 보호할 수 있는 자신감을 얻게 됩니다.