讲解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参数忽略错误