使用指令碼來備份和還原 PostgreSQL 資料庫
下列 指令碼可執行 PostgreSQL 資料庫的備份。執行此指令碼時,您不需要停止資料庫就能執行備份。
- postgresql_backup_pre.sh:此指令碼會讓資料庫進入備份模式。
- postgresql_snapshot_post.sh:此指令碼會讓資料庫退出備份模式。
- postgresql_settings:這是配置檔案,其中的 PostgreSQL 變數可能需要更新。
- postgresql_backup_post.sh:此指令碼會更新有關備份狀態的日誌。
前置先決條件
開始備份之前,請務必執行下列動作:
- 將 WAL level 設定為 archive (或 hot_standby)
- 將 archive_mode 設定為 on
- 必須設定 archive_command 以指定封存位置
附註:若要套用這些設定,請在配置 postgresql.conf 檔案中的這些設定後,將伺服器重新開機。
以下命令可協助您在重新開機之後檢查封存模式的狀態:
- show archive_mode
- show archive_command
- show WAL level
套用指令碼
請採取以下步驟:
- 解壓縮 LinuxPostgres.zip,其中包含下列四個檔案:postgresql_backup_pre.sh、postgresql_snapshot_post.sh、postgresql_settings、postgresql_backup_post.sh
- 將前置/後置備份/快照的檔案複製到 Linux 備份伺服器的下列路徑 /opt/Arcserve/d2dserver/usr/prepost。
- 將 postgresql_settings 複製到來源路徑 /root/backup。
- 請務必檢查 postgresql_settings 中針對變數所設定的所有值,並根據您的環境修改必要的變更。
- 從 UDP 主控台配置計畫,並選取 PostgreSQL 節點作為來源。
-
- 確認備份狀態。若要知道 PostgreSQL 備份的狀態,請查看 arcserve_postgresql_backup_${DATE}.log 檔案。這個日誌檔是在由使用者設定的目錄中建立。如需配置此目錄的詳細資訊,請參閱 postgresql_settings 檔案。
還原 PostgreSQL 資料庫
請採取以下步驟:
- 停止資料庫伺服器。
- 若要還原原始位置,請執行下列作業:
- 刪除目前 /data 資料夾中的檔案和目錄。
- 執行整個 /data 資料夾的還原。
- 完成從 /data 資料夾還原之後,刪除下列資料夾中的檔案:
- pg_dynshmem/
- pg_notify/
- pg_serial/
- pg_snapshots/
- pg_stat_tmp/
- pg_subtrans/
- pg_internal.init
- 移至配置用於 WAL 封存的資料夾,並執行下列作業:
- 刪除還原的 pg_wal 目錄中的檔案,其中包含與備份期間所執行之交易相關的資訊。
- 現在,將檔案從使用者定義的封存位置複製到 pg_wal 資料夾中,以資料一致性與時間點復原。
- 啟動資料庫伺服器。
還原至相同伺服器上的替代位置
- 停止資料庫伺服器。
- 執行 PGDATA 將其配置為 "new_data_directory_path"。
- 使用 'Initdb' 命令初始化新建立的資料庫。
- 刪除目前 /data 資料夾中的檔案和目錄。
- 執行整個 /data 資料夾的還原。
- 完成從 /data 資料夾還原之後,從下列資料夾中刪除檔案:
- pg_dynshmem/
- pg_notify/
- pg_serial/
- pg_snapshots/
- pg_stat_tmp/
- pg_subtrans/
- pg_internal.init
- 移至配置用於 WAL 封存的資料夾,然後執行下列作業:
- 刪除還原的 pg_wal 目錄中的檔案,其中包含與備份期間所執行之交易相關的資訊。
- 現在,將檔案從使用者定義的封存位置複製到 pg_wal 資料夾中,以資料一致性與時間點復原。
- 啟動資料庫伺服器。
- 附註:請確定在更新 PGDATA 的工作階段中執行資料庫啟動。
限制
如果為 PostgreSQL 資料庫配置了非預設的連接埠,上述指令碼將無法執行備份。此指令碼只能用於預設連接埠 5432。
解決辦法是使用下列建議,手動修改 postgresql_backup_pre.sh 和 postgresql_snapshot_post.sh 指令碼:
- postgresql_backup_pre.sh:
- 原始: sudo -u ${USERNAME} -H -- psql -c "SELECT pg_start_backup('Arcserve UDP backup - ${DATE} $(timestamp)', true)" >> ${LOG} 2>&1
- 修改為: sudo -u ${USERNAME} -H -- psql -p 5432 -c "SELECT pg_start_backup('Arcserve UDP backup - ${DATE} $(timestamp)', true)" >> ${LOG} 2>&1
- postgresql_snapshot_post.sh:
- 原始: sudo -u ${USERNAME} -H -- psql -c "SELECT pg_stop_backup()" >> ${LOG} 2>&1
- 修改為: sudo -u ${USERNAME} -H -- psql -p 5432 -c "SELECT pg_stop_backup()" >> ${LOG} 2>&1
Copyright © 2014-2021, Arcserve. All rights reserved.
|
|