您的位置:首页 > 数据库 > MySQL

mysql定期备份4例

2013-06-19 11:26 176 查看
1.mysql自动定时备份数据库的最佳方法-支持windows系统

网上有很多关于window下Mysql自动备份的方法,可是真的能用的也没有几个,有些说的还非常的复杂,难以操作。

我们都知道mssql本身就自带了计划任务可以用来自动备份,可是mysql咱们要怎么样自动有备份呢?

教大家一个最简单的方法,这个方法是用bat批处理来完成的。

假想环境:MySQL 安装位置:D:\Program Files\MySQL\MySQL Server 5.0\data

如图:

 


数据库名称为:952game数据库备份目的地:d:\db_bak\ (你想把数据库备份到哪个盘的路径)我想备到D盘的db-bak目录下面============================新建db_bak.bat,写入以下代码

net stop mysql

xcopy c:\mysql\data\bbs\*.* d:\db_bak\bbs\%date:~0,3%\ /y

net start mysql

如图详解:

最好一步就是实现如何定时备份了,跟我学!GO go go

这里我们采用最简单的方法

使用Windows的“计划任务”定时执行该批处理脚本即可。(例如:每天凌晨3点执行back_db.bat)

不会的话请看图文:

1、运行,计划任务



2、添加计划任务。



3、最后一步就是指定备份时间了。







到这里就完成自动定时备份了,很简单吧。

最后再给大家多讲一句就是这个批处理命令 \%date:~0,3%  的意思提取星期几信息
当然如果你想创建年月日的话就用%date:~0,10%  ,系统就会每天给你建日期目录了。很方便吧。

%date:~0,10%      //提取年月日信息
%date:~-3%         //提取星期几信息
%time:~0,5%         //提取时间中的时和分
%time:~0,-3%       //提取时和分和秒信息

2.Linux下定时备份MySql数据库的Shell脚本   

对任何一个已经上线的网站站点来说,数据备份都是必须的。无论版本更新还是服务器迁移,备份数据的重要性不言而喻。人工备份数据的方式不单耗费大量时间和精力,还灰常不专业的说。于是,有了下面这段脚本的出现。参考了网上的很多教程,外加自己的测试,以下脚本经测试可用。

#!/bin/bash
#Shell Command For Backup MySQL Database Everyday Automatically By Crontab
#Author : Carlos Wong
#Date : 2010-08-24
#配置参数
USER=root #数据库用户名
PASSWORD=××××× #数据库用户密码
DATABASE=TIENIUZAI #数据库名称
WEBMASTER=tieniuzai@qq.com #管理员邮箱地址,用以发送备份失败消息提醒
BACKUP_DIR=/var/www/Data_Backup/topons/ #备份文件存储路径
LOGFILE=/var/www/Data_Backup/topons/data_backup.log #日记文件路径
DATE=`date ‘+%Y%m%d-%H%M’` #日期格式(作为文件名)
DUMPFILE=$DATE.sql #备份文件名
ARCHIVE=$DATE.sql.tgz #压缩文件名
OPTIONS=”-u$USER -p$PASSWORD –opt –extended-insert=false –triggers=false -R –hex-blob –flush-logs –delete-master-logs -B $DATABASE” #mysqldump 参数 详情见帮助 mysqldump -help

#判断备份文件存储目录是否存在,否则创建该目录
if [ ! -d $BACKUP_DIR ] ;
then
mkdir -p “$BACKUP_DIR”
fi

#开始备份之前,将备份信息头写入日记文件
echo ” ” >> $LOGFILE
echo ” ” >> $LOGFILE
echo “———————————————–” >> $LOGFILE
echo “BACKUP DATE:” $(date +”%y-%m-%d %H:%M:%S”) >> $LOGFILE
echo “———————————————– ” >> $LOGFILE

#切换至备份目录
cd $BACKUP_DIR
#使用mysqldump 命令备份制定数据库,并以格式化的时间戳命名备份文件
mysqldump $OPTIONS > $DUMPFILE
#判断数据库备份是否成功
if [[ $? == 0 ]]; then
#创建备份文件的压缩包
tar czvf $ARCHIVE $DUMPFILE >> $LOGFILE 2>&1
#输入备份成功的消息到日记文件
echo “[$ARCHIVE] Backup Successful!” >> $LOGFILE
#删除原始备份文件,只需保 留数据库备份文件的压缩包即可
rm -f $DUMPFILE
else
echo “Database Backup Fail!” >> $LOGFILE

