MySql 定时备份数据库

Posted lowi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySql 定时备份数据库相关的知识,希望对你有一定的参考价值。

转载:mysql 定时备份数据库

每天零点备份一次数据库,备份文件放在指定目录(如果目录不存在则新建),按月存储;

将下面这段命令存储为一个 *.bat 文件,添加一个Windows任务计划程序(Task scheduler)指向这个文件,每天执行一次即可。

 

rem ******Code Start***********
@echo off
C:
CD C:\\Program Files\\MySQL\\MySQL Server 5.7\\bin
set "Y=%date:~10,4%"
set "m=%date:~7,2%"
set "d=%date:~4,2%"
if not exist "D:\\ARTS Backup\\BK%Y%%m%\\" (mkdir "D:\\ARTS Backup\\BK%Y%%m%\\")
mysqldump --opt -u root --password=ameroidrts ameroid > "D:\\ARTS Backup\\BK%Y%%m%\\ameroid_%Y%%m%%d%.sql"
@echo on
rem *****************Code End*************

说明

我的MySql安装在C:\\Program Files下,所以要先进入MySqlbin目录,以便执行 mysqldump 命令

C:

CD C:\\Program Files\\MySQL\\MySQL Server 5.7\\bin

如果你的MySql安装在其它位置,修改盘符和路径即可。

 用到了date:命令来得到当前日期,下面三条命令分别得到年月日:

set "Y=%date:~10,4%"
set "m=%date:~7,2%"
set "d=%date:~4,2%"

因为电脑是英文环境,可以通过 echo %date:~,20% 查看日期格式(输出日期字符串前20个字符)

 如果你的电脑环境是中文,日期格式应该是:2016/03/09 周三,那年月日应该是:

 

set "Y=%date:~,4%"
set "m=%date:~5,2%"
set "d=%date:~8,2%"

 

if not exist 是判断目录是否存在,mkdir是新建目录,目录名称中如果有空格,可将整个路径双引号括起来。

 备份文件存储目录:

 

 第一种:新建批处理文件 backup.dat,里面输入以下代码:

net stop mysql  
xcopy "C:/Program Files/MySQL/MySQL Server 5.0/data/piaoyi/*.*" D:/db_backup/%date:~0,10%/ /y  
net start mysql  

注意:批处理命令中路径里有空格的话,必须在路径上加上双引号!

然后使用Windows的"计划任务"定时执行该批处理脚本即可。(例如:每天凌晨3点执行backup.bat)
解释:备份和恢复的操作都比较简单,完整性比较高,控制备份周期比较灵活。此方法适合有独立主机但对mysql没有管理经验的用户。缺点是占用空间比较多,备份期间mysql会短时间断开(例如:针对30M左右的数据库耗时5s左右)。  
关于时间参数的参考:
%date:~0,10%      //提取年月日信息
%date:~-3%         //提取星期几信息
%time:~0,5%         //提取时间中的时和分
%time:~0,-3%       //提取时和分和秒信息

第二种:mysqldump备份成sql文件
==============
假想环境:
MySQL   安装位置:C:/MySQL
论坛数据库名称为:bbs
MySQL root   密码:123456
数据库备份目的地:D:/db_backup/

脚本:

@echo off  
set "Ymd=%date:~,4%%date:~5,2%%date:~8,2%"  
C:/MySQL/bin/mysqldump --opt -u root --password=123456 bbs > D:/db_backup/bbs_%Ymd%.sql  
@echo on  

以上代码保存为backup_db.bat

然后使用Windows的"计划任务"定时执行该脚本即可。(例如:每天凌晨5点执行back_db.bat)
说明:此方法可以不用关闭数据库,并且可以按每一天的时间来名称备份文件。
通过%date:~5,2%来组合得出当前日期,组合的效果为yyyymmdd,date命令得到的日期格式默认为yyyy-mm-dd(如果不是此格式可以通过pause命令来暂停命令行窗口看通过%date:~,20%得到的当前计算机日期格式),所以通过%date:~5,2%即可得到日期中的第五个字符开始的两个字符,例如今天为2009-02-05,通过%date:~5,2%则可以得到02。(日期的字符串的下标是从0开始的)

第三种:利用WinRAR对MySQL数据库进行定时备份。 
    对于MySQL的备份,好的方法是直接备份MySQL数据库的Data目录。下面提供了一个利用WinRAR来对Data目录进行定时备份的方法。

