postgresql 연속 압축 파일 및 시간 복구 작업
14052 단어 postgresql압축 파일타임 포인트
앞에서 우 리 는 pgsql 의 흐름 복 제 를 통 해 생산 환경 에서 사용 가능 한 환경 을 구축 하여 서비스의 지속 성 을 확보 하 는 것 을 소개 했다.데이터 베 이 스 를 주기 적 으로 백업 하여 데이터 의 손실 을 방지 하려 면 연속 압축 파일 이 필요 합 니 다.이것 은 대형 데이터 뱅 크 의 증분 백업 과 복구 뿐만 아니 라 standby 미 러 백업 을 구축 하 는 데 도 사용 할 수 있 습 니 다.
PostgreSQL 은 기본적으로 비 압축 파일 모드 에 있 습 니 다.압축 파일 모드 를 시작 합 니 다.주로 세 가지 인자 와 관련 됩 니 다:wallevel,archive_mode 와 archivecommandwal_level 매개 변 수 는 기본적으로 mininal 입 니 다.이 매개 변 수 를 archive 또는 그 이상 의 단계 로 설정 하면 압축 파일 을 열 수 있 습 니 다.post gresql 에서 압축 파일 로 그 를 전송 해 야 할 때 archive 를 호출 합 니 다.command 에서 지정 한 셸 명령 입 니 다.
압축 파일 전송 에 성 공 했 을 때 셸 명령 은 0 으로 되 돌아 가 야 합 니 다.이때 postgresql 은 압축 파일 이 전송 에 성공 했다 고 생각 하기 때문에 압축 파일 을 삭제 하거나 재 활용 할 수 있 습 니 다.셸 명령 이 0 이 아 닌 값 으로 돌아 갈 때,postgresql 은 전송 되 지 않 은 모든 압축 파일 로 그 를 보존 하고,성공 할 때 까지 계속 다시 전송 을 시도 합 니 다.압축 파일 명령 이 계속 성공 하지 않 으 면 pgxlog 디 렉 터 리 는 지속 적 으로 증가 하여 서버 저장 공간 을 다 소모 할 가능성 이 있 습 니 다.이때 postgresql 은 저장 공간 을 방출 할 때 까지 PANIC 를 닫 습 니 다.
또한 압축 파일 WAL 로 그 를 이 컴퓨터 에 저장 하 는 것 은 위험 이 매우 높 아 추천 되 지 않 습 니 다.post gresql 아 카 이브 를 통 해command 는 WAL 로 그 를 저장 하 는 유연성 을 제공 합 니 다.압축 파일 로 그 를 마 운 트 된 NFS 디 렉 터 리,테이프,CD 에 기록 할 수도 있 고,WAL 로 그 를 ssh/scp,rsync 를 통 해 다른 컴퓨터 로 전송 하여 저장 할 수도 있 습 니 다.
**주의:*archivecommand 및 restorecommand 명령 은 PostgreSQL 을 실행 하 는 시스템 사용자 로 실 행 됩 니 다.Centos 시스템 에서 이 시스템 사용 자 는 postges 입 니 다.
환경 설명
Role
IP
계통
데이터베이스
소스 라 이브 러 리
10.10.10.60
Centos6.5
postgresql 9.2
백업 라 이브 러 리
10.10.10.61
Centos6.5
postgresql 9.2
필요 설명:원본 라 이브 러 리 에서 압축 파일 로 그 를 만 들 고 백업 라 이브 러 리 에 있 는 압축 파일 디 렉 터 리/data/pg 로 전송 합 니 다.archive;백업 라 이브 러 리 는 압축 파일 로 그 를 이용 하여 원본 라 이브 러 리 의 임의의 시간 대 데 이 터 를 복원 합 니 다.
메모:기본 환경 은 post gresql 흐름 을 기반 으로 복사 되 지만 백업 라 이브 러 리 는 독립 된 라 이브 러 리 로 서 recovery.conf 의 standby 를 확보 하 십시오.mode=off
환경 설정
1.ssh 비밀번호 없 는 로그 인
우리 가 백업 하고 복원 하 는 과정 에서 사용 하 는 archivecommand 와 restorecommand 명령 은 모두 postgres 사용자 로 실행 되 기 때문에 우 리 는 postgres 사용 자 를 대상 으로 ssh 암호 없 는 로그 인 을 실현 해 야 합 니 다.
#
ssh-ketgen -t rsa
scp id_rsa.pub [email protected]:/var/lib/pgsql/.ssh/authorized_keys
#
ssh-ketgen -t rsa
scp id_rsa.pub [email protected]:/var/lib/pgsql/.ssh/authorized_keys
**주의:**yum 에 postgresql 을 설치 할 때 기본 으로 생 성 된 postgres 사용자 의 집 디 렉 터 리 는/var/lib/pgsql 에 있 습 니 다.2.백업 라 이브 러 리 의 압축 파일 디 렉 터 리 설정
#
mkdir -p /data/pg_archive
chmod postgres.postgres /data/pg_archive
설명:원본 라 이브 러 리 에서 생 성 된 압축 파일 로 그 를 다른 곳 백업 라 이브 러 리 에 저장 할/data/pgarchive 아래.3.원본 라 이브 러 리 의 postgresql.conf 수정
postgresql.conf 에 다음 줄 을 추가 합 니 다.
#
archive_mode = on
archive_command = 'ssh 10.10.10.60 test ! -f /data/pg_archive/%f && scp %p 10.10.10.60:/data/pg_archive/%f'
그 중에서%p 는 wal 로그 파일 의 경 로 를 표시 하고%f 는 wal 로그 파일 의 이름 을 표시 합 니 다.archive_command 는 백업 라 이브 러 리 의 압축 파일 디 렉 터 리 에 같은 이름 의 파일 이 있 는 지 확인 하고 데 이 터 를 잃 어 버 리 지 않도록 원본 라 이브 러 리 에 생 성 된 압축 파일 로 그 를 백업 라 이브 러 리 에 저장 하 는/data/pg 가 존재 하지 않 는 다 면archive 디 렉 터 리 아래.주의:
(a)archive_timeout 강제 N 초 후 압축 파일 을 한 번 진행 합 니 다.설정 이 너무 작 으 면 곧 wal 을 초과 합 니 다.keep_segments=16,데이터 덮어 쓰 기 를 잃 어 버 렸 으 므 로 맹목적 으로 설정 하지 마 십시오.
(b)압축 파일 모드 의 오픈 은 wal 에 만 있 습 니 다.level = hot_standby 또는 archive
4.원본 라 이브 러 리 를 다시 불 러 오고 보기
pg_ctl reload -D /data/pgsql/data
postgres=# show archive_mode;
archive_mode
--------------
on
(1 row)
아 날로 그 압축 파일 백업1.원본 라 이브 러 리 의 pg 보기xlog 디 렉 터 리
-bash-4.2$ ll pg_xlog
total 16388
-rw-------. 1 postgres postgres 16777216 Apr 21 13:42 000000010000000000000001
drwx------. 2 postgres postgres 4096 Apr 21 13:36 archive_status
이때 archivestatus 디 렉 터 리 는 압축 파일 로 그 를 저장 하 는 상태 입 니 다.압축 파일 이 생 겼 지만 전송 에 성공 하지 못 하면 xxx.ready 이 고 전송 이 성공 할 때 까지 유지 한 다음 상태 가 xxx.done 으로 변 합 니 다.이 디 렉 터 리 가 비어 있 습 니 다.2.원본 라 이브 러 리 에 데이터 추가
이 때 데이터베이스 가 비어 있 기 때문에 testdb 라 이브 러 리 를 만 들 고 데 이 터 를 추가 합 니 다.
postgres=# create database testdb;
CREATE DATABASE
postgres=# create table t1(id int4,create_time timestamp(0) without time zone);
CREATE TABLE
postgres=# insert into t1 values(1,now());
INSERT 0 1
postgres=# insert into t1 values(2,now());
INSERT 0 1
postgres=# select * from t1;
id | create_time
----+---------------------
1 | 2016-04-21 13:49:34
2 | 2016-04-21 13:49:48
(2 rows)
3.원본 라 이브 러 리 에서 수 동 으로 압축 파일 전환
postgres=# select pg_switch_xlog();
pg_switch_xlog
----------------
0/1821010
(1 row)
정상 적 인 상황 에서 wal 로그 세그먼트 는 16M 에 이 르 면 자동 으로 압축 됩 니 다.테스트 를 통 해 우 리 는 수 동 으로 압축 파일 을 전환 합 니 다.4.소스 라 이브 러 리 pg 보기xlog 디 렉 터 리
-bash-4.2$ ll pg_xlog/
total 16388
-rw-------. 1 postgres postgres 16777216 Apr 21 13:42 000000010000000000000001
drwx------. 2 postgres postgres 4096 Apr 21 13:36 archive_status
-bash-4.2$ ls pg_xlog/
000000010000000000000001 000000010000000000000002 archive_status
-bash-4.2$ ls pg_xlog/archive_status/
000000010000000000000001.ready
이 때 압축 파일 로그 의 상 태 는 ready 입 니 다.이 로그 가 전송 되 지 않 았 음 을 설명 합 니 다.로 그 를 보십시오.
vim /data/pgsql/pg_log/postgresql-Thu.log
ssh: connect to host 10.10.10.60 port 22: Connection timed out^M
FATAL: archive command failed with exit code 255
DETAIL: The failed archive command was: ssh 10.10.10.68 test ! -f /data/pg_archive/000000010000000000000001 && scp pg_xlog/000000010000000000000001 10.10.10.60:/data/pg_archive/000000010000000000000001
LOG: archiver process (PID 22284) exited with exit code 1
원래 ip 주소 오류 로 인해 ssh 를 통 해 전송 할 수 없 었 고 ip 을 10.10.10.61 로 변경 한 후에 다시 압축 파일 이 생 겨 야 다시 전송 할 수 있 습 니 다.메모:압축 파일 을 터치 하 는 방법 은 세 가지 가 있 습 니 다.
1.wal 로 그 를 수 동 으로 전환,select pgswitch_xlog()
2.wal 로그 가 가득 차 면 압축 파일 을 터치 합 니 다.설정 파일 이 기본적으로 16M 에 도달 하면 압축 파일 을 터치 합 니 다.walkeep_segments = 16
3.압축 파일 시간 초과 시 압축 파일 트리거,archivetimeout
여기 서 우리 가 사용 하 는 것 은 핸드 기어 전환 압축 파일 이다.
postgres=# insert into t1 values(3,now());
INSERT 0 1
postgres=# insert into t1 values(4,now());
INSERT 0 1
postgres=# select pg_switch_xlog();
pg_switch_xlog
----------------
0/2000310
(1 row)
postgres=# select pg_switch_xlog();
pg_switch_xlog
----------------
0/3000000
(1 row)
postgres=# select pg_switch_xlog();
pg_switch_xlog
----------------
0/30000D8
(1 row)
pg 다시 보기xlog 디 렉 터 리
-bash-4.2$ ll pg_xlog/archive_status/
total 0
-rw-------. 1 postgres postgres 0 Apr 21 13:51 000000010000000000000001.done
-rw-------. 1 postgres postgres 0 Apr 21 14:00 000000010000000000000002.done
-rw-------. 1 postgres postgres 0 Apr 21 14:04 000000010000000000000003.done
5.백업 라 이브 러 리 의 압축 파일 디 렉 터 리 보기
-bash-4.2$ ll /data/pg_archive/
total 49152
-rw-------. 1 postgres postgres 16777216 Apr 21 14:04 000000010000000000000001
-rw-------. 1 postgres postgres 16777216 Apr 21 14:04 000000010000000000000002
-rw-------. 1 postgres postgres 16777216 Apr 21 14:04 000000010000000000000003
이로써 압축 파일 백업 이 완료 되 었 으 니 압축 파일 을 이용 하여 복원 하 는 것 을 소개 합 니 다.압축 파일 에서 PITR 복구 시 뮬 레이 션
PITR 복 구 는 파일 시스템 백업 과 wal 파일 을 기반 으로 하 는 백업 이기 때문에 우선 기본 백업 이 필요 합 니 다.그리고 이 를 바탕 으로 백업 에 wal 압축 파일 로 그 를 재생 합 니 다.구체 적 인 절 차 는 다음 과 같다.
1.pg 사용basebackup 기초 백업 진행
pg_basebackup 은 replication 복사 프로 토 콜 을 사용 하기 때문에 원본 라 이브 러 리 에 pg 를 설정 해 야 합 니 다.hba.conf 파일 은 로 컬 이 든 네트워크 를 통 해서 든 replication 을 허용 합 니 다.
vim pg_hba.conf
# , replication pg_basebackup
host replication rep 127.0.0.1/32 md5
host replication rep 10.10.10.61/8 md5
#
pg_ctl reload -D /data/pgsql/data
추가 완료 후 pgsql 을 다시 불 러 오 십시오.백업 라 이브 러 리 에서 pg 실행basebackup 원 격 기초 백업
-bash-4.2$ pg_basebackup -D /data/pgsql/data -Fp -Xs -v -P -h 10.10.10.61 -p 5432 -U rep
Password:
transaction log start point: 0/5000020
pg_basebackup: starting background WAL receiver
26664/26664 kB (100%), 1/1 tablespace
transaction log end point: 0/50000E0
pg_basebackup: waiting for background process to finish streaming...
pg_basebackup: base backup completed
-D 는 기본 백업 을 받 는 디 렉 터 리 를 표시 합 니 다.기본 백업 을/data/pgsql/data 에 저장 합 니 다.-X 매개 변 수 는 백업 이 완료 되면 메 인 라 이브 러 리 에 pg 를 수집 합 니 다.basebackup 실행 기간 에 발생 하 는 WAL 로 그 는 9.2 버 전 이후-Xs 즉 stream 형식 을 지원 합 니 다.이 모드 는 주 라 이브 러 리 의 WAL 파일 을 수집 하지 않 고 stream 복사 방식 으로 주 라 이브 러 리 를 직접 추적 할 수 있 습 니 다.
2.라 이브 러 리 설정 파일 수정
모든 프로필 은 원본 라 이브 러 리 에서 백업 되 어 있 기 때문에 수정 이 필요 합 니 다.
vim postgresql.conf
#archive_mode = on
#archive_command = 'ssh 192.168.3.139 test ! -f /data/pg_archive/%f && scp %p 192.168.3.139:/data/pg_archive/%f'
3.원본 라 이브 러 리 의 시간 확인 에 필요 한 복구 시점 확인
postgres=# select * from t1;
id | create_time
----+---------------------
1 | 2016-04-21 13:49:34
2 | 2016-04-21 13:49:48
3 | 2016-04-21 14:00:22
4 | 2016-04-21 14:00:25
5 | 2016-04-21 14:49:11
6 | 2016-04-21 14:49:14
7 | 2016-04-21 14:49:17
(4 rows)
이번 기초 백업 은'4|2016-04-21 14:00:25'라 는 기록 을 나중에 보관 하 는 것 이 고,뒤의 5,6,7 세 기록 은 기초 백업 을 통 해 생 성 되 기 때문에 5,6,7 의 기록 을 복원 하려 면 기초 백업 을 통 해 5,6,7 의 압축 파일 로 그 를 재생 해 야 한다.이 기록 에서 데 이 터 를 6 으로 복원 하려 면 recovery.conf 에서 다음 과 같은 설정 을 해 야 합 니 다.
cp /usr/share/pgsql/recovery.conf.sample /data/pgsql/data/recovery.conf
vim recovery.conf
restore_command = 'cp /data/pg_archive/%f %p'
recovery_target_time = '2016-04-21 14:49:14'
**주의:*recovery.conf 중 standbymode 는 off 이 어야 합 니 다.그렇지 않 으 면 백업 라 이브 러 리 는 즉시 복구 하 는 것 이 아니 라 라 라 이브 러 리 로 시 작 됩 니 다.4.백업 라 이브 러 리 시작
백업 라 이브 러 리 시작 중 PITR 이 지정 한 시점 으로 복 구 됩 니 다.
pg_ctl start -D /data/pgsql/data
#
vim /data/pgsql/pg_log/postgresql-Thu.log
LOG: database system was interrupted; last known up at 2016-04-21 14:34:29 CST
LOG: starting point-in-time recovery to 2016-04-21 14:49:14+08
LOG: restored log file "000000010000000000000005" from archive
LOG: redo starts at 0/5000020
LOG: consistent recovery state reached at 0/50000E0
LOG: restored log file "000000010000000000000006" from archive
LOG: recovery stopping before commit of transaction 1898, time 2016-04-21 14:49:16.635744+08
LOG: redo done at 0/6000398
LOG: last completed transaction was at log time 2016-04-21 14:49:13.786388+08
cp: cannot stat ‘/data/pg_archive/00000002.history': No such file or directory
LOG: selected new timeline ID: 2
cp: cannot stat ‘/data/pg_archive/00000001.history': No such file or directory
LOG: archive recovery complete
LOG: autovacuum launcher started
LOG: database system is ready to accept connections
#
postgres=# select * from t1;
id | create_time
----+---------------------
1 | 2016-04-21 13:49:34
2 | 2016-04-21 13:49:48
3 | 2016-04-21 14:00:22
4 | 2016-04-21 14:00:25
5 | 2016-04-21 14:49:11
6 | 2016-04-21 14:49:14
(6 rows)
7.백업 라 이브 러 리 보기 pgxlog
-bash-4.2$ ll pg_xlog
total 49160
-rw-------. 1 postgres postgres 16777216 Apr 21 15:00 000000010000000000000005
-rw-------. 1 postgres postgres 16777216 Apr 21 15:00 000000010000000000000006
-rw-------. 1 postgres postgres 16777216 Apr 21 15:00 000000020000000000000006
-rw-------. 1 postgres postgres 64 Apr 21 15:00 00000002.history
drwx------. 2 postgres postgres 4096 Apr 21 15:00 archive_status
-bash-4.2$ cat pg_xlog/00000002.history
1 000000010000000000000006 before 2016-04-21 14:49:16.635744+08
pg 에서xlog 는 recovery.conf 파일 을 설정 한 후 데이터 베 이 스 를 시작 하면 새로운 timeline,id=2 가 생 성 되 고 새로운 history 파일 0000002.history 가 생 성 됩 니 다.그 안에 새 타임 라인 2 가 언제,어느 타임 라인 에서 어떤 원인 으로 나 뉘 었 는 지 기록 되 어 있 습 니 다.이 파일 은 여러 줄 의 기록 을 포함 할 수 있 습 니 다.또한 복구 의 기본 동작 은 현재 기본 백업 과 같은 시간 선 을 따라 복구 하 는 것 입 니 다.특정 타임 라인 으로 회복 하려 면 지정 한 recovery.conf 목표 타임 라인 recovery 가 필요 합 니 다.target_timeline,기본 백업 지점 보다 빠 른 시간 까지 복구 할 수 없습니다.
주의:한 번 회복 하고 recovery 를 다시 설정 하면target_time,트리거 복 구 를 다시 시작 합 니 다.타임 라인 1 을 기반 으로 회복 되 지 않 고 타임 라인 2 를 기반 으로 회복 되 지만 이 타임 라인 은/data/pg 에 있 습 니 다.archive/타임 라인 이 2 인 압축 파일 로그 가 없어 서 오류 가 발생 할 수 있 습 니 다.
추가:postgres 압축 파일 모드 수정
단계 1:
postgresql 설정 파일 수정(postgresql.conf)
wal_level=hot_standby
archive_mode =on
archive_command ='DATE=`date +%Y%m%d`;DIR="/home/postgres/arch/$DATE";(test -d $DIR || mkdir -p $DIR)&& cp %p $DIR/%f'
ps:%p 는 상대 경 로 를 말 합 니 다.%f 는 파일 이름 을 말 합 니 다.단계 2:압축 파일 생 성 경로
mkdir -p /home/postgres/arch
chown -R postgres:postgres /home/postgres/arch
STEP 3:데이터베이스 다시 시작단계 4:압축 파일 이 정상 인지 검증
postgres=# checkpoint;
CHECKPOINT
postgres=# select pg_switch_xlog();
pg_switch_xlog
----------------
1/760000E8
(1 row)
postgres@ubuntu:~$ cd /home/postgres/data/data_1999/arch/
postgres@ubuntu:~/data/data_1999/arch$ ls
20150603
postgres@ubuntu:~/data/data_1999/arch$ cd 20150603/
postgres@ubuntu:~/data/data_1999/arch/20150603$ ls
000000010000000100000074 000000010000000100000075 000000010000000100000076
이상 은 개인 적 인 경험 이 므 로 여러분 에 게 참고 가 되 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주시 기 바 랍 니 다.만약 잘못 이 있 거나 완전히 고려 하지 않 은 부분 이 있다 면 아낌없이 가르침 을 주시 기 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
org.postgresql.util.PSQLException: FATAL: sorry, too many clients alreadyI am trying to connect to a Postgresql database, I am getting the following Error: You opened up more than the allowed l...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.