远端备份 PostgreSQL 数据库。以下是几种常见的方式:
使用 pg_dump
可以使用 pg_dump
命令从远端 PostgreSQL 数据库执行备份。pg_dump
是 PostgreSQL 自带的工具,可以将数据库备份到 SQL 文件中。以下是基本语法:
pg_dump -U 用户名 -h 主机地址 -p 端口 数据库名 > 备份文件.sql
例如:
pg_dump -U postgres -h 10.10.180.251 -p 4815 mydb > mydb_backup.sql
备份文件可以直接保存到本地磁盘,也可以通过网络传输到其他服务器。
使用 pg_dumpall
pg_dumpall
是另一个 PostgreSQL 自带的工具,用于备份整个 PostgreSQL 集群,包括所有数据库和全局对象。基本语法如下:
pg_dumpall -U 用户名 -h 主机地址 -p 端口 > 备份文件.sql
例如:
pg_dumpall -U postgres -h 10.10.180.251 -p 4815 > cluster_backup.sql
这种方法也可以用来备份远端数据库。
使用 rsync
rsync
可以用于将数据目录同步到远端备份服务器。这通常用于物理备份,即将整个 PostgreSQL 数据目录复制到备份服务器上。基本语法如下:
rsync -avz -e ssh 用户名@远端主机地址:/远端数据目录/ /本地备份目录/
例如:
rsync -avz -e ssh postgres@10.10.180.251:/pgdata/data/postgres-ae6e2104 /backrestrepo/postgres-ae6e2104-backups/
这种方式需要确保 PostgreSQL 数据库处于一致状态,通常需要使用 pg_start_backup
和 pg_stop_backup
函数来保证备份的一致性。
使用 pgBackRest
pgBackRest 是一个功能强大的备份工具,支持远端备份和恢复。它可以通过 SSH 或 TLS 连接远程主机,支持物理备份和逻辑备份。
以下是使用 pgBackRest 进行远端备份的基本步骤:
-
安装 pgBackRest:在数据库服务器和备份服务器上安装相同版本的 pgBackRest。
-
配置 SSH 密钥认证:确保备份服务器可以通过 SSH 免密码登录到数据库服务器。在备份服务器上生成 SSH 密钥对,并将公钥添加到数据库服务器的
authorized_keys
文件中。 -
创建 pgBackRest 配置文件:在备份服务器上配置 pgBackRest,指定数据库主机、数据目录和备份仓库路径。例如:
[db] pg1-host=db1 pg1-path=/var/lib/postgresql/10/main [global] repo1-path=/var/lib/pgbackrest repo1-retention-full=2 start-fast=y
-
创建 Stanza:在备份服务器上运行以下命令初始化备份仓库结构:
sudo -u pgbackrest pgbackrest --stanza=db stanza-create
-
执行备份:在备份服务器上运行备份命令:
sudo -u pgbackrest pgbackrest --stanza=db backup
-
验证备份:使用
pgbackrest info
命令查看备份信息,确保备份成功。
pg_basebackup
pg_basebackup
是 PostgreSQL 提供的一个用于远端备份的工具,它可以从远端的 PostgreSQL 数据库集群获取基线备份。以下是 pg_basebackup
的基本用法:
基本语法
pg_basebackup [选项...]
常用选项
-h host
或--host=host
:指定远端 PostgreSQL 服务器的主机地址。-p port
或--port=port
:指定远端 PostgreSQL 服务器的端口号。-U username
或--username=username
:指定用于连接远端服务器的用户名。-D directory
或--pgdata=directory
:指定备份数据的存放目录。-F format
或--format=format
:指定备份格式,可以是p
(plain,默认值)或t
(tar)。-X method
或--wal-method=method
:指定如何处理 WAL 日志,可选值为stream
(流式传输)、fetch
(备份后获取)或none
(不包含 WAL 日志)。-v
或--verbose
:启用详细模式,显示更多备份过程中的信息。-P
或--progress
:启用进度报告,显示备份进度。-R
或--write-recovery-conf
:创建standby.signal
文件并追加连接设置到postgresql.auto.conf
文件,便于设置备用服务器。
示例
以下是一些使用 pg_basebackup
进行远端备份的例子:
- 全量备份
pg_basebackup -h 10.10.180.251 -p 4815 -U postgres -D /backup/pg_basebackup -Fp -v
这条命令将对远端主机 10.10.180.251
上的 PostgreSQL 数据库进行全量备份,并将备份数据存放在 /backup/pg_basebackup
目录下。
- 增量备份
pg_basebackup -h 10.10.180.251 -p 4815 -U postgres -D /backup/pg_incremental -Ft -v --incremental=/backup/pg_basebackup/backup_manifest
此命令基于之前全量备份的 backup_manifest
文件进行增量备份,备份数据将以 tar 格式存放在 /backup/pg_incremental
目录中。
- 备份并包含 WAL 日志流
pg_basebackup -h 10.10.180.251 -p 4815 -U postgres -D /backup/pg_basebackup_wal -Fp -v -X stream
这条命令在进行全量备份的同时,通过流式传输包含 WAL 日志,便于后续的时间点恢复。
- 创建备用服务器配置
pg_basebackup -h 10.10.180.251 -p 4815 -U postgres -D /backup/pg_standby -Fp -v -R
该命令在备份数据的同时,创建 standby.signal
文件并配置 postgresql.auto.conf
,为设置流复制的备用服务器做好准备。
在使用 pg_basebackup
进行远端备份时,请确保远端 PostgreSQL 服务器已配置好 pg_hba.conf
文件,允许复制连接,并且 max_wal_senders
参数设置足够大以支持备份操作。