Mysql在Windows下实现定时备份

前置:

项目上在Windows server上搭建了一个临时的MySQL,用来做配置数据库。为了避免数据丢失导致重复手动配置表数据,需要每天定时备份数据。

实现方式:

  1. 用MySQL自带的sqldump,执行数据的导入导出
  2. bat脚本执行
  3. Windows自带的定时任务,每天凌晨执行一次并生成到指定目录

1.命令

@echo off
rem Need to config the mysqldump.ini add user and password below [client], otherwise, there will be a warning throwed up.
set "fileName=%date:~10,4%%date:~4,2%%date:~7,2%%time:~0,2%%time:~3,2%"
"$your mysql install path\bin\mysqldump" --defaults-extra-file="(这个路径随意,自定义文件)\mysqldump.ini" --single-transaction [database]>(你的备份文件需要保存的路径)%fileName%.sql
@echo on

2.命令解释

2.1 命令行不允许输入密码

MySQL高版本不允许在命令行中输入明文密码,如:"c:path\bin\mysqldump" -u user -p password database>d:path/%fileName%.sql.
会出现以下警告,导致生成的文件为0kb:
mysql: [Warning] Using a password on the command line interface can be insecure
直接跑命令行需要手动输入密码,查了一下bat貌似没法实现自动输入密码,需要修改配置文件。

2.2 新建自定义备份配置文件

找到MySQL的 my.ini文件(windows下MySQL的配置文件为,Linux下为my.conf),复制一份并,打开在
[client] 下添加
[client]
host = [your host]
user = [your username]
password = [your password]
保存并拷贝路径作为执行mysqldump时的指定配置文件。
【注意编码保存格式应该为ANSI

3.新建定时任务

在Windows下找到控制面板,新建定时任务搜索一下教程就行,不复杂。

4.补充:

第二天才发现这个脚本有点小问题,拼文件名的时候,如果时间是凌晨,取出的时间点中间会有空格,导致输出文件错误。
mysqldump: Couldn't find table
修改批处理文件,对文件名进行去重:

@echo off
rem Need to config the mysqldump.ini add user and password below [client], otherwise, there will be a warning throwed up.
set "fileName=%date:~10,4%%date:~4,2%%date:~7,2%%time:~0,2%%time:~3,2%"
set "fileName=%fileName: =%"
"$your mysql install path\bin\mysqldump" --defaults-extra-file="(这个路径随意,自定义文件)\mysqldump.ini" --single-transaction [database]>(你的备份文件需要保存的路径)%fileName%.sql
@echo on

你可能感兴趣的:(Mysql在Windows下实现定时备份)