데이터베이스 서버 의 Postgresql 백업 및 복구 --- SQL 덤 프 편

10043 단어 PostgreSQL
저자: 작은 P: Linux Sir. Org 요약: 소중 한 데 이 터 를 포함 하 는 모든 것 과 마찬가지 로 PostgreSQL 데이터베이스 도 자주 백업 해 야 합 니 다.PostgreSQL 데이터 베 이 스 를 백업 하 는 데 는 세 가지 방법 이 있 습 니 다. 여러 가지 방법 은 장단 점 이 있 습 니 다. 본 고 는 먼저 SQL 덤 프 방법 을 말씀 드 리 겠 습 니 다.
    


 
1. 종합 적 으로 서술 한다.
2. 데이터 백업;
2.1 pg_dump;
2.2 pg_dumpall;
2.3 계획 임무;
3. 덤 프 에서 회복 하기;
3.1 용 pgdump 복구;
3.2 용 pgdumpall 회복;
3.3 ANALYZE;
4. 큰 데이터베이스 처리 하기;
4.1 대 데이터베이스 출력;
4.2 큰 데이터베이스 복원;
4.3 slipt 사용 하기;
4.3.1 분할;
4.3.2 합병;
5. 본문 에 대하 여
6. 로그 업데이트 하기;
7. 문서 참조;
8. 관련 문서;
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
실수 로 데이터베이스 시트 를 삭제 하거나 데이터 베 이 스 를 저장 하 는 디스크 가 손상 되 었 습 니까?만약 이런 상황 에 부 딪 히 면, 나 는 당신 이 매우 낙담 할 것 이 라 고 믿 습 니 다. 왜냐하면 당신 이 몇 주 동안 노력 한 업무 성과 가 수포 로 돌아 갈 수 있 기 때 문 입 니 다.소중 한 데 이 터 를 포함 하 는 모든 것 과 마찬가지 로 PostgreSQL 데이터베이스 도 자주 백업 해 야 합 니 다.PostgreSQL 표 에 데 이 터 를 저장 하면 데이터 베 이 스 를 정기 적 으로 백업 하여 위의 비극 이 발생 하지 않도록 할 수 있 습 니 다.PostgreSQL 은 백업 작업 을 수행 하기 위해 내 장 된 도 구 를 가지 고 있 으 며, 시스템 이 손상 되 거나 의외 일 때 이 도 구 를 통 해 '스크롤 백' 을 할 수 있 으 며, 이전에 저 장 된 스냅 샷 을 통 해 시스템 을 초기 상태 로 복원 할 수 있 습 니 다.
1. 종합 적 으로 서술 한다.
PostgreSQL 데이터 베 이 스 는 백업 PostgreSQL 데이터 로부터 세 가지 완전히 다른 방법 이 있 습 니 다.
SQL 덤 프
파일 시스템 단계 백업
온라인 백업
모든 백업 은 자신의 장점 과 단점 이 있 습 니 다. 다음은 SQL 덤 프 방법 을 소개 합 니 다.
2. 데이터 백업;
SQL 덤 프 방법 은 텍스트 파일 을 만 드 는 것 입 니 다. 이 텍스트 에는 SQL 명령 이 들 어 있 습 니 다. 이 파일 을 서버 에 전송 할 때 덤 프 상태 와 같은 데이터 베 이 스 를 재 구축 합 니 다.
2.1 pg_dump;
PostgreSQL 자체 내 장 된 백업 도 구 를 pg 라 고 합 니 다.dump。이 도 구 는 일련의 SQL 문 구 를 통 해 지정 한 데이터 베 이 스 를 읽 고 그 내용 을 복사 하여 스냅 샷 으로 사용 하고 향후 데이터 복구 에 사용 합 니 다.클 라 이언 트 가 서버 에 연결 하 는 것 은 백업 작업 을 수행 하 는 데 사 용 됩 니 다.이 백업 파일 들 은 앞에서 말 한 스냅 샷 으로 향후 데이터 복구 에 사용 할 수 있 습 니 다.클 라 이언 트 와 서버 측의 연결 을 확보 하 는 것 은 백업 을 실행 하 는 데 필수 적 이다.이 명령 의 기본 용법 은:
pg_dump dbname > outfile
주: 상기 작업 을 진행 하기 전에 서버 에 로그 인하 고 백업 할 데이터베이스 나 테이블 에 접근 할 수 있 는 권한 이 있 는 지 확인 하 십시오.PostgreSQL 명령 행 클 라 이언 트 psql 을 사용 하여 서버 로그 인 을 할 수 있 습 니 다.클 라 이언 트 에 호스트 이름 (- h), 사용자 이름 (- u), 비밀번호 (- p), 데이터베이스 이름 을 입력 하면 권한 이 부여 되 었 는 지 확인 할 수 있 습 니 다.
pg 사용dump 는 매우 간단 합 니 다. 명령 프롬프트 뒤에 내 보 낼 데이터베이스 이름 을 입력 하면 백업 작업 을 할 수 있 습 니 다. 다음 과 같 습 니 다. (설치 경로 에 따라 PostgreSQL 경 로 를 변경 합 니 다)xiaop@xiaop-laptop:~$ /usr/lib/postgresql/8.2/bin/pg_dump -D -h localhost -U xiaop( ) mydb( ) >  mydb.bak위의 명령 을 통 해 my db. bak 라 는 파일 을 만 들 고 파일 에는 데이터 베 이 스 를 복구 하 는 SQL 명령 이 기록 되 어 있 습 니 다.
보시 다시 피 pgdump 는 결 과 를 표준 출력 으로 출력 합 니 다.우 리 는 아래 에서 이렇게 하면 무슨 좋 은 점 이 있 는 지 볼 수 있다.
pg_dump 는 일반적인 PostgreSQL 클 라 이언 트 응용 프로그램 입 니 다. (상당히 똑똑 한 것 임 에 도 불구 하고) 이 데이터 베 이 스 를 방문 할 수 있 는 원 격 호스트 에서 백업 작업 을 할 수 있 음 을 의미 합 니 다.하지만 pg 를 기억 하 세 요.dump 는 특별한 권한 으로 실행 되 지 않 습 니 다.구체 적 으로 말 하면 백업 하고 싶 은 표 의 읽 기 권한 이 있어 야 하기 때문에 실제 적 으로 데이터베이스 슈퍼 사용자 가 되 어야 합 니 다.
pgdump 는 어떤 사용자 로 연결 해 야 합 니까? 명령 행 옵션 - h host 와 - p port 를 사용 합 니 다.결 성 된 호스트 는 로 컬 호스트 나 환경 변수 Pghost 가 설명 한 값 입 니 다.유사 하 게 결 성 포트 는 환경 변수 PgpORT 또는 (존재 하지 않 는 다 면) 컴 파일 된 결 성 값 입 니 다.(서버 는 일반적으로 같은 결함 이 있 기 때문에 편리 한 편 이다.)
다른 PostgreSQL 클 라 이언 트 와 마찬가지 로 pgdump 가 부족 할 때 현재 운영 체제 사용자 이름과 같은 데이터베이스 사용자 이름 으로 연결 합 니 다.이 이름 을 덮어 쓰 려 면 성명 - U 옵션 을 사용 하거나 환경 변수 PGUSER 를 설정 하 십시오.pgdump 의 연결 도 일반 고객 응용 과 마찬가지 로 고객 인증 체 제 를 통과 해 야 한다.
pgdump 가 만 든 백업 은 내부 에서 일치 합 니 다. 즉, pgdump 가 실 행 될 때 데이터베이스 업데이트 가 저장 되 지 않 습 니 다.pg_dump 작업 을 할 때 다른 데이터베이스 작업 을 막 지 않 습 니 다.(그러나 자 물 쇠 를 배열 해 야 하 는 동작 을 막 을 수 있 습 니 다. 예 를 들 어 VACUUM FULL.)
주: 데이터베이스 구조 가 OID (예 를 들 어 외부 키 로 사용) 에 의존한다 면 pg 를 알려 야 합 니 다.덤 프 가 OID 도 부 어.OID 를 바 꾸 려 면 - o 명령 행 옵션 을 사용 할 수 있 습 니 다.성 이 부족 할 때 도 '대상' 을 덤 프 하지 않 는 다.큰 대상 을 사용 하 시 면 pg 를 참고 하 십시오.dump 명령 매 뉴 얼 페이지 입 니 다.
2.2 pg_dumpall;
전체 시스템 의 모든 데이터 베 이 스 를 백업 하려 면 (한 데이터베이스 만 백업 하 는 것 이 아니 라) 명령 pg 를 사용 할 수 있 습 니 다.dumpall 은 pg 가 아 닙 니 다.dump。이 명령 을 실행 하면 PostgreSQL 이 식별 할 수 있 는 모든 데이터베이스 (자신의 시스템 데이터베이스 포함) 를 파일 에 백업 할 수 있 습 니 다.다음은 사용 실례 를 보 여 줍 니 다.xiaop@xiaop-laptop:~$ /usr/lib/postgresql/8.2/bin/pg_dumpall -D -h localhost -U xiaop( ) >  all.bak    이렇게 하면 localhost 의 모든 데이터 베 이 스 를 all. bak 파일 에 백업 합 니 다.
2.3 계획 임무;
백업 시간 에 업 데 이 트 를 유지 할 수 있 도록 cron table 에 pg 를 추가 할 수 있 습 니 다.dump 또는 pgdumpall 명령 으로 정기 적 으로 백업 작업 을 수행 합 니 다.여기에 두 개의 cron entries 의 예 를 제시 했다.첫 번 째 는 매일 새벽 3 시 에 test 데이터 베 이 스 를 백업 하 는 것 이 고, 두 번 째 는 매주 금요일 저녁 9 시 에 모든 데이터 베 이 스 를 백업 하 는 것 이다.xiaop@xiaop-laptop:~$ 0 3 * * * /usr/lib/postgresql/8.2/bin/pg_dump -D -h localhost -U xiaop( ) mydb( ) > /home/xiaop/mydb.bak0 21 * *
xiaop@xiaop-laptop:~$ 5 /usr/lib/postgresql/8.2/bin/pg_dumpall -D -h localhost -U xiaop( ) > /home/xiaop/all.bak
3. 덤 프 에서 회복
3.1 용 pgdump 복구;
백업 에서 데 이 터 를 복구 하 는 작업 은 백업 을 실행 하 는 것 보다 더 간단 합 니 다. 백업 파일 의 SQL 명령 을 실행 하여 데이터 베 이 스 를 복구 하 는 것 입 니 다.pg 를 사용 하신 다 면dump 가 특정한 데이터 베 이 스 를 백업 하면 백업 에 CREATE TABLE 문구 가 있어 서 원본 표를 복사 합 니 다.물론 이 데이터 시트 를 저장 하기 위해 서 는 먼저 빈 데이터 베 이 스 를 새로 만들어 야 합 니 다.createdb 라 는 도 구 를 사용 하여 이 작업 을 완성 할 수 있 습 니 다. 이 도 구 는 PostgreSQL 세트 의 일부분 이기 도 합 니 다.xiaop@xiaop-laptop:~$ /usr/lib/postgresql/8.2/bin/createdb mydb( )이제 백업 파일 의 SQL 명령 을 실행 하여 데이터 베 이 스 를 복구 할 수 있 습 니 다. pgdump 에서 생 성 된 텍스트 파일 은 psql 프로그램 에서 읽 을 수 있 습 니 다.덤 프 에서 복구 하 는 일반적인 명령 형식 은:
psql dbname < infile
다음 과 같은 예 에서 보 듯 이:xiaop@xiaop-laptop:~$ /usr/lib/postgresql/8.2/bin/psql -h localhost -U xiaop( ) -d mydb( ) < mydb.bak3.2 용 pgdumpall 회복;
pg 를 사용 하신 다 면dumpall 은 모든 데이터 베 이 스 를 백업 할 때 먼저 데이터 베 이 스 를 새로 만 들 필요 가 없습니다. 백업 파일 에는 CREATE DATABASE 작업 과 관련 된 호출 이 포함 되 어 있 기 때 문 입 니 다.여기 서 psql 명령 행 클 라 이언 트 에 해당 하 는 백업 파일 을 입력 하면 됩 니 다. 대상 데이터 베 이 스 를 지정 하지 않 아 도 됩 니 다.xiaop@xiaop-laptop:~$ /usr/lib/postgresql/8.2/bin/psql -h localhost -U xiaop( ) < all.bak데이터 복구 가 완료 되면 서버 에 로그 인하 여 복 구 된 데 이 터 를 볼 수 있 습 니 다.
3.3 ANALYZE;
복구 가 완료 되면 데이터베이스 마다 ANALYZE 를 실행 하 는 것 은 현명 한 행동 이다. 그러면 최적화 기 는 유용 한 통계 데 이 터 를 얻 을 수 있다.항상 vacuumdb - a - z 를 실행 하여 VACUUM ANALYZE 의 모든 데이터 베 이 스 를 실행 할 수 있 습 니 다.이것 은 VACUUM ANALYZE 를 수 동 으로 실행 하 는 것 과 같다.
4. 큰 데이터베이스 처리 하기;
4.1 대 데이터베이스 출력;PostgreSQL 허용 표 의 크기 가 시스템 이 허용 하 는 최대 파일 크기 보다 크기 때문에 시 계 를 파일 로 저장 하 는 데 문제 가 있 을 수 있 습 니 다. 생 성 된 파일 이 시스템 이 허용 하 는 최대 파일 보다 클 수 있 기 때 문 입 니 다.pg 때문에dump 를 표준 출력 으로 출력 합 니 다. 표준 유 닉 스 도구 로 이 문 제 를 돌 릴 수 있 습 니 다. 압축 된 덤 프 를 사용 합 니 다. 익숙 한 압축 프로그램 을 사용 합 니 다. 예 를 들 어 gzip.xiaop@xiaop-laptop:~$ pg_dump mydb( ) | gzip > mydbBACK.gz4.2 큰 데이터베이스 복원;다음 명령 으로 복구:xiaop@xiaop-laptop:~$ createdb mydbNEW( )
xiaop@xiaop-laptop:~$ gunzip -c mydbBACK.gz | psql mydbNEW
혹은xiaop@xiaop-laptop:~$ cat mydbBACK.gz | gunzip | psql mydbNEW4.3 split 사용 하기;
4.3.1 분할;split 명령 은 출력 을 운영 체제 가 받 아들 일 수 있 는 크기 로 분해 할 수 있 도록 합 니 다.split 의 용법 은 파일 의 분할 split 와 결합 도구 cat 소개 에서 조회 할 수 있 습 니 다.예 를 들 어 각 블록 크기 를 1 메가바이트 로 합 니 다.xiaop@xiaop-laptop:~$ pg_dump dbname | split -b 1m - filename4.3.2 합병;
분할 후 다음 명령 으로 복구 할 수 있 습 니 다:xiaop@xiaop-laptop:~$createdb dbname
xiaop@xiaop-laptop:~$cat filename* | psql dbname
5. 본문 에 대하 여
PostgreSQL 데이터베이스 백업 과 복구 에 관 한 또 다른 두 가지 방법 인 '파일 시스템 등급 의 백업' 과 '온라인 백업' 에 대해 서 는 나중에 다시 토론 하 겠 습 니 다. 본 논문 의 대부분 자 료 는 중국어 문 서 를 참조 하 는 것 입 니 다. 그 목적 은 형제들 이 편리 하 게 찾 을 수 있 도록 하 는 것 입 니 다. 상세 한 것 은 중문 문서 에 있 습 니 다. 여러분 의 지적 에 감 사 드 립 니 다.)
6. 로그 업데이트 하기;
7. 문서 참조;< PostgreSQL 8.1 중국어 문서 >
8. 관련 문서;< PostgreSQL 설치 및 간단 한 사용 > 'PostgreSQL 의 프로필 및 사용자 권한' < PostgreSQL 데이터베이스 사용자 인증 > < PostgreSQL 데이터베이스 의 일상 유지보수 작업 >

좋은 웹페이지 즐겨찾기