在Windows主机上定时备份远程VPS(CentOS)数据的批处理
程序员文章站
2023-12-19 12:19:52
不过折腾 vps 之后,就不只是要备份 mysql 了,一些独立的站点数据也是需要备份的。 如果有靠谱的第三方 linux 主机或类似 amazon 的云存储,那就简单多了...
不过折腾 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
根据的介绍,添加一个定时执行的计划任务;
手动执行一下上面添加的计划任务或观察一个执行周期,看备份是否有效。
待改进
同之前的脚本一样,似乎还缺少一个自动删除多少天前备份的功能。
如果有靠谱的第三方 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
根据的介绍,添加一个定时执行的计划任务;
手动执行一下上面添加的计划任务或观察一个执行周期,看备份是否有效。
待改进
同之前的脚本一样,似乎还缺少一个自动删除多少天前备份的功能。