shell实现多线程备份恢复数据库

shell实现多线程备份恢复数据库

备份

#!/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