1. 程式人生 > >mysql分庫分表備份指令碼[轉帖]

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