PostgreSQL 怎么自动备份?自己动手吧

数据库 PostgreSQL
自动化 PostgreSQL 备份并不像乍一看那么难。使用 pg_dumpall、pg_basebackup 或 pg_backrest 时,在 Linux crontab 或 Windows 任务计划程序的帮助下,您可以放心,您的 PostgreSQL 数据会得到妥善处理。

选择备份方式

默认情况下,就 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 数据会得到妥善处理。如果您还有其他问题,请务必查看备份工具的文档,或者在需要进一步帮助时联系支持人员。

责任编辑:武晓燕 来源: 红石PG
相关推荐

2012-09-28 13:39:40

Windows备份

2009-02-20 12:09:10

数据备份数据安全NAS

2018-09-12 10:58:11

NBA数据存储

2011-08-25 09:30:22

2020-09-29 12:13:46

SQL引擎底层

2015-09-01 09:49:28

2020-05-20 13:53:41

HTTP环境安装

2020-12-18 09:49:21

鸿蒙HarmonyOS游戏

2014-06-20 09:18:54

Dustjs中间件

2009-03-16 16:30:18

2011-05-06 15:35:58

打印机打印故障

2009-10-27 09:01:54

VB.NET内存指针

2017-05-23 15:37:20

路由器无线密码

2011-08-12 10:46:57

Linux

2009-12-03 13:56:05

Suse Linux开xinetd

2024-12-06 09:58:09

2015-01-04 13:56:44

DockerPostgreSQL

2009-09-29 10:52:34

Linux自动备份操作系统

2013-11-29 14:07:29

编程产品

2024-11-08 09:06:16

agentJava探针
点赞
收藏

51CTO技术栈公众号