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

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

作者: 半路和尚怎么出家 | 来源:发表于2020-01-09 22:19 被阅读0次

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

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

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

    • 从数据库读取需要备份数据的客户id到服务器的txt文件,取名为tenant.txt(项目是一个多租户ERP系统,主要面向公用事业,一个企业客户有一个客户id)
    • 从数据库读取需要备份数据的表到服务器的txt文件,取名为table_name.txt(里面包含了需要备份的表的名称)
    • 读取tenant.txt,循环处理每一个客户id,每一个客户id都需要备份table_name.txt中所有表的数据
    • 数据备份完成后,调用7z.exe压缩数据文件,压缩完成后删除源数据文件

    下面直接上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的定时任务来解决,网上文章一大把,随便一篇就能搞定了。

    还有几个注意点:

    • window server记得安装一个mysql,我的windows server 2012R2无法启动mysql,报错少了msvcp120.dll文件,解决办法网上一搜就有
    • 记得配置一下mysql的环境变量,否则定时任务调用bat脚本的时候,mysql命令会执行失败
    • mysqldump命令的参数建议根据个人需要做一下调整,我这里的命令是直接跳过各种参数设置的

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

    转载请注明出处.

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/cxsuactx.html