如果您是數據庫管理員,則很可能會有數據的備份。如果您有數據備份,那么您很可能考慮過如何自動化備份過程。本文可以作為如何自動化 PostgreSQL 備份的指南。
選擇備份方式
默認情況下,就 PostgreSQL 而言,在備份數據時,您有幾種選擇:
PostgreSQL 提供的這兩個工具之間的主要區(qū)別在于: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_basebackup,創(chuàng)建 PostgreSQL 數據庫的物理備份。
$ pg_basebackup -D /backups -x
選項包括:
? -D
用于指定輸出目錄的路徑
? -x
將事務日志包含在備份文件夾中
在 Linux 上自動備份
以下是有關如何使用 cron 作業(yè),自動執(zhí)行 PostgreSQL 備份過程的簡易指南。首先,創(chuàng)建一個執(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
在腳本準備完成后,我們現在可以調度它,以便它可以在每天的特定時間運行。在本文中,我們將安排此程序在每天午夜運行。
我們可以使用命令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
在完成設置的配置和規(guī)劃好備份后,PostgreSQL 備份現在應該已自動化了。
在 Windows 上自動備份
創(chuàng)建一個批處理腳本文件,可能命名為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%
您需要根據實際生產環(huán)境,更改腳本文件:
? 將<BACKUP_DIR>
更改為有效的備份目錄。
注意:確保在單詞 BACKUP_FILE 后沒有空格,任何空格都會導致該設置不起作用。
? 將上面的<Password>
設置更改為正確的備份用戶密碼。PGPASSWORD 的說明。
注意:確保在單詞 PGPASSWORD 后沒有空格,任何空格都會導致該設置不起作用。
? 將<HostName>
更改為部署 PostgreSQL 的服務器的 IP 地址或 DNS 名稱。
? 將<UserName>
更改為備份用戶,要確保該用戶有權訪問數據庫以進行備份。
? 將<PGHOME>
更改為 PostgreSQL 備份工具的安裝目錄。
在腳本準備完成后,在 Windows 任務計劃程序中創(chuàng)建一個任務。
在選擇好將在其中運行任務的安全上下文后,建議更改運行備份和存儲文件的目錄安全性,因為一個高級用戶名和密碼會以純文本形式存儲。另一個方法是修改 pg_hba.conf 文件,將備份服務器添加為可信任的連接。
總結
自動化 PostgreSQL 備份并不像乍一看那么難。使用 pg_dumpall、pg_basebackup 或 pg_backrest 時,在 Linux crontab 或 Windows 任務計劃程序的幫助下,您可以放心,您的 PostgreSQL 數據會得到妥善處理。如果您還有其他問題,請務必查看備份工具的文檔,或者在需要進一步幫助時聯(lián)系支持人員。
該文章在 2024/10/30 14:36:54 編輯過