设为首页 收藏本站
查看: 1044|回复: 0

[经验分享] 定时备份mysql数据

[复制链接]

尚未签到

发表于 2018-10-4 11:47:10 | 显示全部楼层 |阅读模式
@REM 注意:运行计划任务的用户,需要有访问备份文件夹和临时目录读写的权限。  @REM 如果有运行异常,请将 @ECHO OFF 删除,并在最后添加一行加入 PAUSE 好观察在哪步出了错。
  @ECHO OFF
  REM ***************************************************************************
  REM 参数配置(参数前后不能有空格)
  REM 设置dbhost为主机名或IP地址
  SET dbhost=58.213.83.82                 ------------------------------改为你需要备份的服务器的ip
  SET dbport=3306
  REM 设置登陆mysql数据库的用户名。如果用户名中有"号,请用""代替。
  SET dbuser=root                                --------------------------需要备份数据的数据库帐号
  REM 设置登陆mysql的密码。如果密码中有"号,请用""代替。
  SET dbpwd=123456                         ---------------------------------需要备份数据的数据库密码
  REM 设置backupPath为备份文件存放的路径。注意:文件夹名存在空格不需要引号括起来。警告:此文件夹应为专用目录,最好独立使用,避免删除历史备份时误删数据。
  SET backupPath=E:\timeCopyDB\copyData    ---------------------------------备份下来的文件存放位置
  REM 备份文件夹前缀。
  SET backupFolderPrefix=MyBackup_
  REM 设置删除历史备份文件。删除多少次备份之前的备份文件。0--不删除历史备份文件;1,表示一次,2,表示2次,以此类推。如set deleteHistorySkips=30表示删除30次以前的备份文件;
  SET deleteHistorySkips=1
  REM 设置备份时发生错误是否删除历史备份文件。yes--删除;no--不删除。
  SET onErrorDeleteBackFile=no
  REM 是否启用压缩功能。yes--开启压缩功能。no--禁用压缩功能。默认值:no,不开启。
  SET enableCompress=yes
  REM 设置WinRAR压缩级别。取值0到5。0--无压缩;5--最高压缩比;默认值:3
  SET compressLevel=3
  REM 压缩类型。cab--系统内置cab压缩功能。rar--启用RAR压缩功能,需要安装RAR压缩软件支持
  SET compressType=cab
  REM 设置WinRAR安装路径。
  SET rarPath=C:\Program Files (x86)\360\360SafeuA\360zip                ---------------你本地的压缩文件安装路径
  REM 设置分卷大小。0--表示不分卷;1--表示1k,1024--表示1M,2048--表示2M;默认值:102400,表示100M
  SET volumePackSize=0
  REM 设置压缩密码。{empty}表示没有密码。其他字符表示压缩文件密码
  SET rarPwd={empty}
  REM 设置临时目录。如果备份时系统默认临时目录所在分区空间太小,可以通过这里调整该脚本运行的临时目录。默认值:%TEMP%
  REM 启用压缩时,零时目录占用空间较大,大约是备份数据库的1.2倍。不启用压缩,占用临时目录空间很小。
  REM 如果启用了CAB压缩,临时目录最好和备份文件夹在同一个分区。请保证指定的临时目录存在。
  SET TEMP=%TEMP%
  REM 完成参数配置
  REM ***************************************************************************
  REM ***************************************************************************
  REM 环境检测,参数检测和初始化
  REM 设置%myDate%为当前日期(2013-01-02)。因为日期后可能跟一个空格和星期几,并且日期中可能是”/"分割,所以要去除掉星期几和斜线。
  FOR /F "tokens=1,2* delims= " %%i IN ('ECHO %date:/=-%') DO SET "myDate=%%i"
  REM 设置%MyTime%为当前时间。格式:20.56.30.99
  SET myTime=%TIME::=.%
  SET myTime=%myTime: =0%
  REM 设置零时目录
  SET myTempDir=%TEMP%\MySQLBack_%myDate%_%MyTime%
  REM 设置备份日志文件
  SET backupLogFile=%backupPath%\MySQLBackLog.txt
  REM 用于环境检测的零时文件名
  SET checkFileName=_1_2_3_backup_mysql_check_%myDate%_%MyTime%
  REM ****目录权限检测****
  REM 检查备份目录是否存在,不存在则创建
  :CheckAndMakeBackupFolder
  IF exist "%backupPath%" GOTO CheckBackupFolderCreatFile
  MD "%backupPath%"
  IF %errorlevel%==0 GOTO CheckBackupFolderCreatFile
  ECHO 创建数据库备份目录失败。请检测您是否具有写入"%backupPath%"的权限,或者驱动器是否存在。
  PAUSE
  GOTO END
  REM 检查备份目录是否有创建文件的权限
  :CheckBackupFolderCreatFile
  ECHO. > "%backupPath%\%checkFileName%"
  IF EXIST "%backupPath%\%checkFileName%" del "%backupPath%\%checkFileName%" /Q /F & GOTO CheckBackupFolderCreateFolder
  ECHO 请检查对备份文件夹"%backupPath%"是否有文件写入权限。
  PAUSE
  GOTO END
  REM 检查备份目录是否有创建文件夹的权限
  :CheckBackupFolderCreateFolder
  MD "%backupPath%\%checkFileName%" && ( RD /S /Q "%backupPath%\%checkFileName%" & GOTO CheckTempFolderAccess )
  ECHO %myDate% %TIME%    请检查对备份文件夹"%backupPath%"是否有创建文件夹的权限。>>"%backupLogFile%"
  GOTO END
  REM 检测临时目录访问权限
  :CheckTempFolderAccess
  ECHO. > "%temp%\%checkFileName%"
  IF EXIST "%temp%\%checkFileName%" DEL "%temp%\%checkFileName%" /Q /F & GOTO MakeTempFolder
  ECHO %myDate% %TIME%    没有临时目录写入权限。请用具有权限的用户执行备份脚本。>>"%backupLogFile%"
  GOTO END
  REM 创建零时目录
  :MakeTempFolder
  MD "%myTempDir%" && GOTO CheckMySQLInstalled
  ECHO %myDate% %TIME%    无法创建临时目录"%myTempDir%"。请检查临时目录权限。>>"%backupLogFile%"
  GOTO END
  REM ****完成目录权限检测****
  REM 检测MySQL是否安装
  :CheckMySQLInstalled
  mysql --help > NUL && GOTO CheckMySQLConnect
  ECHO %myDate% %TIME%    无法检测到mysql,请确保已经正确安装MySQL.或者将MySQL的Bin目录的路径添加到系统变量Path中。>>"%backupLogFile%"
  GOTO CheckParmsFailed
  REM 验证数据库连接
  :CheckMySQLConnect
  ECHO exit | mysql -h"%dbhost%" -u"%dbuser%" -p"%dbpwd%" > NUL && GOTO CheckdeleteHistorySkips
  ECHO %myDate% %TIME%    无法连接到%dbhost%。请检服务是否启动,连接的用户名和密码是否正确。>>"%backupLogFile%"
  GOTO CheckParmsFailed
  REM 验证删除历史备份配置参数
  :CheckdeleteHistorySkips
  ECHO %deleteHistorySkips%| findstr /be "[0-9]*" > nul && GOTO CheckOnErrorDeleteBackFile
  ECHO %myDate% %TIME%    删除历史备份文件"deleteHistorySkipsFailed"配置错误,只能配置整数。>>"%backupLogFile%"
  GOTO CheckParmsFailed
  REM 验证删除历史备份配置参数
  :CheckOnErrorDeleteBackFile
  IF %onErrorDeleteBackFile%==no GOTO CheckCompressConfig
  IF %onErrorDeleteBackFile%==yes GOTO CheckCompressConfig
  ECHO %myDate% %TIME%    备份错误时是否删除历史文件"onErrorDeleteBackFile"配置参数错误。>>"%backupLogFile%"
  GOTO CheckParmsFailed
  REM 检查压缩软件配置
  :CheckCompressConfig
  IF %enableCompress%==no GOTO CheckSuccess
  IF %enableCompress%==yes GOTO CheckCompressLevel
  ECHO %myDate% %TIME%    是否启用压缩变量"enableCompress"的参数只能是"yes"或者"no".请检查配置。>>"%backupLogFile%"
  GOTO CheckParmsFailed
  REM 检查压缩级别
  :CheckCompressLevel
  ECHO %compressLevel%| findstr /be "[0-5]" > nul && GOTO CheckVolumePackSize
  ECHO %myDate% %TIME%    压缩级别"compressLevel"配置错误,参数只能是0~5的数字>>"%backupLogFile%"
  GOTO CheckParmsFailed
  REM 验证RAR分卷大小设置
  :CheckVolumePackSize
  ECHO %volumePackSize%| findstr /be "[0-9]*" > nul && GOTO CheckCompressType
  ECHO %myDate% %TIME%    压缩包分卷大小"volumePackSize"配置错误。请检查设置。>>"%backupLogFile%"
  GOTO CheckParmsFailed
  REM 检查压缩类型
  :CheckCompressType
  IF %compressType%==rar GOTO CheckRarPath
  IF %compressType%==cab GOTO CheckMakeCab
  ECHO %myDate% %TIME%    压缩类型"compressType"设置错误.值只能是"cab"或者"rar".请检查设置。>>"%backupLogFile%"
  GOTO CheckParmsFailed
  REM 验证RAR配置目录
  :CheckRarPath
  IF exist "%rarPath%\Rar.exe" GOTO CheckSuccess
  ECHO %myDate% %TIME%    WinRAR安装路径"rarPath"设置错误.请检查设置。>>"%backupLogFile%"
  GOTO CheckParmsFailed
  REM 验证makecab
  :CheckMakeCab
  makecab /? >NUL && GOTO CheckSuccess
  ECHO %myDate% %TIME%    系统内置MakeCab压缩功能无法使用,请使用RAR进行压缩。>>"%backupLogFile%"
  GOTO CheckParmsFailed
  REM 参数验证无法通过时
  :CheckParmsFailed
  ECHO 无法完成初始化。请查看日志文件:%backupLogFile%
  RD /S /Q "%myTempDir%"
  GOTO END
  REM 验证成功
  :CheckSuccess
  REM 完成环境检测和初始化
  REM ***************************************************************************
  REM ***************************************************************************
  REM 备份数据库
  ECHO %myDate% %TIME%    启动数据库备份脚本...>>"%backupLogFile%"
  REM 当前备份使用的文件夹
  set backupName=%backupFolderPrefix%%myDate% %myTime%
  REM 根据需要创建专属目录。在分卷压缩或者不压缩时,需要专属目录
  IF %enableCompress%==no MD "%backupPath%\%backupName%"
  IF %enableCompress%==yes ( IF NOT %volumePackSize%==0 MD "%backupPath%\%backupName%" )
  IF "%enableCompress%"=="yes" MD "%myTempDir%\%backupName%"
  REM 设置数据库备份使用的直接目录
  IF "%enableCompress%"=="no" SET backDbTmpPath=%backupPath%\%backupName%
  IF "%enableCompress%"=="yes" SET backDbTmpPath=%myTempDir%\%backupName%
  SET errorFile=%backDbTmpPath%\##BackupFailDbs.txt
  SET dbList=%myTempDir%\dblist.txt
  SET backmysqlbat=%myTempDir%\bakmysql.bat
  REM 生成数据库列表文件
  ECHO show databases; | mysql -h"%dbhost%" -u"%dbuser%" -p"%dbpwd%" > "%dblist%"
  SET isExistError=no
  REM 创建备份MySQL数据库的脚本。
  ECHO ECHO 未成功备份的数据库: ^> "%errorFile%" > "%backmysqlbat%"
  FOR /f "usebackq skip=1 tokens=*" %%i in ("%dblist%") DO ECHO mysqldump --no-defaults --single-transaction "%%i" -h"%dbhost%" -P"%dbport%" -u"%dbuser%" -p"%dbpwd%" ^> "%backDbTmpPath%\%%i.sql" >>"%backmysqlbat%" && ECHO if not %%errorlevel%%==0 (ECHO %%i ^>^> "%errorFile%" ^& ECHO %myDate% %TIME% 数据库备份失败:%%i^>^>"%backupLogFile%" ^& SET isExistError=yes) >> "%backmysqlbat%"
  call "%backmysqlbat%"
  REM 如果不存在错误,删除错误文件。
  IF %isExistError%==no DEL "%errorFile%" /Q /F > NUL
  IF %enableCompress%==yes GOTO CompressBackup
  GOTO BackupFinished
  REM ****压缩处理****
  :CompressBackup
  IF %compressType%==rar GOTO RarCompress
  REM CAB压缩处理
  REM 进行CAB压缩。注:makecab,不能在一个压缩包中创建目录。而且需要创建文件列表才能创建多文件压缩包。同时文件名不能重复。
  FOR /f "tokens=1* delims=" %%i in ('DIR "%backDbTmpPath%" /S /B /A-D') do echo "%%i" >> "%myTempDir%\cab_files.lst"
  SET cabCompressLevel=18
  IF %compressLevel%==0 SET cabCompressLevel=15
  IF %compressLevel%==0 SET cabCompressLevel=21
  REM 切换到零时目录
  FOR /F "delims=:" %%i IN ('ECHO %myTempDir%') DO %%i:
  CD "%myTempDir%"
  IF NOT %volumePackSize%==0 GOTO CabSplitCompress
  makecab /f "%myTempDir%\cab_files.lst" /d compressiontype=lzx /d compressionmemory=%cabCompressLevel% /d maxdisksize=0 /d diskdirectorytemplate=cabdb /d cabinetnametemplate="%backupName%.cab"
  MOVE /Y "%myTempDir%\cabdb\%backupName%.cab" "%backupPath%\"
  GOTO BackupFinished
  :CabSplitCompress
  SET /A maxdisksize=%volumePackSize% * 1024
  makecab /f "%myTempDir%\cab_files.lst" /d compressiontype=lzx /d compressionmemory=%cabCompressLevel% /d maxdisksize=%maxdisksize% /d diskdirectorytemplate=cabdb /d cabinetnametemplate="%backupName%.part*.cab"
  MOVE /Y "%myTempDir%\cabdb\*" "%backupPath%\%backupName%\"
  GOTO BackupFinished
  REM RAR 压缩处理
  :RarCompress
  SET rarCommand="%rarPath%\rar.exe" a -r -ep1 -o+ -m%compressLevel%
  IF NOT %volumePackSize%==0 SET rarCommand=%rarCommand% -v%volumePackSize%
  IF NOT %rarPwd%=={empty} SET rarCommand=%rarCommand% -p%rarPwd%
  REM 如果未分卷,保存在备份目录的根目录
  IF %volumePackSize%==0 SET rarCommand=%rarCommand% "%backupPath%\%backupName%.rar"
  REM 如果分卷,保存在根目录下的一个专属文件夹中
  IF NOT %volumePackSize%==0 SET rarCommand=%rarCommand% "%backupPath%\%backupName%\%backupName%.rar"
  SET rarCommand=%rarCommand% "%backDbTmpPath%\"
  %rarCommand%
  REM ****完成压缩处理****
  :BackupFinished
  ECHO %myDate% %TIME%    完成一次自动备份。备份目录:"%backupPath%\%backupName%" >> "%backupLogFile%"
  IF %isExistError%==yes ECHO 但是存在没有成功备份的数据库。查看没有成功备份的数据库,请查看文件备份文件夹中的"##BackupFailDbs.txt" >> "%backupLogFile%"
  REM 完成备份数据库
  REM ***************************************************************************
  REM ***************************************************************************
  REM 删除历史备份
  :RemoveHistoryBackup
  IF %isExistError%==yes ( IF %onErrorDeleteBackFile%==no GOTO ClearTmpFile )
  IF %deleteHistorySkips%==0 GOTO ClearTmpFile
  IF %enableCompress%==no GOTO RemoveHistoryBackupFolder
  IF NOT %volumePackSize%==0 GOTO RemoveHistoryBackupFolder
  GOTO RemoveHistoryBackupFile
  :RemoveHistoryBackupFolder
  FOR /F "Skip=%deleteHistorySkips% tokens=*" %%i IN ('DIR "%backupPath%\%backupFolderPrefix%*" /TC /O-D /AD /B') DO RD "%backupPath%\%%i" /S /Q & ECHO %myDate% %TIME%   删除历史备份:%%i >> "%backupLogFile%"
  GOTO ClearTmpFile
  :RemoveHistoryBackupFile
  FOR /F "Skip=%deleteHistorySkips% tokens=*" %%i IN ('DIR "%backupPath%\%backupFolderPrefix%*" /TC /O-D /A-D /B') DO DEL "%backupPath%\%%i" /Q /F & ECHO %myDate% %TIME% 删除历史备份:%%i >> "%backupLogFile%"
  GOTO ClearTmpFile
  REM 完成删除历史备份
  REM ***************************************************************************
  :ClearTmpFile
  CD \
  RD /S /Q "%myTempDir%" > NUL
  :END
  ECHO. >> "%backupLogFile%"


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-611822-1-1.html 上篇帖子: mysql乱码问题终极解决 下篇帖子: 修改mysql端口号
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表