需求:有200个IP要进行下线,为防止有业务还需要数据,先对业务进行数据库备份; 通常情况下写个循环进行备份,但是200个循环,顺序执行太慢了,估计一个星期跑不完;
或者批量生成语句,一次跑完,但是这样可能会导致备份机资源打满的情况,也不推荐;
此时可以使用多进程并发备份,开20个进程,代码如下:
#!/bin/bash
. /etc/init.d/functions
mkfifo /tmp/fl
exec 20<>/tmp/fl
rm -rf /tmp/fl
for ((n=1;n<=20;n++));do
echo >&20
done
for ip in `cat ip3.list`;do
read -u20
{
//开始执行备份
mysqldump --single-transaction -q --set-gtid-purged=OFF -A -h $ip > $ip.sql
if [ $? = 0 ];then
echo "$ip is ok"
else
echo "$ip is no"
fi
echo >&20 #将管道内容在放回去
}&
done
wait
echo "backup compelet"
exec 20<&-
exec 20>&-