选择备份方式
默认情况下,就 PostgreSQL 而言,在备份数据时,您有几种选择:
• 您可以使用pg_dump或pg_dumpall
• 您也可以使用pg_basebackup
PostgreSQL 提供的这两个工具之间的主要区别在于:pg_dump 和 pg_dumpall 是逻辑备份,而 pg_basebackup 是物理备份。pg_dump 和 pg_dumpall 之间也存在差异。第一个通常用于备份单个 PostgreSQL 数据库,pg_dumpall 更常用于将所有 PostgreSQL 数据库转储到单个脚本文件中。以下是使用 pg_dump 实现备份目的的方法:
$ pg_dump -U postgres -W -F t database_name > database_name.tar
以下是上述命令的作用:
• pg_dump调用 pg_dump。
• -U选项指定用户。
• -W选项强制 pg_dump 在单击 Enter 键后立即提示输入密码。
• -F选项指定文件输出格式,文件格式可以是:c自定义格式、d目录格式的存档、t生成.tar文件,或p纯文件。
• database_name指定要备份数据的数据库名称。
• database_name.tar是输出文件。
您还可以使用 pg_dumpall,将所有 PostgreSQL 数据库备份到一个脚本文件中,如上所述。下面演示了如何做到这一点:
$ pg_dumpall -U postgres -f data.sql
pg_dumpall 的选项与 pg_dump 的选项类似。
• 您还可以使用命令$ pg_dumpall --schema-only > schema.sql,备份所有数据库中的所有对象,包括角色、表空间、模式、表、索引、触发器、函数、约束、视图、所有权和权限。
• 如果您只想备份角色,请使用$ pg_dumpall --roles-only > roles.sql。
最后,您可以使用 pg_basebackup,创建 PostgreSQL 数据库的物理备份。
$ pg_basebackup -D /backups -x
选项包括:
• -D用于指定输出目录的路径
• -x将事务日志包含在备份文件夹中
在 Linux 上自动备份
以下是有关如何使用 cron 作业,自动执行 PostgreSQL 备份过程的简易指南。首先,创建一个执行备份的 bash 脚本,可能命名为backup.sh:
#!/bin/bash
# Optional hostname to adhere to pg_hba policies. Will default to "localhost" if none specified.
BACKUP_HOST="192.168.89.128"
# Optional username to connect to database as. Will default to "postgres" if none specified.
BACKUP_USER=postgres
# backup directory infomation
BACKUP_DIR=/home/postgres/backup/
BACKUP_FILE="$BACKUP_DIR/db_backup_$(date +%Y%m%d).bak"
# Set the PGPASSWORD environment variable
export PGPASSWORD="test"
# Perform the backup
pg_dumpall -h $BACKUP_HOST -U $BACKUP_USER -f $BACKUP_FILE
在脚本准备完成后,我们现在可以调度它,以便它可以在每天的特定时间运行。在本文中,我们将安排此程序在每天午夜运行。
我们可以使用命令crontab -e打开 crontab,并输入以下命令:
0 0 * * * bash /home/to/backup.sh >> /home/to/backup.log 2>&1
下面是调度backup.sh脚本的示例。我们安排文件在每天午夜运行,并将日志记录到backup.log文件。
0 0 * * * bash /home/postgres/backup/backup.sh >> /home/postgres/backup/backup.log 2>&1
在完成设置的配置和规划好备份后,PostgreSQL 备份现在应该已自动化了。
在 Windows 上自动备份
创建一个批处理脚本文件,可能命名为backup.bat。该文件必须位于 PostgreSQL 备份目录中,而不是 bin 文件夹中。
@echo off
for /f "tokens=1-4 delims=/ " %%i in ("%date%") do (
set year=%%i
set month=%%j
set monthday=%%k
set weekday=%%l
)
set datestr=%year%%month%%monthday%
set BACKUP_FILE=<BACKUP_DIR>\db_backup_%datestr%.bak
echo backup file name is %BACKUP_FILE%
SET PGPASSWORD=<Password>
echo on
<PGHOME>\bin\pg_dumpall -h <HostName> -U <UserName> -f %BACKUP_FILE%
您需要根据实际生产环境,更改脚本文件:
• 将<BACKUP_DIR>更改为有效的备份目录。
注意:确保在单词 BACKUP_FILE 后没有空格,任何空格都会导致该设置不起作用。
• 将上面的<Password>设置更改为正确的备份用户密码。PGPASSWORD 的说明。
注意:确保在单词 PGPASSWORD 后没有空格,任何空格都会导致该设置不起作用。
• 将<HostName>更改为部署 PostgreSQL 的服务器的 IP 地址或 DNS 名称。
• 将<UserName>更改为备份用户,要确保该用户有权访问数据库以进行备份。
• 将<PGHOME>更改为 PostgreSQL 备份工具的安装目录。
在脚本准备完成后,在 Windows 任务计划程序中创建一个任务。
在选择好将在其中运行任务的安全上下文后,建议更改运行备份和存储文件的目录安全性,因为一个高级用户名和密码会以纯文本形式存储。另一个方法是修改 pg_hba.conf 文件,将备份服务器添加为可信任的连接。
总结
自动化 PostgreSQL 备份并不像乍一看那么难。使用 pg_dumpall、pg_basebackup 或 pg_backrest 时,在 Linux crontab 或 Windows 任务计划程序的帮助下,您可以放心,您的 PostgreSQL 数据会得到妥善处理。如果您还有其他问题,请务必查看备份工具的文档,或者在需要进一步帮助时联系支持人员。