pg_upgrade — 업그레이드 a포스트그레SQL서버 인스턴스
pg_upgrade -b oldbindir -B newbindir -d oldconfigdir -D newconfigdir [옵션...]
pg_upgrade(이전 명칭pg_migrator)는 다음에 저장된 데이터를 허용합니다.포스트그레SQL나중에 업그레이드할 데이터 파일포스트그레SQL주 버전 업그레이드(예: 9.5.8에서 9.6.4로 또는 10.7에서 11.2로)에 일반적으로 필요한 데이터 덤프/다시 로드가 없는 주 버전입니다. 부 버전 업그레이드(예: 9.6.2에서 9.6.3으로 또는 10.1에서 10.2로)에는 필요하지 않습니다.
주요 무지개 토토 릴리스에는 시스템 테이블의 레이아웃을 자주 변경하는 새로운 기능이 정기적으로 추가되지만 내부 데이터 저장 형식은 거의 변경되지 않습니다.pg_upgrade이 사실을 사용하여 새 시스템 테이블을 생성하고 이전 사용자 데이터 파일을 재사용함으로써 신속한 업그레이드를 수행합니다. 향후 주요 릴리스에서 이전 데이터 형식을 읽을 수 없게 만드는 방식으로 데이터 저장 형식을 변경하는 경우,pg_upgrade이러한 업그레이드에는 사용할 수 없습니다. (커뮤니티에서는 이러한 상황을 피하기 위해 노력할 것입니다.)
pg_upgrade예를 들어 32/64비트 바이너리를 포함하여 호환 가능한 컴파일 시간 설정을 확인하여 이전 클러스터와 새 클러스터가 바이너리 호환되는지 확인하기 위해 최선을 다합니다. 외부 모듈도 바이너리와 호환되는 것이 중요하지만 이는 확인할 수 없습니다.pg_upgrade.
pg_upgrade는 8.4.X 이상에서 현재 주요 릴리스로의 업그레이드를 지원합니다.포스트그레SQL, 스냅샷 및 베타 릴리스 포함.
pg_upgrade다음 명령줄 인수를 허용합니다:
-b bindir--old-bindir=bindir이전 무지개 토토 실행 가능 디렉토리; 환경 변수PGBINOLD
-B bindir--new-bindir=bindir새로운 무지개 토토 실행 가능 디렉토리; 환경 변수PGBINNEW
-c--확인클러스터만 확인하고 데이터는 변경하지 마세요.
-d configdir--old-datadir=configdir이전 데이터베이스 클러스터 구성 디렉토리; 환경 변수PGDATAOLD
-D configdir--new-datadir=configdiry새 데이터베이스 클러스터 구성 디렉토리; 환경 변수PGDATANEW
-jnjobs--작업=njobs사용할 동시 프로세스 또는 스레드 수
-k--링크새 클러스터에 파일을 복사하는 대신 하드 링크 사용
-o 옵션--이전 옵션 옵션이전 버전으로 직접 전달되는 옵션포스트그레스명령; 여러 옵션 호출이 추가됩니다.
-O 옵션--새로운 옵션 옵션새 항목에 직접 전달되는 옵션포스트그레명령; 여러 옵션 호출이 추가됩니다.
-p 포트--old-port=포트이전 클러스터 포트 번호; 환경 변수PGPORTOLD
-P 포트--새 포트=포트새 클러스터 포트 번호; 환경 변수PGPORTNEW
-r--유지성공적인 완료 후에도 SQL 및 로그 파일 유지
-U 사용자 이름--사용자 이름=사용자 이름클러스터의 설치 사용자 이름; 환경 변수PGUSER
-v--상세자세한 내부 로깅 활성화
-V--버전버전 정보를 표시한 후 종료
-?--도움말도움말을 표시한 후 종료
다음은 업그레이드를 수행하는 단계입니다.pg_upgrade:
선택적으로 이전 클러스터 이동
버전별 설치 디렉토리를 사용하는 경우, 예:/opt/무지개 토토/10, 이전 클러스터를 이동할 필요가 없습니다. 그래픽 설치 프로그램은 모두 버전별 설치 디렉터리를 사용합니다.
설치 디렉토리가 특정 버전이 아닌 경우, 예:/usr/local/pgsql, 새로운 무지개 토토 설치 디렉토리를 방해하지 않도록 현재 무지개 토토 설치 디렉토리를 이동해야 합니다.무지개 토토설치. 일단 현재무지개 토토서버가 종료되었으므로 무지개 토토 설치 디렉토리의 이름을 바꾸는 것이 안전합니다. 이전 디렉토리가 다음과 같다고 가정합니다./usr/local/pgsql, 다음을 수행할 수 있습니다.
mv /usr/local/pgsql /usr/local/pgsql.old
디렉토리 이름을 바꾸려면.
소스 설치의 경우 새 버전을 빌드하세요.
다음을 사용하여 새로운 무지개 토토 소스를 구축하세요.구성이전 클러스터와 호환되는 플래그.pg_upgrade확인하겠습니다pg_controldata업그레이드를 시작하기 전에 모든 설정이 호환되는지 확인하세요.
새 무지개 토토 바이너리 설치
새 서버의 바이너리와 지원 파일을 설치하십시오.pg_upgrade기본 설치에 포함되어 있습니다.
소스 설치의 경우, 사용자 정의 위치에 새 서버를 설치하려면 다음을 사용하세요.접두사변수:
make prefix=/usr/local/pgsql.new install
새 무지개 토토 클러스터 초기화
다음을 사용하여 새 클러스터를 초기화합니다.initdb. 다시 말하지만, Compatible을 사용하세요.initdb이전 클러스터와 일치하는 플래그입니다. 많은 사전 구축된 설치 프로그램이 이 단계를 자동으로 수행합니다. 새 클러스터를 시작할 필요가 없습니다.
확장 공유 개체 파일 설치
많은 확장 및 사용자 정의 모듈, 여부기여또는 다른 소스, 공유 개체 파일(또는 DLL)을 사용합니다. 예:pgcrypto.so. 이전 클러스터에서 이를 사용한 경우 일반적으로 운영 체제 명령을 통해 새 서버 바이너리와 일치하는 공유 개체 파일을 새 클러스터에 설치해야 합니다. 스키마 정의를 로드하지 마십시오(예:확장 프로그램 생성 pgcrypto, 이는 이전 클러스터에서 복제되기 때문입니다. 확장 업데이트를 사용할 수 있는 경우,pg_upgrade이를 보고하고 나중에 업데이트하기 위해 실행할 수 있는 스크립트를 생성할 것입니다.
사용자 정의 전체 텍스트 검색 파일 복사
이전 클러스터에서 새 클러스터로 사용자 정의 전체 텍스트 검색 파일(사전, 동의어, 동의어 사전, 중지 단어)을 복사합니다.
인증 조정
pg_upgrade이전 서버와 새 서버에 여러 번 연결하므로 인증을 다음으로 설정하는 것이 좋습니다.동료에pg_hba.conf또는 다음을 사용하세요~/.pgpass파일(참조토토 커뮤니티 : 문서 : 10 : 33.15. 암호 파일).
두 서버 모두 중지
Unix에서 두 데이터베이스 서버 모두 사용이 중지되었는지 확인하세요. 예:
pg_ctl -D /opt/무지개 토토/9.6 중지 pg_ctl -D /opt/무지개 토토/10 중지
또는 Windows에서는 적절한 서비스 이름을 사용합니다.
NET STOP postgresql-9.6 NET STOP postgresql-10
스트리밍 복제 및 로그 전달 대기 서버는 이후 단계까지 계속 실행될 수 있습니다.
대기 서버 업그레이드 준비
섹션에 설명된 방법을 사용하여 대기 서버를 업그레이드하는 경우11단계, 다음을 실행하여 이전 대기 서버가 따라잡았는지 확인하세요.pg_controldata기존 기본 및 대기 클러스터에 대해. 다음을 확인하세요.“최신 체크포인트 위치”모든 클러스터에서 값이 일치합니다. (이전 대기 서버가 이전 기본 서버보다 먼저 종료되거나 이전 대기 서버가 여전히 실행 중인 경우 불일치가 발생합니다.) 또한 다음을 확인하세요.wal_level다음으로 설정되지 않음최소에무지개 토토.conf새 기본 클러스터에 파일을 추가합니다.
실행pg_upgrade
항상 실행pg_upgrade이전 서버가 아닌 새 서버의 바이너리.pg_upgrade이전 및 새 클러스터의 데이터 및 실행 파일 사양이 필요합니다(빈) 디렉토리. 사용자 및 포트 값을 지정하고 기본 복사 동작 대신 데이터 파일을 연결할지 여부도 지정할 수 있습니다.
링크 모드를 사용하면 업그레이드가 훨씬 빨라지고(파일 복사 없음) 디스크 공간을 덜 사용하지만 업그레이드 후 새 클러스터를 시작하면 이전 클러스터에 액세스할 수 없습니다. 또한 링크 모드에서는 이전 클러스터 데이터 디렉터리와 새 클러스터 데이터 디렉터리가 동일한 파일 시스템에 있어야 합니다. (테이블스페이스 및pg_wal다른 파일 시스템에 있을 수 있습니다.) 참조pg_upgrade --help전체 옵션 목록을 보려면.
그--작업옵션을 사용하면 여러 CPU 코어를 사용하여 파일을 복사/링크하고 데이터베이스 스키마를 병렬로 덤프 및 다시 로드할 수 있습니다. 시작하기 좋은 곳은 최대 CPU 코어 및 테이블스페이스 수입니다. 이 옵션을 사용하면 다중 프로세서 시스템에서 실행되는 다중 데이터베이스 서버를 업그레이드하는 시간을 대폭 줄일 수 있습니다.
Windows 사용자의 경우 관리 계정으로 로그인한 다음 다음과 같이 셸을 시작해야 합니다.포스트그레사용자를 선택하고 적절한 경로를 설정하세요:
RUNAS /USER:postgres "CMD.EXE" 설정 경로=%PATH%;C:\Program Files\무지개 토토\10\bin;
그런 다음 실행pg_upgrade인용된 디렉토리 포함, 예:
pg_upgrade.exe
--old-datadir "C:/Program Files/무지개 토토/9.6/data"
--new-datadir "C:/Program Files/무지개 토토/10/data"
--old-bindir "C:/Program Files/무지개 토토/9.6/bin"
--new-bindir "C:/Program Files/무지개 토토/10/bin"
시작하면,pg_upgrade두 클러스터가 호환되는지 확인한 다음 업그레이드를 수행합니다. 당신은 사용할 수 있습니다pg_upgrade --check이전 서버가 아직 실행 중이더라도 검사만 수행합니다.pg_upgrade --check또한 업그레이드 후에 수행해야 할 수동 조정에 대해 설명합니다. 링크 모드를 사용하려면 다음을 사용해야 합니다.--링크옵션--확인링크 모드별 검사를 활성화합니다.pg_upgrade현재 디렉토리에 쓰기 권한이 필요합니다.
분명히 업그레이드 중에는 누구도 클러스터에 액세스해서는 안 됩니다.pg_upgrade의도하지 않은 클라이언트 연결을 방지하기 위해 기본적으로 포트 50432에서 서버를 실행합니다. 이전 클러스터와 새 클러스터가 동시에 실행되지 않으므로 업그레이드를 수행할 때 두 클러스터에 동일한 포트 번호를 사용할 수 있습니다. 단, 기존에 실행중인 서버를 확인할 때에는 기존 포트번호와 신규 포트번호가 달라야 합니다.
데이터베이스 스키마를 복원하는 동안 오류가 발생하는 경우,pg_upgrade종료되며 설명된 대로 이전 클러스터로 되돌려야 합니다.17단계아래. 시도하다pg_upgrade다시 말하지만, pg_upgrade 스키마 복원이 성공하려면 이전 클러스터를 수정해야 합니다. 문제가 다음과 같은 경우:기여모듈을 제거해야 할 수도 있습니다.기여모듈이 사용자 데이터를 저장하는 데 사용되지 않는다고 가정하고 업그레이드 후 새 클러스터에 모듈을 설치합니다.
스트리밍 복제 및 로그 전달 대기 서버 업그레이드
링크 모드를 사용하고 스트리밍 복제가 있는 경우(참조섹션 26.2.5) 또는 로그 전달(참조PostgreSQL : 문서 : 10 : 26.2. 로그쉽 스포츠 토토 사이트 서버) 대기 서버인 경우 다음 단계에 따라 빠르게 업그레이드할 수 있습니다. 당신은 뛰지 않을 것입니다.pg_upgrade대기 서버에 있지만 오히려rsync기본에. 아직 서버를 시작하지 마세요.
만약 그랬다면아님링크 모드를 사용하지만, 가지고 있지 않거나 사용하고 싶지 않습니다.rsync또는 더 쉬운 솔루션을 원하면 이 섹션의 지침을 건너뛰고 대기 서버를 한 번만 다시 생성하세요.pg_upgrade완료되고 새로운 기본이 실행 중입니다.
대기 서버에 새로운 무지개 토토 바이너리 설치
새 바이너리와 지원 파일이 모든 대기 서버에 설치되어 있는지 확인하세요.
새로운 대기 데이터 디렉토리가 작동하는지 확인하세요아님존재
새 대기 데이터 디렉토리가 작동하는지 확인하세요아님존재하거나 비어있습니다. 만일initdb실행되었으므로 대기 서버의 새 데이터 디렉토리를 삭제하십시오.
확장 공유 개체 파일 설치
새 기본 클러스터에 설치한 새 대기 클러스터에 동일한 확장 공유 객체 파일을 설치하십시오.
대기 서버 중지
대기 서버가 아직 실행 중이라면 위의 지침에 따라 지금 서버를 중지하십시오.
구성 파일 저장
보존해야 하는 이전 대기의 구성 디렉토리에서 구성 파일을 저장하십시오. 예를 들어,무지개 토토.conf(및 여기에 포함된 모든 파일),무지개 토토.auto.conf, recovery.conf, pg_hba.conf, 다음 단계에서 덮어쓰거나 제거될 것이기 때문입니다.
실행rsync
링크 모드를 사용할 때 다음을 사용하여 대기 서버를 빠르게 업그레이드할 수 있습니다.rsync. 이를 수행하려면 이전 데이터베이스 클러스터 디렉터리와 새 데이터베이스 클러스터 디렉터리 위에 있는 기본 서버의 디렉터리에서 다음을 실행합니다.1차각 대기 서버에 대해:
rsync --archive --delete --hard-links --size-only --no-inc-recursive old_cluster new_cluster remote_dir
어디에서old_cluster그리고new_cluster기본 디렉토리의 현재 디렉토리에 상대적이며remote_diris위대기 중인 이전 및 새 클러스터 디렉토리. 기본 및 대기의 지정된 디렉터리 아래 디렉터리 구조가 일치해야 합니다. 상담하세요rsync28867_28935
rsync --archive --delete --hard-links --size-only --no-inc-recursive /opt/무지개 토토/9.5 \
/opt/무지개 토토/9.6 Standby.example.com:/opt/무지개 토토
다음을 사용하여 명령이 수행할 작업을 확인할 수 있습니다.rsync's--시험 실행옵션. 동안rsync적어도 하나의 대기를 위해 기본에서 실행되어야 하며 실행이 가능합니다.rsync업그레이드된 대기가 시작되지 않은 한, 업그레이드된 대기에서 다른 대기를 업그레이드합니다.
이것은 다음에 의해 생성된 링크를 기록하는 것입니다.pg_upgrade29623_29988rsync임시 및 기록되지 않은 테이블과 관련된 파일은 일반적으로 대기 서버에 존재하지 않기 때문에 불필요하게 복사합니다.
테이블스페이스가 있는 경우 유사한 실행이 필요합니다rsync각 테이블스페이스 디렉토리에 대한 명령, 예:
rsync --archive --delete --hard-links --size-only --no-inc-recursive /vol1/pg_tblsp/PG_9.5_201510051 \
/vol1/pg_tblsp/PG_9.6_201608131 Standby.example.com:/vol1/pg_tblsp
이주한 경우pg_wal데이터 디렉토리 외부,rsync해당 디렉토리에서도 실행되어야 합니다.
스트리밍 복제 및 로그 전달 대기 서버 구성
로그 전달을 위한 서버를 구성하십시오. (달릴 필요는 없습니다.)pg_start_backup()그리고pg_stop_backup()또는 대기가 여전히 기본과 동기화되어 있으므로 파일 시스템 백업을 수행합니다.) 복제 슬롯은 복사되지 않으며 다시 생성해야 합니다.
복원pg_hba.conf
수정한 경우pg_hba.conf, 원래 설정을 복원하세요. 이전 클러스터와 일치하도록 새 클러스터의 다른 구성 파일을 조정해야 할 수도 있습니다. 예:무지개 토토.conf(및 여기에 포함된 모든 파일),무지개 토토.auto.conf.
새 서버 시작
이제 새 서버를 안전하게 시작할 수 있습니다. 그다음에는 무엇이든 가능합니다.rsync'대기 서버입니다.
업그레이드 후 처리
업그레이드 후 처리가 필요한 경우 pg_upgrade는 완료 시 경고를 발행합니다. 또한 관리자가 실행해야 하는 스크립트 파일도 생성됩니다. 스크립트 파일은 업그레이드 후 처리가 필요한 각 데이터베이스에 연결됩니다. 각 스크립트는 다음을 사용하여 실행되어야 합니다.
psql --username=postgres --file=script.sql postgres
스크립트는 어떤 순서로든 실행될 수 있으며 실행 후에는 삭제할 수 있습니다.
일반적으로 재구축 스크립트 실행이 완료될 때까지 재구축 스크립트에서 참조된 테이블에 접근하는 것은 안전하지 않습니다. 그렇게 하면 잘못된 결과가 나오거나 성능이 저하될 수 있습니다. 재구축 스크립트에서 참조되지 않은 테이블은 즉시 액세스할 수 있습니다.
통계
최적화기 통계는 다음에 의해 전송되지 않기 때문입니다.pg_upgrade, 업그레이드가 끝나면 해당 정보를 재생성하는 명령을 실행하라는 메시지가 표시됩니다. 새 클러스터와 일치하도록 연결 매개변수를 설정해야 할 수도 있습니다.
이전 클러스터 삭제
업그레이드에 만족하면 다음에 언급된 스크립트를 실행하여 이전 클러스터의 데이터 디렉토리를 삭제할 수 있습니다.pg_upgrade완료되었습니다. (기존 데이터 디렉토리 내부에 사용자 정의 테이블스페이스가 있는 경우 자동 삭제가 불가능합니다.) 또한 기존 설치 디렉토리(예:빈, 공유).
이전 클러스터로 되돌리는 중
만약, 실행 후pg_upgrade, 이전 클러스터로 되돌리려는 경우 몇 가지 옵션이 있습니다.
만약에--확인옵션이 사용되었으며 이전 클러스터는 수정되지 않았습니다. 다시 시작할 수 있습니다.
만일--링크이전 옵션은아님사용되었으며 이전 클러스터는 수정되지 않았습니다. 다시 시작할 수 있습니다.
만약에--링크옵션이 사용되었으므로 데이터 파일이 이전 클러스터와 새 클러스터 간에 공유될 수 있습니다.
만약pg_upgrade연결이 시작되기 전에 중단되었으며 이전 클러스터는 수정되지 않았습니다. 다시 시작할 수 있습니다.
만약 그랬다면아님새 클러스터를 시작합니다. 이전 클러스터는 연결이 시작될 때 a.old접미사가 추가됨$PGDATA/글로벌/pg_control. 이전 클러스터를 재사용하려면.old접미사$PGDATA/글로벌/pg_control; 그런 다음 이전 클러스터를 다시 시작할 수 있습니다.
새 클러스터를 시작한 경우 공유 파일에 기록되었으며 이전 클러스터를 사용하는 것은 안전하지 않습니다. 이 경우 이전 클러스터를 백업에서 복원해야 합니다.
pg_upgrade이를 포함하는 데이터베이스의 업그레이드를 지원하지 않습니다.reg*OID 참조 시스템 데이터 유형:regproc, regprocedure, regoper, regoperator, regconfig및regdictionary. (regtype업그레이드할 수 있습니다.)
모든 실패, 재구축 및 재색인 사례는 다음에 의해 보고됩니다.pg_upgrade설치에 영향을 미치는 경우; 테이블과 인덱스를 재구축하기 위한 업그레이드 후 스크립트가 자동으로 생성됩니다. 많은 클러스터의 업그레이드를 자동화하려는 경우 데이터베이스 스키마가 동일한 클러스터에는 모든 클러스터 업그레이드에 대해 동일한 업그레이드 후 단계가 필요합니다. 이는 업그레이드 후 단계가 사용자 데이터가 아닌 데이터베이스 스키마를 기반으로 하기 때문입니다.
배포 테스트를 위해 이전 클러스터의 스키마 전용 복사본을 생성하고 더미 데이터를 삽입한 후 업그레이드하십시오.
사전 버전을 업그레이드하는 경우-포스트그레SQL9.2 구성 파일 전용 디렉터리를 사용하는 클러스터의 경우 실제 데이터 디렉터리 위치를 전달해야 합니다.pg_upgrade, 구성 디렉터리 위치를 서버에 전달합니다(예:-d /real-data-directory -o '-D /configuration-directory'.
기본이 아닌 Unix 도메인 소켓 디렉토리 또는 새 클러스터의 기본값과 다른 기본값을 사용하는 9.1 이전 이전 서버를 사용하는 경우 설정PGHOST이전 서버의 소켓 위치를 가리킵니다. (Windows에서는 관련이 없습니다.)
링크 모드를 사용하고 새 클러스터가 시작될 때 이전 클러스터가 수정되는 것을 원하지 않으면 이전 클러스터의 복사본을 만들고 링크 모드에서 업그레이드하십시오. 이전 클러스터의 유효한 복사본을 만들려면 다음을 사용하세요.rsync서버가 실행되는 동안 이전 클러스터의 더티 복사본을 생성한 다음 이전 서버를 종료하고 실행합니다.rsync --체크섬다시 복사본을 업데이트하여 일관성을 유지합니다. (--체크섬필요한 이유는rsync파일 수정 시간 단위는 1초뿐입니다.) 일부 파일을 제외할 수 있습니다. 예:postmaster.pid, 문서에 설명된 대로섹션 25.3.3. 파일 시스템이 파일 시스템 스냅샷 또는 기록 중 복사 파일 복사본을 지원하는 경우 이를 사용하여 이전 클러스터 및 테이블스페이스의 백업을 만들 수 있습니다. 단, 스냅샷과 복사본은 동시에 생성되거나 데이터베이스 서버가 다운된 동안 생성되어야 합니다.