mysql备份脚本

生产环境中Mysql数据库的备份是周期性重复的操作,所以通常是要编写脚本实现,通过crond计划任务周期性执行备份脚本
mysqldump备份方案:
周日凌晨1点全库备份
周一到周六凌晨每隔4个小时增量备份一次
设置crontab任务,每天执行备份脚本

crontab–e

每个星期日凌晨1:00执行完全备份脚本

0 1 * * 0 /root/mysqlfullbackup.sh >/dev/null 2>&1

周一到周六每隔4个小时增量备份一次

0 /4 * 1-6 /root/mysqldailybackup.sh >/dev/null 2>&1
mysqlfullbackup.sh脚本内容:
[root@localhost ~]# cat mysqlfullbackup.sh

!/bin/sh

Name:mysqlFullBackup.sh

定义数据库目录

mysqlDir=/usr/local/mysql

定义用于备份数据库的用户名和密码

user=root
userpwd=123456
dbname=test_db

定义备份目录

databackupdir=/opt/mysqlbackup
[ ! -d databackupdir ]&& mkdirdatabackupdir

定义邮件正文文件

emailfile=$databackupdir/email.txt

定义邮件地址

[email protected]

定义备份日志文件

logfile=$databackupdir/mysqlbackup.log
DATE=date -I

echo “” > emailfileecho (date +"%y-%m-%d %H:%M:%S") >> emailfilecd databackupdir

定义备份文件名

dumpfile=mysql_DATE.sql  
gzdumpfile=mysql_
DATE.sql.tar.gz

使用mysqldump备份数据库,请根据具体情况设置参数

mysqlDir/bin/mysqldumpu user -p userpwdflushlogsx dbname > $dumpfile

压缩备份文件

if [ ?eq0];thentarczf gzdumpfile dumpfile>> emailfile 2>&1
echo “BackupFileName: gzdumpfile">> emailfile
echo “DataBase Backup Success!” >> emailfilermf dumpfile
else
echo “DataBase Backup Fail!” >> $emailfile
fi

写日志文件

echo “——————————————————–” >> logfilecat emailfile >> $logfile

发送邮件通知

cat emailfile|mails"MySQLBackup" email

mysqldailybackup.sh脚本内容:
[root@localhost ~]# cat mysqldailybackup.sh

!/bin/sh

Name:mysqlDailyBackup.sh

定义数据库目录和数据目录

mysqldir=/usr/local/mysql
datadir=$mysqldir/data

定义用于备份数据库的用户名和密码

user=root
userpwd=123456

定义备份目录,每日备份文件备份到$dataBackupDir/daily

databackupdir=/opt/mysqlbackup
dailybackupdir= databackupdir/daily[!d dailybackupdir ]&& mkdir -p $databackupdir/daily

定义邮件正文文件

emailfile=$databackupdir/email.txt

定义邮件地址

[email protected]

定义日志文件

logfile= databackupdir/mysqlbackup.logecho> emailfile
echo (date+" emailfile
#

刷新日志,使数据库使用新的二进制日志文件

mysqldir/bin/mysqladminu user -p userpwdflushlogscd datadir

得到二进制日志列表

filelist=cat mysql-bin.index
icounter=0
for file in $filelist
do
icounter=expr $icounter + 1
done
nextnum=0
ifile=0
for file in $filelist
do
binlogname=basename $file
nextnum=expr $nextnum + 1

跳过最后一个二进制日志(数据库当前使用的二进制日志文件)

if [ nextnumeq icounter ]; then
echo “Skip lastest!” > /dev/null
else
dest= dailybackupdir/ binlogname

跳过已经备份的二进制日志文件

if [ -e dest];thenechoSkipexist binlogname!” > /dev/null
else

备份日志文件到备份目录

cp binlogname dailybackupdir
if [ $? -eq 0 ]; then
ifile=expr $ifile + 1
echo “ binlognamebackupsuccess!">> emailfile
fi
fi
fi
done
if [ ifileeq0];thenechoNoBinlogBackup!>> emailfile
else
echo “Backup ifileFile(s).">> emailfile
echo “Backup MySQL Binlog OK!” >> $emailfile
fi

发送邮件通知

cat emailfile|mails"MySQLBackup" email

写日志文件

echo “——————————————————–” >> logfilecat emailfile >> $logfile
chmod +x

你可能感兴趣的:(mysql)