最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

PostgreSQ數(shù)據(jù)庫實現(xiàn)在Windows上異地自動備份指南的詳細教程

 更新時間:2025年12月15日 15:08:55   作者:古渡藍按  
這篇文章主要為大家詳細介紹了如何在Windows系統(tǒng)上實現(xiàn)PostgreSQL數(shù)據(jù)庫的異地自動備份,文中的示例代碼講解詳細,感興趣的小伙伴可以了解下

前期準備

確保網(wǎng)絡連通:確保備份服務器能訪問數(shù)據(jù)庫服務器的5432端口

安裝PostgreSQL客戶端:在備份服務器上安裝PostgreSQL客戶端(只需安裝pg_dump工具即可)
獲取必要信息:

  • 數(shù)據(jù)庫服務器IP
  • PostgreSQL端口(默認5432)
  • 數(shù)據(jù)庫用戶名(如postgres)
  • 數(shù)據(jù)庫密碼

要備份的數(shù)據(jù)庫名

實現(xiàn)步驟

步驟一:創(chuàng)建備份腳本

在備份服務器上創(chuàng)建一個批處理文件(比如pg_backup.bat),內(nèi)容如下:

@echo off
REM 設(shè)置變量
SET PGPATH=C:\Program Files\PostgreSQL\16\bin\pg_dump.exe
SET BACKUP_DIR=D:\pg_backup\
SET DB_HOST=數(shù)據(jù)庫服務器IP
SET DB_PORT=5432
SET DB_USER=postgres
SET DB_PASS=數(shù)據(jù)庫密碼
SET DB_NAME=要備份的數(shù)據(jù)庫名
SET DATE=%date:~0,4%%date:~5,2%%date:~8,2%
SET TIME=%time:~0,2%%time:~3,2%%time:~6,2%

REM 創(chuàng)建備份目錄
if not exist "%BACKUP_DIR%" mkdir "%BACKUP_DIR%"

REM 執(zhí)行備份
echo 正在備份數(shù)據(jù)庫...
"%PGPATH%" -h %DB_HOST% -p %DB_PORT% -U %DB_USER% -w -F c -b -v -f "%BACKUP_DIR%%DB_NAME%_%DATE%_%TIME%.backup" %DB_NAME%

REM 傳輸?shù)竭h程服務器(異地存儲)
echo 正在傳輸備份文件到遠程服務器...
scp "%BACKUP_DIR%%DB_NAME%_%DATE%_%TIME%.backup" 用戶名@遠程服務器IP:/遠程存儲路徑/

REM 清理臨時文件(可選)
REM del /f /q "%BACKUP_DIR%%DB_NAME%_%DATE%_%TIME%.backup"

echo 備份完成!
pause

重要提示

  • 請將C:\Program Files\PostgreSQL\16\bin\pg_dump.exe替換為你的PostgreSQL實際安裝路徑
  • 將數(shù)據(jù)庫服務器IP、數(shù)據(jù)庫密碼、要備份的數(shù)據(jù)庫名等替換為實際值

步驟二:配置免密登錄(可選但推薦)

為了避免每次備份都要輸入密碼,可以在備份服務器上配置免密登錄:

在備份服務器上,創(chuàng)建pgpass.conf文件:

.pgpass文件格式詳解

.pgpass 文件的每一行必須嚴格遵循 5 個字段 的格式:

主機:端口:數(shù)據(jù)庫:用戶名:密碼

例子說明:

182.12.14.22:5432:*:postgres:your_password

字段說明
主機182.12.14.22PostgreSQL 服務器 IP 地址
端口5432PostgreSQL 端口號(默認 5432)
數(shù)據(jù)庫*要連接的數(shù)據(jù)庫名(* 表示匹配所有數(shù)據(jù)庫)
用戶名postgresPostgreSQL 登錄用戶名(通常是超級用戶)
密碼your_password對應用戶的密碼

如果不行,可嘗試另一個辦法:創(chuàng)建配置文件(在文章最后,報錯里面的解決辦法)

步驟三:設(shè)置任務計劃程序

  • 打開"任務計劃程序"(在開始菜單搜索)
  • 點擊"創(chuàng)建基本任務"
  • 命名為"PostgreSQL異地備份"
  • 選擇觸發(fā)器:每天凌晨2點(避免影響業(yè)務)
  • 選擇操作:啟動程序
  • 程序/腳本:選擇你創(chuàng)建的pg_backup.bat文件
  • 完成設(shè)置

步驟四:測試備份

  • 手動運行pg_backup.bat測試腳本
  • 檢查備份文件是否生成在D:\pg_backup\
  • 確認文件是否備份到服務器

