Windows環境PgSql自動備份指令碼

佳楠的个人Log發表於2024-10-18

PgSql指令碼如下

儲存到指定路徑 並 添打成壓縮包

@echo off
setlocal enabledelayedexpansion

set pg_path=D:\PgSql\bin	REM 資料庫Bin路徑
set base_backup_path=D:\backup_pgsql	REM 備份路徑
set db_name= pgsql	REM 資料庫名稱
set user=postgres	REM 資料庫賬戶名
set PGPASSWORD=password 	REM 資料庫密碼
set port=15432	REM 資料庫埠

for /f "tokens=2 delims==" %%i in ('wmic os get localdatetime /value') do set datetime=%%i
set year=%datetime:~0,4%
set month=%datetime:~4,2%
set day=%datetime:~6,2%
set time=%datetime:~8,6%

set backup_path=%base_backup_path%\%year%\%month%\%day%
if not exist "%backup_path%" (
    mkdir "%backup_path%"
)

rem 只保留到秒,去掉微秒部分
set backup_file=%backup_path%\%db_name%_%year%%month%%day%_%time:~0,6%.backup
echo 備份檔案路徑: !backup_file!

echo 開始備份...
"%pg_path%\pg_dump" -U %user% -p %port% -F c -b -v -f "!backup_file!" %db_name% > "%base_backup_path%\backup_log.txt" 2>&1

if %ERRORLEVEL% neq 0 (
    echo 備份失敗,請檢查pg_dump命令是否正確執行。
    echo 檢視日誌檔案:%base_backup_path%\backup_log.txt
) else (
    echo 備份完成: !backup_file!

    rem 使用 PowerShell 壓縮檔案
    set zip_file=%backup_path%\%db_name%_%year%%month%%day%_%time:~0,6%.zip
    echo 壓縮檔案路徑: !zip_file!  rem 新增此行以檢查 zip_file 的值

    rem 使用 call 來傳遞變數
    powershell -command "Compress-Archive -Path '!backup_file!' -DestinationPath '!zip_file!'"

    if !ERRORLEVEL! neq 0 (
        echo 壓縮失敗,請檢查PowerShell命令是否正確執行。
    ) else (
        echo 壓縮完成: !zip_file!

        rem 刪除備份檔案
        del "!backup_file!"
        echo 備份檔案已刪除: !backup_file!
    )
)

endlocal

Windows 配置定時任務

  • 任務計劃程式
  • 建立基本任務
  • 操作選擇啟動程式
  • 路徑選擇為 剛剛編寫的.bat指令碼
  • 儲存

相關文章