首先当然要把WinRAR安装到计算机上。

将下面的命令写入到一个文本文件里,如 backup.bat

net stop mysql  
"C:/Program Files/WinRAR/WinRAR.exe" a -ag -k -r -s D:/db_backup/mysql_.rar "C:/Program Files/MySQL/MySQL Server 5.0/data/"  
net start mysql  

winrar参数解释:

a: 添加文件到压缩文件
-ag: 使用当前日期生成压缩文件名
-k: 锁定压缩文件
-r: 递归子目录
-s: 创建固实压缩文件

   执行以上文件后,会生成一个压缩文件如:mysql_20130803004138.rar。
   进入控制面版,打开计划任务,双击"添加计划任务"。在计划任务向导中找到刚才的backup.bat文件,接着为这个任务指定一个运行时间和运行时使用的账号密码就可以了。
   这种方法缺点是占用时间比较多,备份期间压缩需要时间,mysql断开比第一种方法更多的时间,但是对于文件命名很好。

 

Windows 下 MySQL 简单定时自动备份、删除过期备份

新建一个 数据库备份文件存放目录,本例为D:\\db_backup.新建一个批处理文件,可以起任意名,本例为mysql_backup_tool.bat ,文件内容如下:

rem auther:www.waylau.com
rem date:20150724
rem ******MySQL backup start********@echo off
forfiles /p "D:\\db_backup" /m emsc_backup_*.sql -d -30 /c "cmd /c del /f @path"
set "Ymd=%date:~0,4%%date:~5,2%%date:~8,2%0%time:~1,1%%time:~3,2%%time:~6,2%"
C:\\mysql\\bin\\mysqldump --opt --single-transaction=TRUE --user=root --password=123456 --host=127.0.0.1 --protocol=tcp --port=3306 --default-character-set=utf8 --single-transaction=TRUE --routines --events "emsc" > D:\\db_backup\\emsc_backup_%Ymd%.sql
@echo on
rem ******MySQL backup end********

  其中,forfiles删除过期文件的命令,-d -30删除30天的文件。C:\\mysql\\bin\\mysqldump 为 MySQL 安装时,mysqldump.exe 文件所在路径,--user=root 指 MySQL 用户名为 root --password=123456 指 MySQL 密码为123456,"emsc" 为要备份的数据库的名称,emsc_backup_%Ymd%.sql 为备份文件的名称,这个名称是根据当前的时间规则生成的,比如今天生产的备份文件,名称为emsc_backup_20150724012120.sql 。

自测案例:

mysql:

rem *******************************Code Start*****************************
@echo off
C:
CD C:\\Program Files\\MySQL\\MySQL Server 5.5\\bin

set "Y=%date:~,4%"
set "m=%date:~5,2%"
set "d=%date:~8,2%"

if not exist "F:\\mysql\\Backup\\BK%Y%%m%\\" (mkdir "F:\\mysql\\Backup\\BK%Y%%m%\\")
mysqldump --opt -u root --password= jitri > "F:\\mysql\\Backup\\BK%Y%%m%\\jitriBackUp_%Y%%m%%d%.sql"

@echo on
rem *******************************Code End*****************************

oracle:

@echo off
rem set backupfolder=%date:~0,4%-%date:~5,2%-%date:~8,2%
rem md D:\\backup\\%backupfolder%
set backupfile=jsqs_%date:~0,4%-%date:~5,2%-%date:~8,2%.dmp
set logfile=jsqs_%date:~0,4%-%date:~5,2%-%date:~8,2%.log
expdp jsqs/jsqs directory=dbbackup  dumpfile=%backupfile%  logfile=%logfile% schemas=jsqs parallel=4
forfiles /p "D:\\dbbackup" /d -7  /c "cmd /c  del /f @path"

 

以上是关于MySql 定时备份数据库的主要内容,如果未能解决你的问题,请参考以下文章

MySql自动备份并开启定时任务

linux定时备份MySQL数据库并删除七天前的备份文件

Mysql5.7在CentOs环境下定时备份数据库

转-让linux每天定时备份MySQL数据库并删除五天前的备份文件

如何实现Mysql数据库每天自动备份定时备份?

如何实现Mysql数据库每天自动备份定时备份