一、脚本说明
1、需要备份2个库(mysqltest1 mysqltest)
2、开启4个进程
3、可以选择进行备份不压缩和备份压缩
4、可以对不需要的数据库剔除
5、backup用户在数据库里的权限
grant select,reload,super,lock tables,create view,show view on *.* to 'backup'@'localhost' identified by 'backup';
flush privileges;
6、计划任务
00 00 * * * cd /opt/dbbak && bash mysqlback.sh mysqlbackupconf >> /opt/dbbak/dbbackup.log 2>&1
7、会删除三天前的binlog
8、mysql版本5.5的
9、debian7.4 (3.2.54-2 x86_64)
二、具体脚本如下
cat mysqlback.sh
#!/bin/bash
#--------------------------------------------------
#Author:jimmygong
#Email:jimmygong@taomee.com
#FileName:mysqlback.sh
#Function:
#Version:1.0
#Created:2015-06-29
#--------------------------------------------------
if [[ $# -ne 1 ]]
then
echo -e "Usage:$0 mysqlbackupconf"
exit 1
else
config=$1
if [[ ! -f $config ]]
then
echo -e "Usage:$0 mysqlbackupconf"
exit 1
fi
fi
source $config
dbname=""
currdate=$(date +%Y%m%d)
haveinnodb=0
localip=$(ifconfig eth0|awk '/inet addr:/'|awk -F: '{print $2}'|awk -F" " '{print $1}')
function purgebinlog ()
{
purdate=`date "+%F %T" --date='3 day ago'`
pur="purge master logs before '$purdate'"
echo "$pur"|mysql -u"$dbuser" -p"$dbpass"
}
function redirectlog ()
{
logfile=$logdir/${currdate}_${localip}_log
mkdir -p $logdir
exec 1>$logfile
exec 2>$logfile
}
function checkdestdir ()
{
destdir=$destdir/$currdate
if [[ ! -d $destdir ]]
then
mkdir -p $destdir
fi
}
function runcommand ()
{
comm=$1
mysql -u"$dbuser" -p"$dbpass" -sNe "$comm"
}
function generateschema ()
{
i=0
result=`runcommand 'show databases'`
for db in $result
do
rv=`echo $exclude|grep -w -i $db`
if [[ -n "$rv" ]]
then
continue;
fi
dbname[i]=$db
let i++
done
}
function guessengine ()
{
innodb=`runcommand 'show engines'|grep -i innodb|grep -i yes`
if [[ ! -z "$innodb" ]]
then
haveinnodb=1
fi
}
function dobackupsql ()
{
db=$1
destname=$destdir/$db.sql
if [[ $haveinnodb -eq 1 ]]
then
dumpcomm="mysqldump --opt -u$dbuser -p$dbpass --single-transaction --databases"
else
dumpcomm="mysqldump --opt -u$dbuser -p$dbpass --databases"
fi
$dumpcomm $db > $destname
}
function dobackupgzip ()
{
db=$1
destname=$destdir/$db.sql.gz
if [[ $haveinnodb -eq 1 ]]
then
dumpcomm="mysqldump --opt -u$dbuser -p$dbpass --single-transaction --databases"
else
dumpcomm="mysqldump --opt -u$dbuser -p$dbpass --databases"
fi
$dumpcomm $db|gzip > $destname
}
function backup ()
{
actioncommand=$1
if [[ $commpress -eq 1 ]]
then
actioncommand="dobackupgzip"
else
actioncommand="dobackupsql"
fi
echo -en "`date`\tBACKUP\t$db\n"
$actioncommand $db
}
function backupalldb ()
{
count=0
for db in ${dbname[@]}
do
backup $db &
let count+=1
[[ $((count%$processnum)) -eq 0 ]] && wait
done
wait
echo "all backup done"
}
purgebinlog
redirectlog
checkdestdir
generateschema
guessengine
runcommand "flush logs"
backupalldb
exit 0
三、具体配置信息
cat mysqlbackupconf
dbuser="backup"
dbpass="backup"
exclude='mysql information_schema performance_schema'
destdir=/opt/dbbak
logdir=/opt/dbbak/log
commpress=1
processnum=4
四、备份后结果
1、root@10.131.172.202:~# ll /opt/dbbak/20150629/
-rw-r--r-- 1 root root 4443602410 Jun 29 19:18 mysqltest1.sql.gz
-rw-r--r-- 1 root root 4443601959 Jun 29 19:19 mysqltest.sql.gz
2、root@10.131.172.202:~# ll /opt/dbbak/log/
-rw-r--r-- 1 root root 109 Jun 29 19:19 20150629_10.131.172.202_log
参考链接 :
mysql备份单实例(一)shell
https://blog.51cto.com/u_7938217/1669168