實際示例

假設(shè)你的配置如下:

PostgreSQL安裝路徑:C:\Program Files\PostgreSQL\16\bin
數(shù)據(jù)庫服務器IP:192.168.1.105
數(shù)據(jù)庫名:mydb
用戶名:postgres
密碼:password123
遠程存儲位置:

那么你的備份腳本應該是:

@echo off
REM PostgreSQL異地自動備份腳本 (優(yōu)化版)
REM 1. 修復日期格式問題 (兼容中文/英文系統(tǒng))
REM 2. 添加完整錯誤檢查和日志
REM 3. 優(yōu)化清理邏輯 (精準刪除30天前文件)
REM 4. 避免彈窗干擾 (后臺靜默運行)
REM 5.請將C:\Program Files\PostgreSQL\16\bin\pg_dump.exe替換為你的PostgreSQL實際安裝路徑

chcp 65001 >nul  :: 解決中文亂碼問題

REM export LANG=zh_CN.UTF-8
REM export LC_ALL=zh_CN.UTF-8

title 異地備份正式數(shù)據(jù)庫程序

REM ================ 配置區(qū)域 (請?zhí)鎿Q為你的實際信息) ================
SET PGPATH=C:\Program Files\PostgreSQL\16\bin\pg_dump.exe
SET BACKUP_DIR=E:\pg_backupData\
SET DB_HOST=192.168.1.105
SET DB_PORT=5432
SET DB_USER=postgres
SET DB_PASS=password123
SET DB_NAME=mydb
REM REMOTE_SERVER 和 REMOTE_PATH 不需要了,因為我們直接在備份服務器保存文件
REM ================================================================

REM ================ 1. 創(chuàng)建目錄 ================
if not exist "%BACKUP_DIR%" mkdir "%BACKUP_DIR%"
if not exist "%LOG_DIR%" mkdir "%LOG_DIR%"

REM ================ 2. 生成時間戳 ================
for /f "tokens=2 delims==" %%a in ('wmic os get localdatetime /value') do set "datetime=%%a"
set "DATE=%datetime:~0,8%"
set "TIME=%datetime:~8,6%"
set "BACKUP_FILE=%DB_NAME%_%DATE%_%TIME%.backup"
SET LOG_FILE=%BACKUP_DIR%backup_%DATE%_%TIME%.log

REM ================ 3. 開始備份(輸出到獨立日志)================
echo [%DATE% %TIME%] === 備份任務開始 === > "%LOG_FILE%"
echo [%DATE% %TIME%] 正在備份數(shù)據(jù)庫... >> "%LOG_FILE%"

"%PGPATH%" -h %DB_HOST% -p %DB_PORT% -U %DB_USER% -F c -b -v -f "%BACKUP_DIR%%BACKUP_FILE%" %DB_NAME% >> "%LOG_FILE%" 2>&1

REM ================ 4. 檢查備份結(jié)果 ================
if %errorlevel% equ 0 (
    echo [%DATE% %TIME%] 000000;Success >> "%LOG_FILE%"
    echo [%DATE% %TIME%] 備份成功! >> "%LOG_FILE%"
) else (
    echo [%DATE% %TIME%] 44444;failure: %errorlevel% >> "%LOG_FILE%"
    echo [%DATE% %TIME%] 備份失??!錯誤代碼: %errorlevel% >> "%LOG_FILE%"
    goto :cleanup_logs
)

REM ================ 5. 清理30天前的備份文件(無論成功與否都執(zhí)行)================
echo [%DATE% %TIME%] 清理30天前的備份文件... >> "%LOG_FILE%"

REM 使用 PowerShell 安全清理 .backup 文件(避免 forfiles 兼容性問題)
REM 清理30天前的 .backup 文件

REM 清理30天前的.backup文件
echo [%DATE% %TIME%] Clean .backup files older than 30 days >> "%LOG_FILE%"
powershell -Command "Get-ChildItem '%BACKUP_DIR%\*.backup' | Where-Object {!$_.PSIsContainer -and $_.LastWriteTime -lt (Get-Date).AddDays(-30)} | Remove-Item -Force"
echo [%DATE% %TIME%] Clean .backup files older than 30 days--Success >> "%LOG_FILE%"


REM 清理30天前的.log文件
echo [%DATE% %TIME%] Clean .log files older than 30 days >> "%LOG_FILE%"
powershell -Command "Get-ChildItem '%BACKUP_DIR%\*.log' | Where-Object {!$_.PSIsContainer -and $_.LastWriteTime -lt (Get-Date).AddDays(-30)} | Remove-Item -Force"
echo [%DATE% %TIME%] Clean .log files older than 30 days--Success >> "%LOG_FILE%"


