OS환경 : Oracle Linux 7.6 (64bit)
DB 환경 : PostgreSQL 10
방법 : PostgreSQL 10 pg_dump 백업 방법
샘플 테이블 및 데이터를 생성한 뒤 pg_dump를 이용해 백업하는 방법에 대해 설명함
유저 생성
1 2 | SQL> create user 유저명 password '패스워드' createdb(db생성 권한부여); SQL> create user imsi password 'imsi12345' createdb; |
psql 나가기
1 | SQL> \q |
imsi 유저로 로그인 후 imsi 데이터베이스 생성
1 2 3 | $ psql -U imsi SQL> create database imsi; SQL> \q |
imsi 유저로 imsi database로그인
1 | $ psql -U imsi -d imsi |
샘플 테이블 및 데이터 생성
1 2 3 4 5 6 7 8 | SQL> CREATE TABLE t AS SELECT gs as idx, 'imsidata' || gs AS test_string, md5(random()::text) AS random_string FROM generate_series(1, 100000000) AS gs; |
테이블 용량 확인
1 2 3 4 5 | SQL> select pg_size_pretty(pg_total_relation_size('t')) as size; size --------- 8054 MB (1 row) |
용량 더늘리기(반복)
1 | SQL> insert into t select * from t; |
최종용량
1 2 3 4 5 | SQL> select pg_size_pretty(pg_total_relation_size('t')) as size; size ------- 39 GB (1 row) |
남은 용량 확인
1 2 3 4 5 6 7 8 9 10 11 | $ df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 1.8G 0 1.8G 0% /dev tmpfs 1.8G 8.0K 1.8G 1% /dev/shm tmpfs 1.8G 9.3M 1.8G 1% /run tmpfs 1.8G 0 1.8G 0% /sys/fs/cgroup /dev/mapper/ol_oel7-root 36G 28G 7.8G 78% / /dev/sda1 1014M 226M 789M 23% /boot tmpfs 368M 12K 368M 1% /run/user/42 tmpfs 368M 0 368M 0% /run/user/0 /dev/sdb1 79G 41G 35G 55% /dump |
pg_dump 명령으로 export
1 | $ pg_dump -d imsi > imsidump.dmp |
export 테스트 결과
용량 : 40GB
시작시각 : 06:20:13
끝난시각 : 06:40:14
export 총 시간 : 20분
단순계산 40GB -> 20분
400GB -> 200분(3시간 20분)
dump 파일 용량
1 2 3 4 5 | $ ls -lh total 28G drwx------. 20 postgres postgres 4.0K Oct 31 05:43 data drwx------. 2 postgres postgres 16K Oct 31 05:40 lost+found -rw-r--r--. 1 postgres postgres 28G Oct 31 06:40 imsidump.dmp |
40GB를 뽑았지만 실제로는 28GB만 나옴
서버 남은 용량 확인
1 2 3 4 5 6 7 8 9 10 11 | # df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 1.8G 0 1.8G 0% /dev tmpfs 1.8G 8.0K 1.8G 1% /dev/shm tmpfs 1.8G 9.3M 1.8G 1% /run tmpfs 1.8G 0 1.8G 0% /sys/fs/cgroup /dev/mapper/ol_oel7-root 36G 28G 7.8G 78% / /dev/sda1 1014M 226M 789M 23% /boot tmpfs 368M 12K 368M 1% /run/user/42 tmpfs 368M 0 368M 0% /run/user/0 /dev/sdb1 79G 68G 6.9G 91% /dump |
head 명령으로 dump 파일 내용 확인
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | # head -70 imsidump.dmp -- -- PostgreSQL database dump -- -- Dumped from database version 10.10 -- Dumped by pg_dump version 10.10 SET statement_timeout = 0; SET lock_timeout = 0; SET idle_in_transaction_session_timeout = 0; SET client_encoding = 'UTF8'; SET standard_conforming_strings = on; SELECT pg_catalog.set_config('search_path', '', false); SET check_function_bodies = false; SET xmloption = content; SET client_min_messages = warning; SET row_security = off; -- -- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: -- CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog; -- -- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: -- COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: t; Type: TABLE; Schema: public; Owner: imsi -- CREATE TABLE public.t ( idx integer, test_string text, random_string text ); ALTER TABLE public.t OWNER TO imsi; -- -- Data for Name: t; Type: TABLE DATA; Schema: public; Owner: imsi -- COPY public.t (idx, test_string, random_string) FROM stdin; 1 imsidata1 0c3f96a7a2bb64aad6491208305fb7e9 2 imsidata2 c0a5cc8cf9f713b837fcc6517d5ccad5 3 imsidata3 5769436fc020de09dcadea3f4c289007 4 imsidata4 1c56ab749b09cac371befd889aabd9e1 5 imsidata5 50e8b4b1735db315bf570ac4fcef47ca 6 imsidata6 46a9f662459869937b7572bac219961d 7 imsidata7 93d4effeeeb8027b03bb0453cd9396ad 8 imsidata8 ffc9d223f7512e6ad578111f12b2b949 9 imsidata9 cda614efa83c3a897a45f1b4c6836d81 10 imsidata10 ff3556c4c503d827635fa9e672fb2a61 11 imsidata11 98b467aee99b13164625f8ba2a6963ef 12 imsidata12 af27840869da1077efd7b397d1990b81 13 imsidata13 bfb1594b4587d82be95b6513be154157 14 imsidata14 b64ec49a8b0bc9dc8d1b1c1aacacce9b 15 imsidata15 e494f6d71541a6ca1d2c5dd3985ffcbe 16 imsidata16 58fb6d3d0d9bd9cda9ef8bd076f6df5e |
테이블 생성 구문과 insert 구문은 아니지만 COPY 구문이 들어있음
imsi 데이터베이스 삭제
1 2 3 | SQL> drop database imsi; ERROR: cannot drop the currently open database SQL> \q |
지금 접속해 있는 db가 imsi db여서 삭제가 안됨
다시 -d 옵션 없이 접속 후 imsi 데이터베이스 삭제
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | $ psql -U imsi SQL> \l List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges -----------+----------+----------+-------------+-------------+----------------------- imsi | imsi | UTF8 | en_US.UTF-8 | en_US.UTF-8 | 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 (4 rows) SQL> drop database imsi; DROP DATABASE |
dump 파일을 다시 postgreSQL로 넣기 위해서는 먼저 데이터베이스를 생성해줘야함
1 2 3 4 | $ psql -U imsi SQL> create database imsi; CREATE DATABASE SQL> \q |
아래 형식으로 dump파일 import 작업 진행
1 2 | $ psql -f (덤프파일명) (db 명) $ psql -f imsidump.dmp imsi |
import 테스트 결과
용량 : 40GB
시작시각 : 20:25:48
끝난시각 : 20:41:38
import 총 시간 : 16분
단순계산 40GB -> 16분
400GB -> 160분
인덱스가 없어서 빠른듯 함 인덱스도 같은 넣고 다시 테스트해봐야할듯함
참조 : https://blog.gaerae.com/2015/09/postgresql-generate-series.html
https://positivemh.tistory.com/259
https://positivemh.tistory.com/464
'PostgreSQL > Admin' 카테고리의 다른 글
PostgreSQL 10 유저 Password_encryption 변경 (0) | 2020.02.24 |
---|---|
PostgreSQL 10, oracle fdw extension 으로 오라클 DB와 연결(dblink) 정리 (0) | 2019.11.27 |
oracle_utils.c:22:17: fatal error: oci.h: No such file or directory (0) | 2019.11.27 |
linux7.6에 PostgreSQL 10 + PG-Strom 2.2 GPU 사용 테스트 (0) | 2019.11.20 |
PostgreSQL 10 유저 superuser 권한, 롤 부여 (0) | 2019.11.04 |