$ pg_dump -U 소유주 DB명 > 백업파일명
# sample
$ pg_dump -U agens postgres > DB_NAME_bak.sql
테이블 단위 pg_dump 백업
pg_dump -U [user_name][db_name] -t [table_name] > [new_file]
e.g. pg_dump -U agens postgres -t oscar > ./oscar.sql
테이블 단위 pg_dump 복구
psql -U [user_name] -f [dump_file_location][db_name]
e.g. psql -U agens -f ./oscar.sql postgres
$ pg_dump --help
Connection options:
-d, --dbname=DBNAME database to dump
-h, --host=HOSTNAME database server host or socket directory
-p, --port=PORT database server port number
-U, --username=NAME connect as specified database user
-w, --no-password never prompt for password
-W, --password force password prompt (should happen automatically)
# 백업 시
$ pg_dump DB_NAME | gzip > DB_NAME_bak.gz
# 복원 시
$ gunzip -c DB_NAME_bak.gz | psql DB_NAME
$ pg_dumpall > ALL_DB_NAME_bak.sql
pg_dump | pg_dumpall | |
---|---|---|
적용범위 | 지정한 데이터베이스 1개 | PostgreSQL에 구성된 데이터베이스 전체 |
롤 생성 스크립트 (X) | 롤 생성 스크립트 (O) | |
데이터베이스 생성 스크립트 (X) | 데이터베이스 생성 스크립트 (O) | |
SQL 지원 범위 | 테이블/SP 생성 스크립트 (O) | 테이블/SP 생성 스크립트 (O) |
권한 부여 스크립트 (O) | 권한 부여 스크립트 (O) | |
적재 스크립트 (O) | 적재 스크립트(O) |
$ psql -U 소유주 DB_NAME > DB_NAME_bak.sql
$ psql --set ON_ERROR_STOP=1 --single-transaction < DB_NAME_bak.sql
ag_ctl -D $PGDATA stop # 서버 정지
tar cf backup.tar $AGHOME # 백업 실행
mkdir -m 700 -p $AGHOME/backup/data
tar xf backup.tar -C $AGHOME/backup/data
ag_ctl start -D $AGHOME/backup/data
cf ) $PGDATA 는 AG의 data file 경로
postgresql.conf 설정
# archive 설정
wal_level = replica
archive_mode = on
archive_command = 'cp %p $PGDATA/archive/%f.arc'
archive_timeout = 1min
cf) $PGDATA 경로 밑에 archive 폴더 생성
# asql -U agens -d postgres
# archive 설정
show_archive_mode;
SELECT name, setting FROM pg_settings where name IN ('archive_command');
# 백업 시작 (Hot Backup)
SELECT pg_start_backup(now()::text);
# 백업 현황 (in terminal)
cat backup_label
cat tablespace_map
# 백업 종료
SELECT pg_stop_backup();