首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Windows 主機定時備份遠端 CentOS VPS 數據的批處理實戰指南

     編輯:MySQL 資料庫相關知識

背景與需求

管理 VPS 時,除了 MySQL 資料庫,獨立站點的文件數據同樣需要備份。若擁有可靠的第三方 Linux 主機或類似 Amazon S3 的雲存儲,Linux 之間的備份相對簡單。但若希望在本地 Windows 7 系統上實現每日或每週自動備份,則需另闢蹊徑。

核心思路

  • 利用 PuTTY 套件中的 plink.exe 透過 SSH 連線至 VPS,執行備份腳本並退出;
  • 再以 pscp.exe 將遠端備份文件下載至本地;
  • 配合 Windows 任務計劃程式,設定排程自動執行,實現無人值守定時備份。

Windows 端觸發腳本:index.bat

@echo off & setlocal ENABLEEXTENSIONS

:: SSH 連線與備份路徑配置(請同步修改 linux 腳本中的對應路徑)
set SERVER=192.168.1.100
set PORT=22
set USER=root
set PASSWORD=password

:: 對應 linux 腳本中的 BACKUP_PATH
set BACKUP_PATH=/root/backup

:: 本地備份存放目錄(自動建立)
set SAVE_PATH=D:\Backup\

:: ---------- 配置結束,以下請勿修改 ----------
set EXE_SSH=%~dp0\exe\plink.exe
set EXE_SCP=%~dp0\exe\pscp.exe
set LINUX=%~dp0\linux

set YEAR=%date:~0,4%
set MONTH=%date:~5,2%
set DAY=%date:~8,2%
set TRUE_PATH=%SAVE_PATH%%YEAR%-%MONTH%-%DAY%\

:: 建立日期命名的備份目錄
echo Creating Backup Dir...
if not exist %TRUE_PATH% ( mkdir %TRUE_PATH% 2>nul )
if not exist %TRUE_PATH% (
    echo Backup path: %TRUE_PATH% not exists, create dir failed.
    goto exit
)
echo Creating Backup Dir... Done.

:: 觸發遠端備份腳本執行
echo Connecting to remote server and creating backups...
%EXE_SSH% -C %USER%@%SERVER% -P %PORT% -pw %PASSWORD% -m %LINUX% 2>nul
echo Connecting to remote server and creating backups... Done.

:: 下載備份文件至本地
echo Downloading backups...
%EXE_SCP% -pw %PASSWORD% -P %PORT% %USER%@%SERVER%:%BACKUP_PATH%/*.* %TRUE_PATH%
echo Downloading backups... Done.

:exit
echo Exit

Linux 端備份腳本:linux (無副檔名)

#!/bin/bash
PATH=/usr/local/sbin:/usr/bin:/bin

# ---------- 配置項,路徑勿以 / 結尾 ----------
BACKUP_PATH=/root/backup          # 需與 index.bat 中 BACKUP_PATH 一致
FILES="/www/cmstop /www/dbpma"    # 要備份的文件/目錄,空格分隔
MYSQLDUMP=mysqldump               # mysqldump 完整路徑或命令名
DATABASES="mysql test"            # 要備份的資料庫,空格分隔
USER=root                         # MySQL 用戶名
PASSWD=                           # MySQL 密碼(為空則不帶 -p)
# ---------- 配置項結束 ----------

DATETIME=$(date -d now +%Y-%m-%d)
CURPATH=$(cd "$(dirname "$0")"; pwd)

# 建立備份目錄並清空舊檔
[ ! -d $BACKUP_PATH ] && mkdir -p $BACKUP_PATH
rm -fR $BACKUP_PATH/*

# 備份 MySQL 資料庫
cd $BACKUP_PATH
for db in $DATABASES; do
    if [ -z "$PASSWD" ]; then
        $MYSQLDUMP -u$USER $db > $db.$DATETIME.dump.sql
    else
        $MYSQLDUMP -u$USER -p$PASSWD $db > $db.$DATETIME.dump.sql
    fi
    tar czf $db.$DATETIME.dump.sql.tar.gz $db.$DATETIME.dump.sql
    rm -f $db.$DATETIME.dump.sql
done

# 備份文件/目錄
for f in $FILES; do
    tar czf $f.$DATETIME.tar.gz $f
    mv $f.$DATETIME.tar.gz $BACKUP_PATH
done

cd $CURPATH
exit 0

首次使用須知

腳本不會刪除遠端已生成的備份文件,因下一次備份前會自動清理。首次運行前需手動接受 SSH 主機金鑰:

:: 切換至解壓目錄,例如 D:\VPS\
cd /d D:\VPS\

:: 執行一次 SSH 連線(依實際參數修改)
exe\plink.exe -C root@192.168.1.100 -P 22 -pw password

:: 出現提示輸入 yes 信任主機,隨後輸入 exit 退出
yes
exit

設定排程任務

參考 Windows 任務計劃程式建立每日/每週觸發 index.bat 的任務,並以最高權限執行。手動執行一次驗證備份是否正常生成於 D:\Backup\YYYY-MM-DD\ 目錄下。

待改進方向

  • 新增本地保留天數自動清理舊備份功能;
  • 加入備份結果郵件/訊息通知;
  • 支援增量備份以節省頻寬與空間。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved