通过windows批处理程序定时备份mysql数据库文件并压缩为

2020-01-09  本文已影响0人  半路和尚怎么出家

先放一个批处理的dos命令入门教程,没有dos命令基础的可以先看一看,否则下面的脚本直接看懵逼:传送门

开始正文,最近客户有个需求就是每个月都要将mysql数据库的数据备份一份出来,由他们交给当地gong安部门处理。正好公司有一台阿里云的windows server 2012R2服务器的资源比较空闲,就打算利用windows的BAT批处理脚本来完成这个任务。

这里将程序分解为以下几个步骤:

下面直接上bat脚本代码:

1.先调用备份脚本backup.bat('::'两个冒号表示注释)
@echo off
:: 进入mysql的bin目录
cd ..\mysql-5.7.28-winx64\bin
:: windows server的日期格式包含斜杠和中文,这里做一下处理
set temp=%date:~0,10%
set day=%temp:/=-%
:: 通用的路径
set "prefix=G:\backup\"
:: 日志路径
set "logpath=%prefix%log\%day%baklog.log"
:: 抽取一下mysql命令的共用内容
set "uap=-uroot -p123456 -hlocalhost -P3306"
:: 导出需要备份的客户id信息
echo %time%-导出需要备份的客户id信息 >> %logpath%
mysql %uap% -e "select kid from xxx " database_name > %prefix%tenant.txt
:: 导出需要备份的表信息
echo %time%-导出需要备份的表信息 >> %logpath%
mysql %uap% -e "SELECT  table_name FROM columns WHERE column_name='kid' and table_Schema = 'xxxx' " information_schema >%prefix%table_name.txt
:: 读取客户id文件,做循环处理
echo %time%-开始读取客户id >> %logpath%
for /f "skip=1" %%i in (%prefix%tenant.txt) do (
  :: 在临时目录下创建以该客户id命名的文件夹
  md %prefix%tmp\%%i
  echo =====%time%-租户%%i开始转储 >> %logpath%
  :: 读取需要转储的表信息
  for /f "skip=1" %%j in (%prefix%table_name.txt) do (
    echo %time%-%%j开始转储 >> %logpath%
   :: 通过mysqldump命令备份数据库数据文件到临时目录下的客户id文件夹中
    mysqldump %uap% --skip-opt --set-gtid-purged=OFF database_name %%j --where=" kid='%%i'" > %prefix%tmp\%%i\%%j.sql
  )
  echo =====%time%-租户%%i结束转储 >> %logpath%
 :: 通过start命令调用压缩脚本并传递参数。start命令会另起一个进程,因此当前脚本不会被阻塞
  start %prefix%compresse.bat %%i
)
2.被调用的压缩脚本compresse.bat
@echo off
:: windows server的日期格式包含斜杠和中文,这里做一下处理
set temp=%date:~0,10%
set day=%temp:/=-%
:: 通用路径
set prefix=G:\backup\
:: 日志路径
set "logpath=%prefix%log\%day%baklog.log"
:: 设置7z.exe路径
set "zip=C:\Program Files\7-Zip\7z.exe"
:: 这是上面备份脚本里传过来的参数
set des=%1
::设置源文件夹所在目录
set SourDir=%prefix%tmp\%des%
echo %time%-开始压缩客户%des%数据 >> %logpath%
"%zip%" a -mx7 "%prefix%data\%des%(%day%).7z" "%SourDir%"
:: 压缩完成后删除源文件夹
rd  /s /q %prefix%tmp\%des%
echo %time%-完成压缩客户%des%数据 >> %logpath%

通过以上两个脚本就能完成批处理程序备份mysql数据库文件并压缩为7z的任务了~

至于如何定时执行上述bat脚本,则可以通过window的定时任务来解决,网上文章一大把,随便一篇就能搞定了。

还有几个注意点:

以上就是全部内容了,本人也是bat脚本新手,此文仅仅是记录并分享一下自己搞定任务的过程,如有不妥之处,还请指出~

转载请注明出处.

上一篇下一篇

猜你喜欢

热点阅读