Shell多執行緒備份資料庫的指令碼

首席提問官發表於2019-01-07

本指令碼來自有學習阿銘的博文學習:

我的每天要做的工作就要備份資料庫,需要涉及到Percona Xtrabackup,mysql資料庫中最良心的公司,解決了很多mysql資料庫的bug。廢話多說,開始指令碼

提示:本文中的S全部都$符

#!/bin/bash
#用途:Shell多執行緒備份資料庫的指令碼。
#作者:Caron maktini
#日期:2019年1月5日
#版本:v0.1

##假設100個資料庫的庫名、host、port以及配置檔案路徑儲存到了一個檔案下,檔案為/tmp/database.list
##格式:db1 10.1.1.2 3308  /data/mysql/db1/my.cnf
##備份資料庫使用的軟體是Percona Xtrabackup

exex &> /tmp/mysql_bak.log

if  ! which  innobackupex  &> /dev/null
then
      echo  "安裝Xtrabackup工具 "
      rpm -ivh  xtrabackup.tar
      yum install -y     percona-xtrabackup-24
       if [ $?  -ne 0 ]
       then
             echo  "安裝Xtrabackup工具,出現錯誤"
             exit 1
       fi
 fi 

bakdir=/data/backup/mysql 
bakuser=admin 
bakpass=administrator 


function bak_data  {
    db_name=$1 
    db_host=$2 
    db_port=$3 
    cnf=$4 
     [  -d Sbakdir/Sdb_name ] || mkdir -p   Sbakdir/$db_name 
      innobackupex  --defaults-file=S4  --host=S2  --port = S3
 --user=Sbakuser  --password=Sbakpass   Sbakdir
          if  [  $? -ne 0 ]
          then
                echo `備份資料庫$1出現問題`
          fi
}
    


fifofile=/tmp/$$ 
mkfifo    $fifofile 
exec 1000<>  $fifofile 

thread=10
for   (( i=0;i<$thread; i++)) 
do 
    echo  >&1000 
done 

cat /tmp/databases.Iist | while read line 
do 
    read -u1000
    {
        bak_data ` echo $line`
        echo  >&1000
    }&  
done

wait
exec 1000>&-
rm -f  $fifofile


相關文章