上一篇文章(http://mp.weixin.qq.com/s/AiKTWf7Y4mGwwOwJyysQtw)我们介绍了命名管道FIFO,利用里面的知识点,实现这个需求。
需求背景:
领导要求小明备份数据库服务器里面的100个库(数据量在几十到几百G),需要以最快的时间完成(5小时内),并且不能影响服务器性能。
需求分析:
由于数据量比较大,单个库备份时间少则10几分钟,多则几个小时,我们算平均每个库30分钟,若一个库一个库的去备份,则需要3000分钟,相当于50个小时。很明显不可取。但全部丢到后台去备份,100个并发,数据库服务器也无法承受。所以,需要写一个脚本,能够控制并发数就可以实现了。
参考答案:
#!/bin/sh
##假设100个库的名字存到了一个文件里,文件名字为/tmp/databases.list
##其中备份数据库用了mysqldump,这里你可以换成xtrabackup,更快
function bak_data {
dbname=$1
d=`date +%y%d`
mysqldump -uroot -pxxxxx $dbname > /backup/$1.$d
}
mkfifo $tmp_fifofile
exec 1000<>$tmp_fifofile
rm -f $tmp_fifofile
thread=10
for ((i=0;i<$thread;i++));
do
echo >&1000
done
for d in `cat /tmp/databases.list`
do
read -u1000
{
bak_data $d
echo >&1000
} &
done
wait
exec 1000>&-
shell习题-shell多线程
2017年11月24日
shell习题
No Comments
aming
上一篇文章(http://mp.weixin.qq.com/s/AiKTWf7Y4mGwwOwJyysQtw)我们介绍了命名管道FIFO,利用里面的知识点,实现这个需求。
需求背景:
领导要求小明备份数据库服务器里面的100个库(数据量在几十到几百G),需要以最快的时间完成(5小时内),并且不能影响服务器性能。
需求分析:
由于数据量比较大,单个库备份时间少则10几分钟,多则几个小时,我们算平均每个库30分钟,若一个库一个库的去备份,则需要3000分钟,相当于50个小时。很明显不可取。但全部丢到后台去备份,100个并发,数据库服务器也无法承受。所以,需要写一个脚本,能够控制并发数就可以实现了。
参考答案: