如果您是數(shù)據(jù)庫管理員,則很可能會(huì)有數(shù)據(jù)的備份。如果您有數(shù)據(jù)備份,那么您很可能考慮過如何自動(dòng)化備份過程。本文可以作為如何自動(dòng)化 PostgreSQL 備份的指南。
選擇備份方式
默認(rèn)情況下,就 PostgreSQL 而言,在備份數(shù)據(jù)時(shí),您有幾種選擇:
PostgreSQL 提供的這兩個(gè)工具之間的主要區(qū)別在于:pg_dump 和 pg_dumpall 是邏輯備份,而 pg_basebackup 是物理備份。pg_dump 和 pg_dumpall 之間也存在差異。第一個(gè)通常用于備份單個(gè) PostgreSQL 數(shù)據(jù)庫,pg_dumpall 更常用于將所有 PostgreSQL 數(shù)據(jù)庫轉(zhuǎn)儲到單個(gè)腳本文件中。以下是使用 pg_dump 實(shí)現(xiàn)備份目的的方法:
$ pg_dump -U postgres -W -F t database_name > database_name.tar
以下是上述命令的作用:
? pg_dump
調(diào)用 pg_dump。
? -U
選項(xiàng)指定用戶。
? -W
選項(xiàng)強(qiáng)制 pg_dump 在單擊 Enter 鍵后立即提示輸入密碼。
? -F
選項(xiàng)指定文件輸出格式,文件格式可以是:c
自定義格式、d
目錄格式的存檔、t
生成.tar
文件,或p
純文件。
? database_name
指定要備份數(shù)據(jù)的數(shù)據(jù)庫名稱。
? database_name.tar
是輸出文件。
您還可以使用 pg_dumpall,將所有 PostgreSQL 數(shù)據(jù)庫備份到一個(gè)腳本文件中,如上所述。下面演示了如何做到這一點(diǎn):
$ pg_dumpall -U postgres -f data.sql
pg_dumpall 的選項(xiàng)與 pg_dump 的選項(xiàng)類似。
最后,您可以使用 pg_basebackup,創(chuàng)建 PostgreSQL 數(shù)據(jù)庫的物理備份。
$ pg_basebackup -D /backups -x
選項(xiàng)包括:
? -D
用于指定輸出目錄的路徑
? -x
將事務(wù)日志包含在備份文件夾中
在 Linux 上自動(dòng)備份
以下是有關(guān)如何使用 cron 作業(yè),自動(dòng)執(zhí)行 PostgreSQL 備份過程的簡易指南。首先,創(chuàng)建一個(gè)執(zhí)行備份的 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
在腳本準(zhǔn)備完成后,我們現(xiàn)在可以調(diào)度它,以便它可以在每天的特定時(shí)間運(yùn)行。在本文中,我們將安排此程序在每天午夜運(yùn)行。
我們可以使用命令crontab -e
打開 crontab,并輸入以下命令:
0 0 * * * bash /home/to/backup.sh >> /home/to/backup.log 2>&1
下面是調(diào)度backup.sh
腳本的示例。我們安排文件在每天午夜運(yùn)行,并將日志記錄到backup.log
文件。
0 0 * * * bash /home/postgres/backup/backup.sh >> /home/postgres/backup/backup.log 2>&1
在完成設(shè)置的配置和規(guī)劃好備份后,PostgreSQL 備份現(xiàn)在應(yīng)該已自動(dòng)化了。
在 Windows 上自動(dòng)備份
創(chuàng)建一個(gè)批處理腳本文件,可能命名為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%
您需要根據(jù)實(shí)際生產(chǎn)環(huán)境,更改腳本文件:
? 將<BACKUP_DIR>
更改為有效的備份目錄。
注意:確保在單詞 BACKUP_FILE 后沒有空格,任何空格都會(huì)導(dǎo)致該設(shè)置不起作用。
? 將上面的<Password>
設(shè)置更改為正確的備份用戶密碼。PGPASSWORD 的說明。
注意:確保在單詞 PGPASSWORD 后沒有空格,任何空格都會(huì)導(dǎo)致該設(shè)置不起作用。
? 將<HostName>
更改為部署 PostgreSQL 的服務(wù)器的 IP 地址或 DNS 名稱。
? 將<UserName>
更改為備份用戶,要確保該用戶有權(quán)訪問數(shù)據(jù)庫以進(jìn)行備份。
? 將<PGHOME>
更改為 PostgreSQL 備份工具的安裝目錄。
在腳本準(zhǔn)備完成后,在 Windows 任務(wù)計(jì)劃程序中創(chuàng)建一個(gè)任務(wù)。
在選擇好將在其中運(yùn)行任務(wù)的安全上下文后,建議更改運(yùn)行備份和存儲文件的目錄安全性,因?yàn)橐粋€(gè)高級用戶名和密碼會(huì)以純文本形式存儲。另一個(gè)方法是修改 pg_hba.conf 文件,將備份服務(wù)器添加為可信任的連接。
總結(jié)
自動(dòng)化 PostgreSQL 備份并不像乍一看那么難。使用 pg_dumpall、pg_basebackup 或 pg_backrest 時(shí),在 Linux crontab 或 Windows 任務(wù)計(jì)劃程序的幫助下,您可以放心,您的 PostgreSQL 數(shù)據(jù)會(huì)得到妥善處理。如果您還有其他問題,請務(wù)必查看備份工具的文檔,或者在需要進(jìn)一步幫助時(shí)聯(lián)系支持人員。
該文章在 2024/10/30 14:36:54 編輯過