📅  最后修改于: 2023-12-03 15:18:38.749000             🧑  作者: Mango
在开发和生产环境中,我们通常需要在不同的服务器之间复制 PostgreSQL 数据库。这可以通过多种方式实现,本文将介绍两种主要的方法。
pg_dump
和 pg_restore
pg_dump
是 PostgreSQL 自带的数据库备份工具,它能够以文本格式备份整个数据库。我们可以使用 pg_dump
将原始数据库备份到文件中,然后将备份文件移动到目标服务器并使用 pg_restore
还原到目标数据库中。
以下是备份和还原操作的详细步骤:
备份原始数据库
pg_dump dbname > backup.sql
此命令将以文本格式备份 dbname
数据库,将备份文件保存为 backup.sql
。
在目标服务器上还原数据库
在目标服务器上运行以下命令:
createdb dbname
psql dbname < backup.sql
这些命令将在目标服务器上创建一个名为 dbname
的新数据库,并将备份文件中的数据还原到该数据库中。
pg_basebackup
另一种复制 PostgreSQL 数据库的方法是使用 pg_basebackup
工具。该工具可用于从活动数据库生成基本备份,并将其传输到另一个服务器上,以创建新的从服务器副本。
以下是使用 pg_basebackup
复制数据库的简要步骤:
在主服务器上设置
postgresql.conf
文件中设置 wal_level
为 replica
。pg_hba.conf
文件允许从服务器使用 streaming replication
,并具有正确的证书。在从服务器上设置
recovery.conf
文件中设置 primary_conninfo
。以下是在主服务器上设置的详细步骤:
postgresql.conf
文件并将 wal_level
设置为 replica
。wal_level = replica
sudo systemctl restart postgresql
pg_hba.conf
文件以授权从服务器使用流复制。例如,以下行将允许来自 IP 地址 10.0.0.2
的从服务器使用流复制:host replication replication_user 10.0.0.2/32 md5
CREATE ROLE replication_user REPLICATION LOGIN PASSWORD 'password';
SELECT pg_reload_conf();
以下是在从服务器上设置的详细步骤:
postgresql.conf
文件,设置 hot_standby
为 on
。hot_standby = on
mkdir /var/lib/pgsql/12/backups
pg_basebackup -U replication_user \
-P -R -X stream -c fast \
-D /var/lib/pgsql/12/data \
-Fp -z -Z 9 \
--label="Base backup from ${HOSTNAME}" \
--progress \
--write-recovery-conf \
--backup-dir=/var/lib/pgsql/12/backups \
-h primary.example.com
此命令将在从服务器的 /var/lib/pgsql/12/data
目录中创建一个基本备份,并在 recovery.conf
文件中设置 primary_conninfo
,以便从服务器可以使用基本备份恢复并接收来自主服务器的流复制数据。
sudo systemctl start postgresql-12.service
以上是两种用于复制 PostgreSQL 数据库的主要方法。在开始任何复制操作之前,请务必备份您的数据库,并在测试环境中进行测试以确保正常运行。