在Windows主機(jī)上定時(shí)備份遠(yuǎn)程VPS(CentOS)數(shù)據(jù)的批處理

我想在自己的 Windows7 下每天/周運(yùn)行一次備份,就有了這個(gè)小工具

不過(guò)折騰 VPS 之后,就不只是要備份 MySQL 了,一些獨(dú)立的站點(diǎn)數(shù)據(jù)也是需要備份的。
如果有靠譜的第三方 Linux 主機(jī)或類似 Amazon 的云存儲(chǔ),那就簡(jiǎn)單多了,Linux – Linux 的備份很方便。
不過(guò)我想在自己的 Windows7 下每天/周運(yùn)行一次備份,就有了這個(gè)小工具。

大概的想法如下:
使用 Putty 自帶的 plink.exe 連接到 VPS 上,運(yùn)行備份并退出登錄;
接著使用 Putty 自帶的 pscp.exe 將備份復(fù)制到本機(jī);
添加一個(gè)計(jì)劃任務(wù),每天/周自動(dòng)運(yùn)行一次,實(shí)現(xiàn)定時(shí)備份。

代碼如下:
Windows 下負(fù)責(zé)觸發(fā)備份的 index.bat
@echo off & setlocal ENABLEEXTENSIONS

:: 這里只是 SSH 連接和備份路徑配置信息
:: 請(qǐng)同時(shí)修改同目錄下 linux 文件中要備份的路徑和 MySQL 數(shù)據(jù)庫(kù)

:: SSH 相關(guān)信息
set SERVER=192.168.1.100
set PORT=22
set USER=root
set PASSWORD=password

:: 和同目錄下 linux 文件中配置的路徑對(duì)應(yīng)
set BACKUP_PATH=/root/backup

:: 備份要下載到的本機(jī)位置(會(huì)自動(dòng)創(chuàng)建)
set SAVE_PATH=D:Backup

:: ———- 配置結(jié)束,以下請(qǐng)勿修改 ———-

:: 運(yùn)行時(shí)變量
set EXE_SSH=%~dp0exeplink.exe
set EXE_SCP=%~dp0exepscp.exe
set LINUX=%~dp0linux

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

:: 創(chuàng)建備份路徑
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

由 index.bat 調(diào)用的 Linux 端命令
代碼如下:
#!/bin/bash

PATH=/usr/local/sbin:/usr/bin:/bin

# ———- 配置項(xiàng),不要最后的 / ———-

# 備份文件存儲(chǔ)的路徑,請(qǐng)與 index.bat 中的 BACKUP_PATH 保持一致
BACKUP_PATH=/root/backup

# 要備份的文件或目錄,多個(gè)以空格分隔
FILES=”/www/cmstop /www/dbpma”

# mysqldump 可執(zhí)行文件的全路徑(如果可以直接執(zhí)行 mysqldump 可不用全路徑)
MYSQLDUMP=mysqldump

# 要備份的 MySQL 數(shù)據(jù)庫(kù),多個(gè)以空格分隔
DATABASES=”mysql test”

# MySQL 用戶名
USER=root

# MySQL 密碼
PASSWD=

# ———- 配置項(xiàng)結(jié)束,下面的不用修改 ———-

# 運(yùn)行時(shí)變量
DATETIME=$(date -d now +%Y-%m-%d)
CURPATH=$(cd “$(dirname “$0″)”; pwd)

# 創(chuàng)建備份目錄
if [ ! -d $BACKUP_PATH ]; then
mkdir -p $BACKUP_PATH
fi

rm -fR $BACKUP_PATH/*

# 備份 MySQL 數(shù)據(jù)庫(kù)
cd $BACKUP_PATH
for database in $DATABASES
do
if [ “$PASSWD” == “” ]; then
$MYSQLDUMP -u$USER $database > $database.$DATETIME.dump.sql
else
$MYSQLDUMP -u$USER -p$PASSWD $database > $database.$DATETIME.dump.sql
fi
tar czf $database.$DATETIME.dump.sql.tar.gz $database.$DATETIME.dump.sql
rm -f $database.$DATETIME.dump.sql
done

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

# 完成
cd $CURPATH
exit

下載完成之后不刪除服務(wù)器上產(chǎn)生的備份文件,因?yàn)橄乱淮蝹浞萸皶?huì)自動(dòng)清除。
下載和使用
下載文件到你本機(jī),解壓到某個(gè)地方,然后根據(jù)上文的說(shuō)明修改配置項(xiàng);
由于 SSH 第一次登錄需要添加 Key 到本機(jī),這一步?jīng)]法簡(jiǎn)單忽略,可行的辦法是載入 Putty 的 Session,不過(guò)挺麻煩的,還是運(yùn)行一次簡(jiǎn)單些,我們要執(zhí)行一次 SSH 登錄:
代碼如下:
:: 切換到你解壓到的目錄,如 D:VPS:
cd /d D:VPS

:: 根據(jù)情況修改下面的參數(shù)
exeplink.exe -C root@192.168.1.100 -P 22 -pw password

:: 等待一下,會(huì)提示是否將 Key 加入本機(jī)信任主機(jī)列表里面,輸入 yes 就可以了。
yes

:: 這就進(jìn)去了,輸入點(diǎn)常用命令玩玩,輸入 exit 退出。
exit

根據(jù)的介紹,添加一個(gè)定時(shí)執(zhí)行的計(jì)劃任務(wù);
手動(dòng)執(zhí)行一下上面添加的計(jì)劃任務(wù)或觀察一個(gè)執(zhí)行周期,看備份是否有效。
待改進(jìn)
同之前的腳本一樣,似乎還缺少一個(gè)自動(dòng)刪除多少天前備份的功能。

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊8 分享