Shell多线程备份数据库的脚本

  1. 云栖社区>
  2. 博客>
  3. 正文

Shell多线程备份数据库的脚本

首席提问官 2019-01-07 21:24:31 浏览354
展开阅读全文

本脚本来自有学习阿铭的博文学习:

我的每天要做的工作就要备份数据库,需要涉及到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

网友评论

作者关闭了评论
首席提问官
+ 关注