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

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

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

前期準(zhǔn)備

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

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

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

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

實(shí)現(xiàn)步驟

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

在備份服務(wù)器上創(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ù)庫服務(wù)器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(yuǎn)程服務(wù)器(異地存儲)
echo 正在傳輸備份文件到遠(yuǎn)程服務(wù)器...
scp "%BACKUP_DIR%%DB_NAME%_%DATE%_%TIME%.backup" 用戶名@遠(yuǎn)程服務(wù)器IP:/遠(yuǎn)程存儲路徑/

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í)際安裝路徑
  • 將數(shù)據(jù)庫服務(wù)器IP、數(shù)據(jù)庫密碼、要備份的數(shù)據(jù)庫名等替換為實(shí)際值

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

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

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

.pgpass文件格式詳解

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

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

例子說明:

182.12.14.22:5432:*:postgres:your_password

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

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

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

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

步驟四:測試備份

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

實(shí)際示例

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

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

那么你的備份腳本應(yīng)該是:

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

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為你的實(shí)際信息) ================
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 不需要了,因?yàn)槲覀冎苯釉趥浞莘?wù)器保存文件
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. 開始備份(輸出到獨(dú)立日志)================
echo [%DATE% %TIME%] === 備份任務(wù)開始 === > "%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%] === 備份任務(wù)完成 === >> "%LOG_FILE%"

重要提醒

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

詳細(xì)任務(wù)計劃設(shè)置指南

重要:操作前請確保:

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

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

打開 PowerShell(管理員)

運(yùn)行:

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

重啟電腦

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

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

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

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

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

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

4.設(shè)置操作

選擇 啟動程序

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

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

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

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

點(diǎn)擊 下一步

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

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

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

點(diǎn)擊 確定

6.測試任務(wù)

在任務(wù)列表中右鍵點(diǎn)擊任務(wù) → 運(yùn)行

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

(正常應(yīng)顯示 備份與清理完成!

最后檢查清單

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

效果圖

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

測試信息

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

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

這個錯誤非常常見,原因很簡單:PostgreSQL 服務(wù)器要求密碼驗(yàn)證。

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

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

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

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

解決方案(3種方法)

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

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

1.在備份服務(wù)器上創(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è)置,但可以隱藏文件):

右鍵點(diǎn)擊 `.pgpass` 文件 → 屬性 → 勾選 "隱藏" → 應(yīng)用

為什么這個方法好

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

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

如果你堅(jiān)持要這樣做(**不推薦**,因?yàn)槊艽a會暴露在腳本中):

"%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ù)庫服務(wù)器允許密碼驗(yàn)證:在 pg_hba.conf 中,確保有類似配置:

host    all             all             0.0.0.0/0            md5

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

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

根本原因(99% 的情況)

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

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

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

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

終極解決方案(Windows 專用)

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

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

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

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

文件內(nèi)容(替換為你的實(shí)際值):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ù)!因?yàn)?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ù)庫實(shí)現(xiàn)在Windows上異地自動備份指南的詳細(xì)教程的文章就介紹到這了,更多相關(guān)PostgreSQ數(shù)據(jù)庫備份內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

通河县| 乐业县| 太保市| 阿城市| 麻江县| 大同县| 新泰市| 泰来县| 朝阳区| 象山县| 宁远县| 弥渡县| 丘北县| 耿马| 阿鲁科尔沁旗| 岳普湖县| 右玉县| 全椒县| 修水县| 遂川县| 木里| 壶关县| 岳普湖县| 荔浦县| 醴陵市| 辰溪县| 承德县| 鄯善县| 墨脱县| 姜堰市| 平和县| 保德县| 阿坝县| 滁州市| 乐至县| 丽江市| 湘潭市| 江安县| 涡阳县| 西安市| 台山市|