分享(5) 一个windows平台 mysqldump 备份MySQL数据库的脚本

编写目的

使用 mysqldump 对 MySQL 数据库进行在线备份,并指定轮转次数

合集地址

分享(1)一个 MySQL Shell 备份数据库的脚本

分享(2)一个 mysqldump 备份 MySQL 数据库的脚本

分享(3)一个 xtrabackup 备份MySQL数据库的脚本

分享(4)一个 mysqlbackup 备份MySQL数据库的脚本

分享(5) 一个windows平台 mysqldump 备份MySQL数据库的脚本

补充说明:

估计很多人写 linux shell 脚本很流畅, 但写 windows bat 脚本就卡壳了。

大概说明一下: windows bat 脚本相比 linux shell 如果使用文件记录轮转比较麻烦, 因此此处调用 vbs 计算与 1970-01-01 的天数差取余来作为轮转的序号。

跟linux平台脚本差不多,先是查询到需要备份的数据库,然后挨个来备份。如果有数据库是不需要备份的,可以在脚本中加入过滤,这样脚本将不备份它们。

当然了,因为是天数取余,当天如果运行多次,后一次备份会覆盖前一次的备份。linux shell 因为是使用文件记录轮转序号,即使当天多次运行,后一次也不会覆盖前一次的备份(会覆盖最老的备份)。 不过脚本基本上都是任务执行,一天运行一次,所以也没有大碍。

其他备份方式(mysql shell, xtrabackup,mysqlbackup) 都可以参照此脚本和 另几个 linux shell脚本改成bat版本,因为使用windows平台的数据库相比linux少多了,所以写这个够用算了, 不折腾了。

@echo off
rem =========================================================================
rem (C) Copyright 2003-2033 hoplite
rem =========================================================================
rem Script Purpose : backup mysql database by mysqldump
rem -------------------------------------------------------------------------
rem instructions
rem 1.setup login-path
rem   create a login-ptah: mysql_config_editor set --login-path=bak -h localhost -P 3306 -uroot -p
rem   list login-path: mysql_config_editor print --all
rem   login test: mysql --login-path=bak
rem 2.setup cron job in task scheduler

rem -------------------------------------------------------------------------
rem Version Date        Description
rem -------------------------------------------------------------------------
rem V1.0    2023-03-21  Initial version
rem =========================================================================
rem NOTE
rem version upon v8.0.26,suggest to use --source-data to replace --master-data

rem customize the following parameters
set p_loginpath=bak
set p_rotate=7

echo v_year=year(Now) : v_month=Month(Now) : v_day=day(Now) >getdifday.vbs
echo v_diffday = DateDiff("d", DateSerial(1970,1,1), DateSerial(v_year,v_month,v_day)) >>getdifday.vbs
echo v_dayseq = v_diffday mod %p_rotate% >>getdifday.vbs
echo Wscript.echo v_dayseq >>getdifday.vbs
for /f %%a in ('cscript //nologo getdifday.vbs') do del getdifday.vbs&&set dayseq=%%a

set "dayseq=%dayseq: =%"
set vdbsfile=vdbs_68286c99dd63d349de93b0b3b70c0ff7.txt

setlocal enabledelayedexpansion
set base=%~dp0
%~d0
cd %base%

mysql --login-path=%p_loginpath% -e " select schema_name from information_schema.SCHEMATA;">%vdbsfile%

for /f "delims=" %%a in (%base%%vdbsfile%) do (
  set v_db=%%a
  set is_in_filtered_db=N
  if "!v_db!" equ "SCHEMA_NAME" (set is_in_filtered_db=Y)
  if "!v_db!" equ "mysql" (set is_in_filtered_db=Y)
  if "!v_db!" equ "information_schema" (set is_in_filtered_db=Y)
  if "!v_db!" equ "performance_schema" (set is_in_filtered_db=Y)
  if "!v_db!" equ "sys" (set is_in_filtered_db=Y)
  if "!v_db!" equ "the_database_you_do_not_want_to_dump" (set is_in_filtered_db=Y)
  if "!is_in_filtered_db!" equ "N" (
    mysqldump --login-path=%p_loginpath% --hex-blob --set-gtid-purged=OFF -R -E --single-transaction --master-data=2 -F -B  !v_db! > %dayseq%_!v_db!.sql 2> %dayseq%_!v_db!.err
  )
)
if exist %vdbsfile% (del %vdbsfile%)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贺浦力特

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值