mysql分庫分表備份腳本[轉帖]

#!/bin/bash 
#created by yangqiqi 2017-08-24 

#建立備份用戶
#grant select,lock tables,reload,super,file,show view on *.* to 'mysqlbackup'@'localhost' identified by 'my_password'; 
#grant execute on *.* to 'mysqlbackup'@'localhost' identified by 'my_password';  授予調用存儲過程的權限
##flush privileges;

USERNAME=mysqlbackup #備份的用戶名 
PASSWORD=my_password  #備份的密碼
HOST=localhost #備份主機

DATE=`date +%Y-%m-%d`  #用來作備份文件名字的一部分
OLDDATE=`date +%Y-%m-%d -d '-10 days'`  #本地保存天數  

#指定命令所用的全路徑
MYSQL=/app/mysql5.5/bin/mysql
MYSQLDUMP=/app/mysql5.5/bin/mysqldump
MYSQLADMIN=/app/mysql5.5/bin/mysqladmin

#建立備份的目錄和文件
BACKDIR=/data/backup/db
[ -d ${BACKDIR} ] || mkdir -p ${BACKDIR}
[ -d ${BACKDIR}/${DATE} ] || mkdir ${BACKDIR}/${DATE}
[ ! -d ${BACKDIR}/${OLDDATE} ] || rm -rf ${BACKDIR}/${OLDDATE} #保存10天 多餘的刪除最前邊的
#開始備份  for循環想要備份的數據庫
MYSQLDUMP_LIST=$(${MYSQL} -uroot -p'123456'  -e "show databases"| grep -Evi "database|infor|perfor|mysql")

for DBNAME in ${MYSQLDUMP_LIST} ##使用for依次羅列須要備份的數據庫名字
do
  TABLE="$(${MYSQL} -uroot -p'123456'  -e "use $DBNAME;show tables;"|sed '1d')" #依次列出須要備份的表的名字
  for tname in $TABLE
    do
        MYDIR=${BACKDIR}/${DATE}/${DBNAME} 
        #echo $MYDIR
        [ ! -d $MYDIR ] && mkdir -p $MYDIR #建立備份表的目錄
        $MYSQLDUMP   -uroot -p'123456'  $DBNAME $tname |gzip >$MYDIR/${DBNAME}_${tname}_${DATE}.sql.gz
    done
 logger "${DBNAME}_${tname} has been backup successful - $DATE"
done
相關文章
相關標籤/搜索