在Windows主機上定時備份遠程VPS(CentOS)資料的批處理

來源:互聯網
上載者:User

不過折騰 VPS 之後,就不只是要備份 MySQL 了,一些獨立的網站資料也是需要備份的。
如果有靠譜的第三方 Linux 主機或類似 Amazon 的雲端儲存,那就簡單多了,Linux - Linux 的備份很方便。
不過我想在自己的 Windows7 下每天/周運行一次備份,就有了這個小工具。

大概的想法如下:
使用 Putty 內建的 plink.exe 串連到 VPS 上,運行備份並退出登入;
接著使用 Putty 內建的 pscp.exe 將備份複製到本機;
添加一個計劃任務,每天/周自動運行一次,實現定時備份。

複製代碼 代碼如下:Windows 下負責觸發備份的 index.bat
@echo off & setlocal ENABLEEXTENSIONS

:: 這裡只是 SSH 串連和備份路徑配置資訊
:: 請同時修改同目錄下 linux 檔案中要備份的路徑和 MySQL 資料庫

:: SSH 相關資訊
set SERVER=192.168.1.100
set PORT=22
set USER=root
set PASSWORD=password

:: 和同目錄下 linux 檔案中配置的路徑對應
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

由 index.bat 調用的 Linux 端命令 複製代碼 代碼如下:#!/bin/bash

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

# ---------- 配置項,不要最後的 / ----------

# 備份檔案儲存的路徑,請與 index.bat 中的 BACKUP_PATH 保持一致
BACKUP_PATH=/root/backup

# 要備份的檔案或目錄,多個以空格分隔
FILES="/www/cmstop /www/dbpma"

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

# 要備份的 MySQL 資料庫,多個以空格分隔
DATABASES="mysql test"

# MySQL 使用者名稱
USER=root

# MySQL 密碼
PASSWD=

# ---------- 配置項結束,下面的不用修改 ----------

# 運行時變數
DATETIME=$(date -d now +%Y-%m-%d)
CURPATH=$(cd "$(dirname "$0")"; pwd)

# 建立備份目錄
if [ ! -d $BACKUP_PATH ]; then
mkdir -p $BACKUP_PATH
fi

rm -fR $BACKUP_PATH/*

# 備份 MySQL 資料庫
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

下載完成之後不刪除伺服器上產生的備份檔案,因為下一次備份前會自動清除。
下載和使用
下載檔案到你本機,解壓到某個地方,然後根據上文的說明修改配置項;
由於 SSH 第一次登入需要添加 Key 到本機,這一步沒法簡單忽略,可行的辦法是載入 Putty 的 Session,不過挺麻煩的,還是運行一次簡單些,我們要執行一次 SSH 登入: 複製代碼 代碼如下::: 切換到你解壓到的目錄,如 D:\VPS\:
cd /d D:\VPS\

:: 根據情況修改下面的參數
exe\plink.exe -C root@192.168.1.100 -P 22 -pw password

:: 等待一下,會提示是否將 Key 加入本機信任主機列表裡面,輸入 yes 就可以了。
yes

:: 這就進去了,輸入焦點常用命令玩玩,輸入 exit 退出。
exit

根據這一篇文章的介紹,添加一個定時執行的計劃任務;
手動執行一下上面添加的計劃任務或觀察一個執行循環,看備份是否有效。
待改進
同之前的指令碼一樣,似乎還缺少一個自動刪除多少天前備份的功能。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.