#备份失败后向网站管理者发送邮件提醒,需要mailutils或者类似终端下发送邮件工具的支持
#mail -s “Database:$DATABASE Daily Backup Fail” $WEBMASTER
fi
#输出备份过程结束的提醒消息
echo “Backup Process Done”

使用:

1. 将以上代码保存到: /usr/sbin/DataBackup (文件名随意,只要不跟系统原有的命令同名即可;代码可以放到任何地方,放在sbin目录下只是为了方便执行,sbin目录下的文件/目录可在终端直接调用,类似于windows下PATH变量指定的目录)

2. 为脚本添加可执行权限: sudo chmod +x /usr/sbin/DataBackup

3. 执行脚本: sudo DataBackup

4. 如果需要定时执行备份命令的,只需将下面这段代码放到crontab 文件(sudo vim /etc/crontab)中去就可以了:

01 3 * * * root /usr/sbin/DataBackup #它代表着将于每天3点执行DataBackup脚本
注意:

1. linux 下的shell脚本定义变量的格式为: key=value ,注意他们两者之间的” = “前后不能出现空格,否则系统无法确认该变量。

2. 用红色标注的那行,第一个类似单引号的字符”`”其实不是单引号,它的输入键在键盘ESC键下方。

3. 这个脚本只适合用于一些小站点的备份,因为它是对数据库进行全部备份而不是增量备份,不适合大容量的数据库备份。

Update:

2010-08-24 :由于服务器上的MySQL配置文件里 的socket项值为 “/tmp/mysql.sock”, 而mysqldump在链接mysql server的时候会去查找位于/var/lib/mysql/目录下的mysql.sock文件。如果没有则会报错:
mysqldump: Got error: 2002: Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’
解决方法是:

一是,修改mysql配置文件里的socket项的值为 ’/var/lib/mysql/mysql.sock’,不过这种方法需要重启mysql服务,很不厚道。

二是,为/tmp/mysql.sock创建一个软链接到/var/lib/mysql/mysql.sock:
ln -s /tmp/mysql.sock /var/lib/mysql/mysql.sock

来源:http://tieniuzai.com/blog/view/backup-mysql-by-shell

3.让linux每天定时备份MySql数据库并删除五天前的备份文件

MYSQL定期备份是一项重要的工作,但人工操作太繁琐,也难避免有所疏漏,使用下面的方法即可让系统定期备份数据。利用系统crontab来定时执行备份文件,按日期对备份结果进行保存,达到备份的目的。

1、创建备份文件夹
#cd /bak
#mkdir mysqldata  

2、编写运行脚本
#nano -w /usr/sbin/bakmysql.sh
注:如使用nano编辑此代码需在每行尾添加'&&'或';'连接符,否则生成的文件名末尾字符为乱码

代码:
#!/bin/bash
# Name:bakmysql.sh
# This is a ShellScript For Auto DB Backup and Delete old Backup
#
backupdir=/bak/mysqlbak
time=` date +%Y%m%d%H `
mysql_bin_dir/mysqldump -u user -ppassword dataname1 | gzip > $backupdir/name1$time.sql.gz
mysql_bin_dir/mysqldump -u user -ppassword dataname2 | gzip > $backupdir/name2$time.sql.gz
#
find $backupdir -name "name_*.sql.gz" -type f -mtime +5 -exec rm {} \; > /dev/null 2>&1

保存退出

说明:
代码中time=` date +%Y%m%d%H `也可以写为time="$(date +"%Y%m%d$H")"
其中`符号是TAB键上面的符号,不是ENTER左边的'符号,还有date后要有一个空格。
mysql_bin_dir:mysql的bin路径;
dataname:数据库名;
user:数据库用户名;
password:用户密码;
name:自定义备份文件前缀标识。
-type f    表示查找普通类型的文件,f表示普通文件。
-mtime +5   按照文件的更改时间来查找文件,+5表示文件更改时间距现在5天以前;如果是 -mmin +5 表示文件更改时间距现在5分钟以前。
-exec rm {} \;   表示执行一段shell命令,exec选项后面跟随着所要执行的命令或脚本,然后是一对儿{ },一个空格和一个\,最后是一个分号。
/dev/null 2>&1  把标准出错重定向到标准输出,然后扔到/DEV/NULL下面去。通俗的说,就是把所有标准输出和标准出错都扔到垃圾桶里面;其中的& 表示让该命令在后台执行。 

3、为脚本添加执行权限
# chmod +x /usr/sbin/bakmysql.sh

4、修改/etc/crontab(在centOS5中测试可行)
#nano -w /etc/crontab  
在最后一行中加入:  
00 3 * * * root /usr/sbin/bakmysql.sh
表示每天3点00分执行备份

