讲解Linux系统下如何自动备份MySQL数据的基本教程
1.先创建一个数据库备份目录:
mkdirbackup cdbackup mkdirmysqlbackup cdmysqlbackup
2.创建备份脚本
vimysqlautobackup
3.编写脚本:
filename=`date+%Y%m%d` /mysql的bin目录/mysqldump--opt数据库名-u(mysql账号)-p(mysql密码)|gzip>/备份到哪个目录/name$filename.gz
说明:以上采用gzip压缩,name可随意写,注意-u与mysql账号之间没有空格也无需括号,-p与mysql密码也是。
4.将脚本设置为可执行权限:
chmod+xautobackup
5.写入计划任务:
crontab-e 0101***/bin/bash/脚本所在目录/mysqlautobackup
每天凌晨1点零1分执行脚本。
重启计划任务:
/etc/rc.d/init.d/crondrestart
至此所有步骤完成。
一些常用技巧
1、创建保存备份文件的路径/mysqldata
#mkdir/mysqldata
2、创建/usr/sbin/baktest文件
输入以下内容:
mysqldump-uroot-proottest|gzip>/mysqldata/test`date+%Y-%m-%d_%H%M%S`.sql.gz
3、修改文件属性,使其可以执行
#chmod+x/usr/sbin/baktest
4、修改/etc/crontab
在下面添加
013***root/usr/sbin/baktest
表示每天3点钟01分执行备份
5、重新启动crond
#/etc/rc.d/init.d/crondrestart
完成。
PS:
全备份脚本:
#!/bin/bash #Name:qbk全备份脚本 #mysqlqbkscripts #Byzxsdw.com #LastModify:2015-01-21 #定义脚本存放路径 #scriptsDir=/usr/sbin #定义用户名及密码 user=root userPWD=密码 #定义要备份的数据库 database=数据库 #定义完全备份文件存放路径 bakDir=/backup/mysql #eMailFile=$bakDir/email.txt #eMail=admin@zxsdw.com #定义日志文件 LogFile=$bakDir/mysqlbak.log DATE=`date+%Y%m%d` echo"">>$LogFile echo"">>$LogFile echo"--------------------------">>$LogFile echo$(date+"%y-%m-%d%H:%M:%S")>>$LogFile echo"-----------------">>$LogFile cd$bakDir DumpFile=$DATE.sql.gz mysqldump--flush-logs-u$user-p$userPWD--quick$database|gzip>$DumpFile echo"DumpDone">>$LogFile echo"[$DumpFile]BackupSuccess!">>$LogFile daily_databakDir=$bakDir/daily_backup cd$bakDir/daily_backup find$daily_databakDir-name"daily*"-typef-mtime+35-execrm{}\;>/dev/null2>&1
增量备份脚本
#!/bin/bash #Name:zbk增量备份 #mysqlzbkscripts #Byzxsdw.com #Lastmodify:2015-01-21 #定义数据库用户名及密码 user=root userPWD=密码 #定义数据库 database=数据库 #生成一个新的mysql-bin.00000X文件,如果err日志被清除,则自动新建一个。 /usr/local/mysql/bin/mysqladmin-u$user-p$userPWDflush-logs #定义增量备份位置 daily_databakDir=/backup/mysql/daily_backup #定义MYSQL数据日志目录 mysqlDataDir=/usr/local/mysql/var #定义增量日志及目录 eMailFile=$daily_databakDir/email.txt #eMail=admin@zxsdw.com #定义变量DATE格式为20150127 DATE=`date+%Y%m%d` #定义一个总的logFile日志 logFile=$daily_databakDir/mysql$DATE.log #美化日志模板 echo"">$eMailFile echo"-----------------------">>$eMailFile #时间格式为15-01-2701:06:17 echo$(date+"%y-%m-%d%H:%M:%S")>>$eMailFile echo"-------------------------">>$eMailFile #定义删除bin日志的时间范围,格式为20150124010540 TIME=$(date"-d3dayago"+%Y%m%d%H%M%S) #定义需要增量备份数据的时间范围,格式为2015-01-2601:04:11 StartTime=$(date"-d1dayago"+"%Y-%m-%d%H:%M:%S") ###########开始删除操作美化日志标题############## echo"Delete3daysbeforethelog">>$eMailFile #删除三天前的bin文件,及更新index里的索引记录,美化日志标题 mysql-u$user-p$userPWD-e"purgemasterlogsbefore${TIME}"&&echo"delete3daysbeforelog"|tee-a$eMailFile #查找index索引里的bin2进制文件并赋值给i。 filename=`cat$mysqlDataDir/mysql-bin.index|awk-F"/"'{print$2}'` foriin$filename do #########开始增量备份操作,美化日志标题########### echo"$StartTimestartbackupbinlog">>$eMailFile #利用mysqlbinlog备份1天前增加的数据,并gzip压缩打包到增量备份目录 /usr/local/mysql/bin/mysqlbinlog-u$user-p$userPWD-d$database--start-datetime="$StartTime"$mysqlDataDir/$i|gzip>>$daily_databakDir/daily$DATE.sql.gz|tee-a$eMailFile done #如果以上备份脚本执行成功,接着运行下面的删除脚本 if[$?=0] then #删除mtime>32的增量日志备份文件 find$daily_databakDir-name"*.log"-typef-mtime+32-execrm{}\;>/dev/null2>&1 cd$daily_databakDir echo"Dailybackupsucceed">>$eMailFile else echo"Dailybackupfail">>$eMailFile #mail-s"MySQLBackup"$eMail<$eMailFile#备份失败之后发送邮件通知 #fi结束IF判断 fi #把变量eMailFile的内容替换logFile内容 cat$eMailFile>$logFile #如果上面的IF判断失败,再次运行删除mtime>32的增量日志备份文件 find$daily_databakDir-name"*.log"-typef-mtime+32-execrm{}\;>/dev/null2>&1 rsync-vzrtopg--delete--progress--password-file=/usr/local/rsync/rsync.passwdroot@$ip:/zxs/allimg/$(date-d-1day+%y%m%d)/zxs/allimg/ gunzip</backup/mysql/daily_backup/ceshi.sql.gz|/usr/local/mysql/bin/mysql-u用户名-p密码数据库名--force --force参数忽略错误