当前位置: 移动技术网 > IT编程>数据库>Mysql > 在Windows主机上定时备份远程VPS(CentOS)数据的批处理

在Windows主机上定时备份远程VPS(CentOS)数据的批处理

2017年12月12日  | 移动技术网IT编程  | 我要评论
不过折腾 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

根据的介绍,添加一个定时执行的计划任务;
手动执行一下上面添加的计划任务或观察一个执行周期,看备份是否有效。
待改进
同之前的脚本一样,似乎还缺少一个自动删除多少天前备份的功能。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网