转载:MySql 定时备份数据库
每天零点备份一次数据库,备份文件放在指定目录(如果目录不存在则新建),按月存储;
将下面这段命令存储为一个 *.bat 文件,添加一个Windows任务计划程序(Task scheduler)指向这个文件,每天执行一次即可。
rem ******Code Start*********** @echo off C: CD C:Program FilesMySQLMySQL Server 5.7in set "Y=%date:~10,4%" set "m=%date:~7,2%" set "d=%date:~4,2%" if not exist "D:ARTS BackupBK%Y%%m%" (mkdir "D:ARTS BackupBK%Y%%m%") mysqldump --opt -u root --password=ameroidrts ameroid > "D:ARTS BackupBK%Y%%m%ameroid_%Y%%m%%d%.sql" @echo on rem *****************Code End*************
说明
我的MySql安装在C:Program Files下,所以要先进入MySql的bin目录,以便执行 mysqldump 命令
C:
CD C:Program FilesMySQLMySQL Server 5.7in
如果你的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:mysqlinmysqldump --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_backupemsc_backup_%Ymd%.sql @echo on rem ******MySQL backup end********
其中,forfiles删除过期文件的命令,-d -30删除30天的文件。C:mysqlinmysqldump 为 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 FilesMySQLMySQL Server 5.5in set "Y=%date:~,4%" set "m=%date:~5,2%" set "d=%date:~8,2%" if not exist "F:mysqlBackupBK%Y%%m%" (mkdir "F:mysqlBackupBK%Y%%m%") mysqldump --opt -u root --password= jitri > "F:mysqlBackupBK%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"