シェルはマルチスレッドのバックアップおよびリカバリデータベースを実現します

シェルはマルチスレッドのバックアップおよびリカバリデータベースを実現します

バックアップ

#!/bin/bash
trap "exec 6>&-;exec 6<&-;wxit 0" 2
tmp_fifofile=/tmp/$$.fifo
mkfifo $tmp_fifofile
exec 6<>$tmp_fifofile
rm $tmp_fifofile
# 这里是并发线程数
thread=20
for ((i=0; i<=$thread;i++))
do
  echo
done >&6
# 下面是具体执行语句
USER="root"
PASSWD="123456"
HOSTS="127.0.0.1"
for DB in `mysql -u${
     
     USER} -p${
     
     PASSWD} -h${
     
     HOSTS} -e "show databases;" 2>/dev/null`
do
read -u6
{
    
    
  mysqldump -u${USER} -p${PASSWD} -h${HOSTS} --single-transaction --set-gtid-purged=OFF 2>/dev/null $DB > $DB.sql
  echo >& 6
}&
done
wait
exec 6>&-
exec 6<&-

戻す

#!/bin/bash
trap "exec 6>&-;exec 6<&-;wxit 0" 2
tmp_fifofile=/tmp/$$.fifo
mkfifo $tmp_fifofile
exec 6<>$tmp_fifofile
rm $tmp_fifofile
thread=20
for ((i=0; i<=$thread;i++))
do
  echo
done >&6
USER="root"
PASSWD="123456"
HOSTS="127.0.0.1"
for DB in `ls *.sql | awk -F. '{print $1}'`
do
read -u6
{
    
    
  mysql -u${USER} -p${PASSWD} -h${HOSTS} -e "CREATE DATABASE ${DB} 2>/dev/null"
  mysql -u${USER} -p${PASSWD} -h${HOSTS} ${DB} 2>/dev/null < ${DB}.sql
  echo >& 6
}&
done
wait
exec 6>&-
exec 6<&-

おすすめ

転載: blog.csdn.net/lswzw/article/details/108228703