echo [%DATE% %TIME%] === 備份任務完成 === >> "%LOG_FILE%"

重要提醒

  • 首次運行時:可能會提示"無法連接",確保數(shù)據(jù)庫服務器防火墻允許5432端口
  • 如果使用遠程服務器:確保遠程服務器已安裝OpenSSH或WinSCP
  • 備份頻率:根據(jù)業(yè)務需求調(diào)整,建議至少每天備份一次
  • 測試恢復:每月至少測試一次恢復流程,確保備份可用

詳細任務計劃設(shè)置指南

重要:操作前請確保:

  • 你的Windows已安裝 OpenSSH(用于scp命令)
  • 備份服務器能通過SSH訪問遠程服務器(測試:在CMD中輸入 ssh backup@192.168.1.105

步驟 1:安裝OpenSSH(如果未安裝)

打開 PowerShell(管理員)

運行:

Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0

重啟電腦

步驟 2:配置任務計劃(詳細操作)

1.打開任務計劃程序:Win + R → 輸入 taskschd.msc → 回車

2.創(chuàng)建基本任務

  • 右側(cè) → 創(chuàng)建基本任務
  • 任務名稱:PostgreSQL異地自動備份
  • 描述:每天凌晨2點自動備份數(shù)據(jù)庫并清理30天前文件
  • 點擊 下一步

3.設(shè)置觸發(fā)器

  • 選擇 每天
  • 開始時間:凌晨 2:00(避開業(yè)務高峰)
  • 點擊 下一步

4.設(shè)置操作

選擇 啟動程序

程序/腳本:C:\Windows\System32\cmd.exe

參數(shù):/c "D:\backup\pg_backup.bat"

關(guān)鍵:路徑要指向你的腳本位置(如 D:\backup\pg_backup.bat

起始位置:D:\backup(腳本所在目錄)

點擊 下一步

5.高級設(shè)置(必須勾選)

右側(cè)點擊 高級設(shè)置 → 勾選:

  • 使用最高權(quán)限運行(否則可能無法訪問目錄)
  • 如果任務失敗,重新啟動(重試3次)
  • 任務運行時計算機處于空閑狀態(tài)(避免影響用戶)
  • 如果任務運行時計算機進入睡眠狀態(tài),不要喚醒計算機

點擊 確定

6.測試任務

在任務列表中右鍵點擊任務 → 運行

檢查日志文件:D:\pg_backup\backup.log

(正常應顯示 備份與清理完成!

最后檢查清單

  • 腳本中所有變量(DB_HOST, DB_PASS等)已替換為你的實際值
  • D:\pg_backup\ 目錄已存在(或腳本會自動創(chuàng)建)
  • 通過 ssh backup@192.168.1.105 測試遠程連接(輸入密碼)
  • 任務計劃已設(shè)置 凌晨2:00(非白天高峰時間)
  • 任務屬性勾選了 使用最高權(quán)限運行

效果圖

每天凌晨 2 點開始備份,并且刪除 30 天之前的備份(只保留最近30天數(shù)據(jù))

測試信息

20251212 124534] pg_dump: 錯誤: 連接到"192.168.1.105"上的服務器,端口5432失?。篺e_sendauth: no password supplied 

問題解析:fe_sendauth: no password supplied錯誤

這個錯誤非常常見,原因很簡單:PostgreSQL 服務器要求密碼驗證。

為什么會出現(xiàn)這個錯誤

在你的腳本中,你使用了 -w 參數(shù)(-w 表示 "不提示密碼"),但數(shù)據(jù)庫要求密碼驗證:

"%PGPATH%" -h %DB_HOST% -p %DB_PORT% -U %DB_USER% -w -F c -b -v -f "%BACKUP_DIR%%BACKUP_FILE%" %DB_NAME%

當使用 -w 時,pg_dump 會嘗試不提供密碼連接,但數(shù)據(jù)庫要求密碼,所以連接失敗。

解決方案(3種方法)

方法1:創(chuàng)建.pgpass文件(推薦,最安全)

這是最專業(yè)的解決方案,適用于所有系統(tǒng):

1.在備份服務器上創(chuàng)建 .pgpass 文件

路徑:C:\Users\<你的用戶名>\.pgpass(例如 C:\Users\Admin\.pgpass

文件內(nèi)容:

-- 格式:ip+端口+數(shù)據(jù)庫+賬號+密碼
-- 也可以使用通配符
192.168.1.105:5432:mydb:postgres:你的密碼

 2.設(shè)置文件權(quán)限(Windows中無法完全設(shè)置,但可以隱藏文件):

右鍵點擊 `.pgpass` 文件 → 屬性 → 勾選 "隱藏" → 應用

為什么這個方法好

  • 密碼不會出現(xiàn)在腳本或命令行中
  • 符合安全最佳實踐
  • 適用于所有自動化腳本

方法2:在腳本中直接提供密碼(不推薦,有安全風險)

如果你堅持要這樣做(**不推薦**,因為密碼會暴露在腳本中):

"%PGPATH%" -h %DB_HOST% -p %DB_PORT% -U %DB_USER% -W -F c -b -v -f "%BACKUP_DIR%%BACKUP_FILE%" %DB_NAME%

但這樣會在命令行中提示輸入密碼,在自動化腳本中無法工作。

方法3:修改腳本,去掉-w參數(shù)(不推薦)

"%PGPATH%" -h %DB_HOST% -p %DB_PORT% -U %DB_USER% -F c -b -v -f "%BACKUP_DIR%%BACKUP_FILE%" %DB_NAME%

這樣會提示輸入密碼,但在自動化腳本中無法交互,所以不推薦。

重要提示

確保數(shù)據(jù)庫服務器允許密碼驗證:在 pg_hba.conf 中,確保有類似配置:

host    all             all             0.0.0.0/0            md5

這表示使用密碼驗證(md5)。

檢查數(shù)據(jù)庫密碼是否正確:在數(shù)據(jù)庫服務器上,可以嘗試用 psql -U postgres 連接,確認密碼是否正確。

根本原因(99% 的情況)

.pgpass 文件不在正確的位置,或 文件名/格式有隱藏問題

PostgreSQL 在 Windows 上查找 .pgpass 的順序是:

  • PGPASSFILE 環(huán)境變量指定的路徑
  • %APPDATA%\postgresql\pgpass.conf這是 Windows 的標準位置!
  • %USERPROFILE%\.pgpass

關(guān)鍵發(fā)現(xiàn):你在 C:\Users\Administrator\.pgpass 創(chuàng)建文件,但 PostgreSQL 實際在 %APPDATA%\postgresql\ 下找 pgpass.conf!

終極解決方案(Windows 專用)

步驟 1:創(chuàng)建正確的配置文件

打開文件資源管理器,進入:C:\Users\Administrator\AppData\Roaming\postgresql\

如果 postgresql 文件夾不存在,請手動創(chuàng)建

在該目錄下創(chuàng)建文件 pgpass.conf(注意:不是 .pgpass,而是 pgpass.conf

文件內(nèi)容(替換為你的實際值):192.168.1.105:5432:*:postgres:你的密碼

步驟 2:設(shè)置文件權(quán)限(重要?。?/p>

# 隱藏文件
attrib +h "C:\Users\Administrator\AppData\Roaming\postgresql\pgpass.conf"

# 限制訪問(防止安全警告)
icacls "C:\Users\Administrator\AppData\Roaming\postgresql\pgpass.conf" /inheritance:r
icacls "C:\Users\Administrator\AppData\Roaming\postgresql\pgpass.conf" /grant Administrator:F

步驟 3:修改備份腳本(移除-w參數(shù))

REM 刪除 -w 參數(shù)!因為 pgpass.conf 會自動提供密碼
"%PGPATH%" -h %DB_HOST% -p %DB_PORT% -U %DB_USER% -F c -b -v -f "%BACKUP_DIR%%BACKUP_FILE%" %DB_NAME%

到此這篇關(guān)于PostgreSQ數(shù)據(jù)庫實現(xiàn)在Windows上異地自動備份指南的詳細教程的文章就介紹到這了,更多相關(guān)PostgreSQ數(shù)據(jù)庫備份內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

阿拉善右旗| 三河市| 南华县| 铜川市| 丹棱县| 富民县| 红河县| 建始县| 奎屯市| 朔州市| 嘉荫县| 新泰市| 渑池县| 辽中县| 柏乡县| 博客| 中西区| 上犹县| 永兴县| 保靖县| 胶南市| 寿光市| 宣恩县| 汾阳市| 嵩明县| 荣成市| 棋牌| 衡东县| 临城县| 湟中县| 台南市| 泊头市| 灌阳县| 肃宁县| 潮州市| 青冈县| 基隆市| 普兰店市| 龙陵县| 巴彦县| 内江市|