注:crontab配置文件格式如下:
分 时 日 月 周  命令

Redhat方法:
Redhat的crontab采用按时间调用4个目录(/etc/cron.hourly:每小时;/etc/cron.daily:每天;/etc/cron.weekly:每周;/etc/cron.monthly:每月)中脚本出来运行的方式。
Redhat中只需要将刚才编辑的脚本复制到相应的目录即可。

5、重启crontab
# /etc/rc.d/init.d/crond restart  
完成。  

6、恢复数据备份文件:

非压缩备份文件恢复:
   #mysql -u root -p dataname < name2008010103.sql

从压缩文件直接恢复:
   #gzip < name2008010103.sql.gz | mysql -u root -p dataname
或:
# zcat name2008010103.sql.gz  | mysql -u root -p

4.windows平台mysql定时备份脚本(bat批处理)

以前一直使用复制文件的方式来备份数据库文件,因为这种方式必须停止mysql数据库,比较繁琐,数据量大后,停止mysql的时间也变的很长,影响网站优化,因而参考网上方法写了如下脚本,大鸟就不用看了,如有什么bug或好的方法请留言 ! 

代码如下 :

@echo off
cls
color 1E
title %date% %time:~,8% 备份MYSQL数据库 BY:REKFAN
::::::::::::::::::::::::以下是需要配置的参数::::::::::::::::::::::::

        rem 设置 MySql服务器root账号的密码,特殊符号需要在其前添加两个^,如!、>、|、^、&、* 等
        SET MySql_pw=mysql 的root密码
        rem 设置 数据库备份目录
        SET BAK_Dir=f:db_bak
        rem 设置 需要备份的myisam格式数据库,多数据库用逗号分隔
        SET BAK_db_myisam=myisam_db1,myisam_db2,myisam_db3
        rem 设置 需要备份的innodb格式数据库,多数据库用逗号分隔
        SET BAK_db_innodb=innodb_1,innodb_2,innodb_3
        rem 设置 自动删除几天的备份,0为删除所有,慎用
        SET Bak_Time_ago=5
        rem 设置 WinRAR压缩软件的路径
        SET RAR_Dir="C:Program FilesWinRARWinRAR.exe"
        rem 设置 以2001-01-01格式的日期为子目录(不必修改)
        SET BAK_Dir2=%date:~0,4%-%date:~5,2%-%date:~8,2%
        rem 设置 备份文件名
        SET BAK_FILE=%%i_%BAK_Dir2%.sql
        rem 设置 日志文件名
        SET LOG_FILE=%BAK_Dir%%BAK_Dir2%MY_DBBAK.log

::::::::::::::::::::::::以上是需要配置的参数::::::::::::::::::::::::

echo. ≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡
echo. ┃                                                                   ┃
echo. ┃                   欢迎使用Mysql自动备份批处理                     ┃
echo. ┃           本代码由rekfan编写 Http://blog.rekfan.com               ┃
echo. ┃                                                                   ┃
echo. ┃  …………………………………………………………………………………… ┃
echo. ┃ 关于本脚本                                                        ┃
echo. ┃ ::本脚本只需自定义MySql_pw、BAK_Dir、Bak_Time_ago、RAR_Dir的值    ┃
echo. ┃ ::本脚本调用了临时VBS代码进行日期计算                             ┃
echo. ┃ ::本脚本为兼容不同的日期格式,调用reg命令,统一设置日期格式        ┃
echo. ┃ ::本脚本自动生成数据库.sql脚本,并自动压缩为.rar文件              ┃
echo. ┃ ::本脚本自动生成日志文件在x:xxxx000-00-00MY_DBBAK.log         ┃
echo. ┃ ::本脚本数据库备份路径为x:xxxx000-00-00数据库名_0000-00-00.rar┃
echo. ┃ ::本脚本如果想放在windows计划任务里执行,请去掉脚本里的所有pause   ┃
echo. ┃ ::因每个服务器的Mysql环境不一样,备份的核心语句自行更改            ┃
echo. ┃ ::本脚本没有版权,可以任意改为自己想要的效果,转载请勿删除该注释语句┃
echo. ┃                                          By REKFAN 2011-10-14     ┃
echo. ≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡
echo.

if not defined MySql_pw (echo MySql_pw 尚未定义!)
if not defined BAK_Dir (echo BAK_Dir 尚未定义!)
if not defined Bak_Time_ago (echo Bak_Time_ago 尚未定义!)
if not defined RAR_Dir (echo RAR_Dir 尚未定义!)

