澳门金沙vipWindows下促成MySQL自动备份的批管理(复制目录或mysqldump备份卡塔尔(قطر‎

不过折腾 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% 2nul ) 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% 2nul 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=”/ /” # 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 根据这一篇文章的介绍,添加一个定时执行的计划任务;
手动执行一下上面添加的计划任务或观察一个执行周期,看备份是否有效。
待改进 同之前的脚本一样,似乎还缺少一个自动删除多少天前备份的功能。

今天有个需求要在 Windows 下实现数据库自动备份,拼凑了一下解决办法。

实现的特性
可指定多个数据库
按照 年/月/日 的方式组织备份
可选的使用 WinRAR 压缩备份
使用计划任务实现定时备份

具体代码
备份

复制代码 代码如下:

@echo off & setlocal ENABLEEXTENSIONS

:: ———- 配置项 ———-

:: 备份放置的路径,加 \
set BACKUP_PATH=D:\Backup\

:: 要备份的数据库名称,多个用空格分隔
set DATABASES=database1 database2 database3

:: MySQL 用户名
set USERNAME=root

:: MySQL 密码
set PASSWORD=123456

:: MySQL Bin 目录,加 \
:: 如果可以直接使用 mysqldump(安装时添加 MySQL Bin
目录到了环境变量),此处留空即可
set MYSQL=D:\SERVER\MySQL\bin\

:: WinRAR 自带命令行工具的可执行文件路径,长文件名注意用 Dos
长文件名书写方式
set WINRAR=C:\Progra~1\WinRAR\Rar.exe

:: ———- 以下请勿修改 ———-

set YEAR=%date:~0,4%
set MONTH=%date:~5,2%
set DAY=%date:~8,2%
:: 如果在 dos 下输入 time 返回的不是 24 小时制(没有 0
填充),请自行修改此处
set HOUR=%time:~0,2%
set MINUTE=%time:~3,2%
set SECOND=%time:~6,2%

set DIR=%BACKUP_PATH%%YEAR%\%MONTH%\%DAY%\
set ADDON=%YEAR%%MONTH%%DAY%%HOUR%%MINUTE%%SECOND%

:: create dir
if not exist %DIR% (
mkdir %DIR% 2>nul
)
if not exist %DIR% (
echo Backup path: %DIR% not exists, create dir failed.
goto exit
)
cd /d %DIR%

:: backup
echo Start dump databases…
for %%D in (%DATABASES%) do (
echo Dumping database %%D …
%MYSQL%mysqldump -u%USERNAME% -p%PASSWORD% %%D > %%D.%ADDON%.sql
2>nul
:: winrar
if exist %WINRAR% (
%WINRAR% a -k -r -s -m1 -ep1 %%D.%ADDON%.rar %%D.%ADDON%.sql 2>nul
del /F /S /Q %%D.%ADDON%.sql 2>nul
)
)
echo Done

:exit