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<&-