管理 VPS 時,除了 MySQL 資料庫,獨立站點的文件數據同樣需要備份。若擁有可靠的第三方 Linux 主機或類似 Amazon S3 的雲存儲,Linux 之間的備份相對簡單。但若希望在本地 Windows 7 系統上實現每日或每週自動備份,則需另闢蹊徑。
plink.exe 透過 SSH 連線至 VPS,執行備份腳本並退出;pscp.exe 將遠端備份文件下載至本地;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 (無副檔名)#!/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\ 目錄下。