:: 取得当前计算机时间,以 yyyy-MM-dd 格式显示
for /f "skip=2 delims=" %%a in ('reg query "HKEY_CURRENT_USERControl PanelInternational" /v sShortDate') do (
SET RegDateOld=%%a
)
SET RegDateOld=%RegDateOld:~-8%
::通过改变注册表改变计算机的日期格式
reg add "HKEY_CURRENT_USERControl PanelInternational" /v sShortDate /t REG_SZ /d yyyy-M-d /f>nul
>"%temp%DstDate.vbs" echo LastDate=date()-%Bak_Time_ago%
>>"%temp%DstDate.vbs" echo FmtDate=right(year(LastDate),4) ^& right("0" ^& month(LastDate),2) ^& right("0" ^& day(LastDate),2)
>>"%temp%DstDate.vbs" echo wscript.echo FmtDate
for /f %%a in ('cscript /nologo "%temp%DstDate.vbs"') do (
SET DstDate=%%a
)
::删除指定时间前的备份
SETlocal enabledelayedexpansion
echo. 删除 %BAK_Dir2%〔%Bak_Time_ago%〕天前的备份文件
for /f "delims= " %%i in ('dir /ad/b %BAK_Dir%????-??-??') do (
SET t1=%%i
SET t2=!t1:~0,4!!t1:~5,2!!t1:~8,2!
if /i !t2! leq %DstDate% (
DEL /F /A /Q \?%BAK_Dir%!t1!*.*
rd /q /s \?%BAK_Dir%!t1!
echo. 备份文件夹%BAK_Dir%!t1!删除完成!)
)
 

:: 还原计算机注册表的日期格式
reg add "HKEY_CURRENT_USERControl PanelInternational" /v sShortDate /t REG_SZ /d %RegDateOld% /f>nul

echo. 
echo. 开始以当前日期创建文件夹
if not exist %BAK_Dir%%BAK_Dir2% md %BAK_Dir%%BAK_Dir2%
cd /d %BAK_Dir%%BAK_Dir2%
echo. 开始建立今天(%BAK_Dir2%)的备份
:: 记录时间日志
echo 备份时间:%BAK_Dir2% %time:~0,8%  >> %LOG_FILE%
echo /++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ >> %LOG_FILE%

:: 备份的核心代码

if not defined BAK_db_myisam (goto innodb)
SetLocal DisableDelayedExpansion
for %%i in (%BAK_db_myisam%) do (
mysqldump -hlocalhost -uroot -p%MySql_pw% --default-character-set=GB2312 -R --triggers --hex-blob -x %%i >%BAK_FILE%
rem 以上的参数根据自己的需求更改,部分参数方法请看 http://blog.rekfan.com/?p=57
%RAR_Dir% a %BAK_FILE:~0,-4%.rar %BAK_FILE%
DEL /F /A /Q %BAK_FILE%
echo 数据库【%%i】 已经备份到%BAK_Dir%%BAK_Dir2%%BAK_FILE%.rar >> %LOG_FILE%
)

:innodb
if not defined BAK_db_innodb (goto exitbat)
echo. 开始以当前日期创建文件夹
if not exist %BAK_Dir%%BAK_Dir2% md %BAK_Dir%%BAK_Dir2%
cd /d %BAK_Dir%%BAK_Dir2%
echo. 开始建立今天(%BAK_Dir2%)的备份
SetLocal DisableDelayedExpansion
for %%i in (%BAK_db_innodb%) do (
mysqldump -hlocalhost -uroot -p%MySql_pw% --default-character-set=GB2312 -R --triggers --hex-blob --single-transaction -B %%i >%BAK_FILE% 
%RAR_Dir% a %BAK_FILE:~0,-4%.rar %BAK_FILE%
DEL /F /A /Q %BAK_FILE%
echo 数据库【%%i】 已经备份到%BAK_Dir%%BAK_Dir2%%BAK_FILE%.rar >> %LOG_FILE%
)

:exitbat
echo ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++/ >> %LOG_FILE%
 
echo. 所有备份建立完毕
:: 清除变量
        SET MySql_pw=
        SET BAK_Dir=
        SET Bak_Time_ago=
        SET RAR_Dir=
        SET BAK_Dir2=
        SET BAK_FILE=
        SET LOG_FILE=

 

了解MySQL 备份和恢复(包括MyISAM 和 Innodb存储模式)请看 http://blog.rekfan.com/?p=57

定时运行:

⒈ 『开始』-『控制面板』-『计划与任务』-『新建计划』-后面的根据自己的情况进行设置!


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  MySQL 备份 脚本