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

Mysql 备份脚本

2016-02-26 17:39 761 查看
Mysql 备份脚本,异地备份
cat mysql_backup.sql

#!/bin/sh
. /etc/profile
cd /home/mysql/backup
exe=/usr/local/mysql/bin/mysqldump
mysql_bin=/usr/local/mysql/bin/mysql
user=root
password=xxxxx
suffix=`date +'%Y%m%d%H%M'`
bakdir=/home/mysql/backup
remotedir=/home/mysql/backup
remotehost='xxx.xxx.xx.xx'
copy=5

bakdata(){
$exe -u$user -p$password --single-transaction -R  --default-character-set=utf8 --triggers --events  --hex-blob   --databases xxx1   >$bakdir/xxx1_$suffix.sql
$exe -u$user -p$password --single-transaction  -R  --default-character-set=utf8 --triggers --events   --hex-blob   --databases  xxx2  >$bakdir/xxx2_$suffix.sql
$exe -u$user -p$password --single-transaction  -R  --default-character-set=utf8 --triggers --events   --hex-blob  --flush-logs --master-data=2   -A  >$bakdir/all_$suffix.sql
}
remotebak(){
scp $bakdir/xxx2_$suffix.sql $remotehost:$remotedir
scp $bakdir/xxx2_$suffix.sql $remotehost:$remotedir
scp $bakdir/all_$suffix.sql $remotehost:$remotedir
scp $bakdir/privileges_backup_$suffix.sql $remotehost:$remotedir
}
clearbak(){
ssh $remotehost "find $remotedir/*.sql -mtime +$copy -exec rm {} \;"
find $bakdir/*.sql -mtime +$copy -exec rm {} \;
}

#optimize减少磁盘碎片,不支持optimize只支持Myisam,不支持Innodb
#analyze用来收集统计信息,支持Myisam和Innodb
optimize_tab(){
mysql -u$user -p$password xxx1 -e "show tables " | sed '1d' | awk '{print "optimize table "$0";\nanalyze table "$0";"}'|mysql -u$user -p$password xxx1;
mysql -u$user -p$password xxx2 -e "show tables " | sed '1d' | awk '{print "optimize table "$0";\nanalyze table "$0";"}'|mysql -u$user -p$password xxx2;
}
do_backup_grant_priv()
{
split=\`
special=`$mysql_bin -u$user -p$password --default-character-set=utf8 -Bse "select user, host from mysql.user;" | grep "$split" |wc -l `
if [ $special -eq 0 ];then
split=\`
else
special=`$mysql_bin -u$user -p$password --default-character-set=utf8 -Bse "select user, host from mysql.user;" | grep -E "'" |wc -l `
if [ $special -eq 0 ];then
split=\'\'
else
echo "Error:the username have special char"
exit
fi
fi

for SQLUSER in `$mysql_bin -u$user -p$password --default-character-set=utf8 -Bse "select concat('$split', user, '$split', '@', '''', host, '''') from mysql.user;"`
do
$mysql_bin -u$user -p$password --default-character-set=utf8 -Bse "show grants for $SQLUSER;" | sed 's/$/;/g' >> $bakdir/privileges_backup_$suffix.sql
done

}
echo "----------------------------------------"
date +'===DATA BACKUP BEGIN:%Y%m%d %T====='
bakdata
date +'===DATA BACKUP END:%Y%m%d %T====='
date +'===PRI BACKUP BEGIN:%Y%m%d %T====='
do_backup_grant_priv
date +'===PRI BACKUP END:%Y%m%d %T====='
date +'===SCP BEGIN:%Y%m%d %T====='
remotebak
date +'===SCP END:%Y%m%d %T====='
date +'===CLS BEGIN:%Y%m%d %T====='
clearbak
date +'===CLS END:%Y%m%d %T====='
date +'===OPT BEGIN:%Y%m%d %T====='
flag=`date +"%w"`
if [ $flag -eq 6 ] ; then
optimize_tab
fi
date +'===OPT END:%Y%m%d %T====='
echo -e "\n"
echo -e "\n"


0 01 * * * /home/mysql/script/mysql_backup.sh >>/home/mysql/backup/run.log 2>&1
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Mysql 备份脚本