[database] PostgreSQL 데이터베이스를 다른 서버로 복사
프로덕션 PostgreSQL 데이터베이스를 개발 서버에 복사하려고합니다. 이 작업을 수행하는 가장 빠르고 쉬운 방법은 무엇입니까?
답변
중간 파일을 만들 필요가 없습니다. 넌 할 수있어
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
이며 복원 용입니다. 따라서이 답변 의 첫 번째 명령은 local에서 remote로 복사하고 두 번째 명령은 remote에서 local로 복사하는 것입니다 . 추가-> 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 및 이후 psql 또는 pg_restore를 사용하십시오.-Fp 또는 -Fc 옵션을 pg_dump로 선택할지 여부에 따라 .
사용 예 :
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.3 이상--format=tar
에서만 작동하며 현재 버전의 tar 형식 모드 ( )는 서버 버전 9.5 이상에서만 작동합니다.
이를 위해 소스 서버에 필요합니다.
listen_addresses = '*'
대상 서버에서 연결할 수 있습니다. 해당 문제에 대해 포트 5432가 열려 있는지 확인하십시오.- 최소 1 개의 사용 가능한 복제 연결 :
max_wal_senders = 1
(-X fetch
),2
for-X stream
(PostgreSQL 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
답변
백업하려는 데이터베이스 이름으로이 명령을 실행하여 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
답변
나는 상당히 많은 어려움을 겪었고 결국 Rails 4에서 작동하게하는 방법은 다음과 같습니다.
기존 서버에서
sudo su - postgres
pg_dump -c --inserts old_db_name > dump.sql
덤프를 작성하기 위해 postgres Linux 사용자를 사용해야했습니다. 또한 -c를 사용하여 새 서버에서 데이터베이스를 강제로 작성해야했습니다. –inserts는 그렇지 않으면 INSERT () 구문을 사용하도록 지시합니다.
그런 다음 새 서버에서 simpy :
sudo su - postgres
psql new_database_name < dump.sql
서버간에 dump.sql 파일을 전송하기 위해 간단히 “cat”을 사용하여 내용을 인쇄하고 “nano”보다 내용을 복사하여 내용을 복사하여 다시 작성했습니다.
또한 두 데이터베이스에서 사용하고있는 ROLE이 다르므로 덤프에서 모든 소유자 이름을 찾아 교체해야했습니다.