Postgre 복사 중SQL 데이터베이스를 다른 서버로
프로덕션 포스트그레를 복사하려고 합니다.SQL 데이터베이스에서 개발 서버로.이것을 하는 가장 빠르고 쉬운 방법은 무엇입니까?
중간 파일을 만들 필요가 없습니다.할수있습니다
pg_dump -C -h localhost -U localuser dbname | psql -h remotehost -U remoteuser dbname
또는
pg_dump -C -h remotehost -U remoteuser dbname | psql -h localhost -U localuser dbname
용사를 psql
또는pg_dump
원격 호스트에 연결합니다.
데이터베이스가 크거나 연결 속도가 느린 경우 파일을 덤프하고 압축된 파일을 전송하는 것이 더 빠를 수 있습니다.
Kornel이 중간 파일에 덤프할 필요가 없다고 했듯이 압축 작업을 원한다면 압축 터널을 사용할 수 있습니다.
pg_dump -C dbname | bzip2 | ssh remoteuser@remotehost "bunzip2 | psql dbname"
또는
pg_dump -C dbname | ssh -C remoteuser@remotehost "psql dbname"
그러나 이 솔루션은 또한 양쪽 끝에서 세션을 얻어야 합니다.
참조: pg_dump
및 백및업psql
복원을 위한 것입니다.따라서 이 답변의 첫 번째 명령은 로컬에서 원격으로 복사하는 것이고 두 번째 명령은 원격에서 로컬로 복사하는 것입니다.더 보기 -> https://www.postgresql.org/docs/9.6/app-pgdump.html
pg_dump the_db_name > the_backup.sql
그런 다음 백업을 개발 서버에 복사하고 다음을 사용하여 복원합니다.
psql the_new_dev_db < the_backup.sql
pg_dump 옵션을 pg_dump로 선택할지 -Fp 또는 -Fc 옵션을 선택할지에 따라 pg_dump를 사용하고 나중에 psql 또는 pg_restore를 사용합니다.
사용 예:
ssh production
pg_dump -C -Fp -f dump.sql -U postgres some_database_name
scp dump.sql development:
rm dump.sql
ssh development
psql -U postgres -f dump.sql
버전 간에 마이그레이션하려는 경우(예: postgres를 업데이트하고 localhost:5432에서 9.1을 실행하고 localhost:5434에서 9.3을 실행) 다음을 실행할 수 있습니다.
pg_dumpall -p 5432 -U myuser91 | psql -U myuser94 -d postgres -p 5434
마이그레이션 문서를 확인하십시오.
pg_basebackup
특히 대규모 데이터베이스의 경우 지금이 더 나은 방법인 것 같습니다.
주 버전이 동일하거나 이전 버전의 서버에서 데이터베이스를 복사할 수 있습니다.더 정확하게는:
pg_basebackup
에서는 9.1 이전 버전의 주 버전이 동일하거나 이전 버전의 서버에서 작동합니다., 모드WAL 스트리밍 모드)-X stream
9하며, 모드()는 9.3 이상의 tar 형식에서만 작동합니다.--format=tar
현재 버전의 )은 서버 버전 9.5 이상에서만 작동합니다.
원본 서버에 필요한 경우:
listen_addresses = '*'
대상 서버에서 연결할 수 있습니다.해당 문제에 대해 포트 5432가 열려 있는지 확인합니다.- 하나 이상의 사용 가능한 복제 연결: (
-X fetch
),2
위해서-X stream
의 경우 기본값)SQL 12) 이상입니다. wal_level = replica
설정할 수 있는 이상.max_wal_senders > 0
.host replication postgres DST_IP/32 trust
pg_hba.conf
그러면 에 대한 액세스 권한이 부여됩니다.pg
에서 아무나 모입니다.DST_IP
. 좀더 한 옵션을 입니다.보다 안전한 옵션을 사용하는 것이 좋습니다.
변경 1, 2, 3은 서버를 다시 시작해야 하고 변경 4는 다시 로드해야 합니다.
대상 서버에서:
# systemctl stop postgresql@VERSION-NAME
postgres$ pg_basebackup -h SRC_IP -U postgres -D VERSION/NAME --progress
# systemctl start postgresql@VERSION-NAME
허용된 답변이 올바르지만 암호를 대화형으로 입력하지 않으려면 다음을 사용할 수 있습니다.
PGPASSWORD={{export_db_password}} pg_dump --create -h {{export_db_host}} -U {{export_db_user}} {{export_db_name}} | PGPASSWORD={{import_db_password}} psql -h {{import_db_host}} -U {{import_db_user}} {{import_db_name}}
백업할 데이터베이스 이름으로 이 명령을 실행하여 DB를 덤프합니다.
pg_dump -U {user-name} {source_db} -f {dumpfilename.sql}
eg. pg_dump -U postgres mydbname -f mydbnamedump.sql
이제 DB를 복사할 원격 시스템에 이 덤프 파일을 scp합니다.
eg. scp mydbnamedump.sql user01@remotemachineip:~/some/folder/
원격 시스템에서 ~/some/folder에서 다음 명령을 실행하여 DB를 복원합니다.
psql -U {user-name} -d {desintation_db}-f {dumpfilename.sql}
eg. psql -U postgres -d mynewdb -f mydbnamedump.sql
: 데터베덤:pg_dump database_name_name > backup.sql
가져옵니다.psql db_name < backup.sql
저는 꽤 많은 어려움을 겪었고 결국 Rails 4와 함께 작동할 수 있게 된 방법은 다음과 같습니다.
이전 서버에서
sudo su - postgres
pg_dump -c --inserts old_db_name > dump.sql
나는 dump를 만들기 위해 postgres Linux 사용자를 사용해야 했고, 새 서버에 데이터베이스를 강제로 만들기 위해 -c를 사용해야 했습니다. --inserts는 그렇지 않으면 나에게 통하지 않을 INSERT() 구문을 사용하라고 말합니다.
그러면 새 서버에서 simpy:
sudo su - postgres
psql new_database_name < dump.sql
서버 간에 dump.sql 파일을 전송하기 위해 "cat"을 사용하여 컨텐츠를 인쇄하고 "nano"를 사용하여 컨텐츠를 복사 붙여넣기를 다시 생성했습니다.
또한 두 데이터베이스에서 사용하던 역할이 달라서 덤프에서 모든 소유자 이름을 찾아야 했습니다.
Linux 셸 스크립트를 공유하여 한 서버에서 다른 서버로 테이블 데이터를 복사합니다.SQL 서버.
Postgre 간의 데이터 마이그레이션을 위한 Linux Bash Shell 스크립트SQL 서버:
#!/bin/bash
psql \
-X \
-U user_name \
-h host_name1 \
-d database_name \
-c "\\copy tbl_Students to stdout" \
| \
psql \
-X \
-U user_name \
-h host_name2 \
-d database_name \
-c "\\copy tbl_Students from stdin"
데이터를 마이그레이션하는 중입니다. 대상/두 번째 데이터베이스 서버에 빈 테이블을 만드십시오.
이것은 유틸리티 스크립트입니다.또한 다음과 같은 매개 변수를 추가하여 일반적인 용도로 스크립트를 수정할 수 있습니다.host_name
,database_name
,table_name
에 다은다음사예입다니용을 사용한 .pg_basebackup
전체 데이터베이스 클러스터(사용자, 데이터베이스 등)를 백업하기 때문에 이 경로를 선택했습니다.
제가 취해야 했던 모든 단계가 자세히 설명되어 있기 때문에 해결책으로 여기에 게시합니다. 여기에 대한 다른 답변을 읽고 좀 더 연구한 후에 언제든지 권장 사항이나 개선 사항을 추가하십시오.
Postgres 12 및 Ubuntu 18.04의 경우 다음 작업을 수행해야 했습니다.
현재 데이터베이스를 실행 중인 서버에서:
pg_hba.conf
에는있나는에 있는 ./etc/postgresql/12/main/pg_hba.conf
다음 행을 추가합니다(데이터베이스를 복사할 서버의 IP 주소로 192.168.0.100 대체).
host replication postgres 192.168.0.100/32 trust
갱신하다postgresql.conf
에 있는 나로서는/etc/postgresql/12/main/postgresql.conf
다음 행을 추가합니다.
listen_addresses = '*'
postgres 다시 시작:
sudo 서비스 postgresql 다시 시작
데이터베이스 클러스터를 복사할 호스트에서 다음 위치:
sudo 서비스 postgresql 중지
sudosu 뿌리
rm -rf /var/lib/postgresql/12/main/*
퇴장
sudo -u postgres pg_basebackup -h 192.168.0.101 -U postgres -D /var/lib/postgresql/12/main/
sudo 서비스 postgresql 시작
큰 그림 - 서비스를 중지하고 데이터 디렉토리의 모든 것을 삭제합니다(내 것은 다음에 있습니다)./var/lib/postgreql/12
) 이 디렉토리에 대한 권한은 다음과 같습니다.drwx------
사용자 및 그룹 포함postgres
제가 할 수 있는 일은root
에 조차도 없는sudo -u postgres
왜 그런지 모르겠어요.데이터베이스를 복사할 새 서버에서 이 작업을 수행해야 합니다!전체 데이터베이스 클러스터를 삭제합니다.
IP 주소를 변경해야 합니다.192.168.0.101
데이터베이스를 복사할 IP 주소로 이동합니다.원본 서버에서 데이터 복사pg_basebackup
서비스를 시작합니다.
갱신하다pg_hba.conf
그리고.postgresql.conf
서버를 추가하기 전에 원래 서버 구성과 일치시킵니다.replication
라인과listen_addresses
line (내가 관리할 때는 md5를 통해 pg_hba.conf에 로컬로 로그인하는 기능을 추가해야 했습니다.)
다음에 대한 고려 사항이 있습니다.max_wal_senders
그리고.wal_level
문서에서 확인할 수 있습니다.나는 이것으로 아무것도 할 필요가 없었습니다.
GUI가 더 익숙한 경우 pgAdmin 소프트웨어를 사용할 수 있습니다.
- 원본 및 대상 서버에 연결
- source db > backup을 마우스 오른쪽 버튼으로 클릭합니다.
- 대상 서버 > 생성 > 데이터베이스를 마우스 오른쪽 버튼으로 클릭합니다.source db와 동일한 속성 사용 (우클릭 > properties로 source db의 속성을 확인할 수 있습니다)
- 생성된 db > restore를 마우스 오른쪽 버튼으로 클릭합니다.
이것이 가장 쉬운 해결책입니다.
pg_dump --dbname=postgresql://[user]:[password]@[host]:[port]/[database] | psql --dbname=postgresql://[user]:[password]@[host]:[port]/[database]
첫 번째 부분은.pg_dump
복사할 데이터베이스를 다운로드하는 중입니다.
파트, 번부분은째두.psql
해당 주소로 업로드 중입니다.
예:
pg_dump --dbname=postgresql://postgres:password@originaldatabase.cluster-awsstring.eu-west-1.rds.amazonaws.com:5432/originaldatabasename | psql --dbname=postgresql://postgres:password@newdatabase.cluster-awsstring.eu-west-1.rds.amazonaws.com:5432/newdatabasename
저는 앞의 예들이 --dbname 문자열을 구성하는 방법이나 문서에서 설명하지 않았다는 것을 발견했습니다.참조: Postgre의 형식은 무엇입니까?SQL 연결 문자열 / URL?
언급URL : https://stackoverflow.com/questions/1237725/copying-postgresql-database-to-another-server
'programing' 카테고리의 다른 글
Node.js? any CURL 내부에서 원격 REST 호출을 하는 방법은 무엇입니까? (0) | 2023.05.26 |
---|---|
UIViewController의 보기가 표시되는지 확인하는 방법 (0) | 2023.05.26 |
없음을 암시하는 파이썬 3타입? (0) | 2023.05.26 |
부트스트랩 서버에 등록할 수 없습니다. (0) | 2023.05.26 |
Angular에서 템플릿의 변수를 선언하는 방법 (0) | 2023.05.26 |