11. shell多執行緒備份資料庫
也許你會有疑問,shell這麼簡單的指令碼語言有多執行緒一說嗎?答案是有的,只不過它實現起來有些難理解罷了,因為它藉助了命名管道實現。所謂多執行緒就是將原來由一個程式完成的事情現在由多個執行緒去完成。假如一個程式需要10個小時完成的事情,現在分配給10個執行緒,給它們分工,然後同時去做這件事情,最終可能就需要1個小時。
本案例就是實現shell多執行緒備份資料庫,具體要求如下:
1)公司的業務量比較大,有100個資料庫需要全量備份,而每個資料庫的資料量高達幾十GB
(注意:每一個庫都為一個獨立的例項,即有著獨立的ip:port);
2)預估每一個庫的備份時間為30分鐘左右,要求在5個小時內完成;
3)假設100個庫的庫名、host、port以及配置檔案路徑都存到一個檔案裡,檔名字為 /tmp/databases.list ;
4)格式為:db1 10.10.10.2 3308 /data/mysql/db1/my.cnf 。
要想在5小時內完成100個資料庫的備份,需要使用shell指令碼的多執行緒功能,一次性開10個執行緒同時併發備份10個資料庫。
參考指令碼如下:
#!/bin/bash
#多執行緒備份資料庫
#備份資料庫使用xtrabackup(由於涉及到myisam,命令為innobackupex)
exec &> /tmp/mysql_bak.log
if ! which inoobackupex &>/dev/null
then
echo "安裝xtrabackup工具"
yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
yum install percona-xtrabackup-24
if [ $? -ne 0 ]
then
echo -e "\033[31m安裝xtrabackup工具出錯,請檢查\033[0m"
exit 1
fi
fi
bakdir=/data/backup/mysql
bakuser=vyNctM
bakpass=99omeaBHh
bak_data()
{
db_name=$1
db_host=$2
db_port=$3
cnf=$4
[ -d $bakdir/$db_name ] || mkdir -p $bakdir/$db_name
innobackupex --defaults-file=$4 --host=$2 --port=$3 --user=$bakuser --password=$bakpass --databases=$1 $bakdir
if [ $? -ne 0 ]
then
echo -e "\033[31m備份資料庫$1出現問題\033[0m"
fi
}
fifofile=/tmp/$$
mkfifo $fifofile
exec 1000<>$fifofile
n=10
for ((i=0;i<$n;i++))
do
echo >&1000 # 0-9,建立10個執行緒
done
cat /tmp/databases.list |while read line
do
read -u1000
{
bak_data `echo $line`
echo >&1000
} &
done
wait
exec 1000>&- #刪除fd1000
rm -f $fifofile #刪除命名管道
指令碼中,
-
exec &> /tmp/mysql_bak.log ,將正確輸出和錯誤輸出都重定向到 /tmp/mysql_bak.log
-
$$表示本程式PID,mkfifo命令建立命名管道
-
read line ,line為變數名,將接下來的輸入賦值給line
相關文章
- Shell多執行緒備份資料庫的指令碼執行緒資料庫指令碼
- python使用多執行緒備份資料庫Python執行緒資料庫
- bash shell多執行緒方案執行緒
- MySQL資料庫備份的shell指令碼MySql資料庫指令碼
- 資料庫單表備份還原shell資料庫
- mysql多執行緒備份與還原工具mydumperMySql執行緒
- MySQL 官方出品,比 mydumper 更快的多執行緒邏輯備份工具-MySQL Shell Dump & LoadMySql執行緒
- Liunx備份mysql資料庫的shell指令碼MySql資料庫指令碼
- springboot配置執行緒池使用多執行緒插入資料Spring Boot執行緒
- DM聯機執行SQL語句進行資料庫備份SQL資料庫
- 使用shell 指令碼備份資料指令碼
- 資料庫備份資料庫
- DM7使用離線工具DMRMAN執行資料庫備份資料庫
- 多執行緒和多執行緒同步執行緒
- 自動定時備份 mysql 資料庫 的 shell 指令碼MySql資料庫指令碼
- 資料提取方法-多程式多執行緒爬蟲執行緒爬蟲
- 多執行緒--執行緒管理執行緒
- 執行緒與多執行緒執行緒
- 多執行緒【執行緒池】執行緒
- 使用MySQL Workbench進行資料庫備份MySql資料庫
- mysql 資料庫 備份MySql資料庫
- 資料庫備份策略資料庫
- MongoDB資料庫備份MongoDB資料庫
- Java多執行緒-執行緒中止Java執行緒
- 多執行緒之初識執行緒執行緒
- 基於python的ftp(含資料庫、含多執行緒、含socketserver)PythonFTP資料庫執行緒Server
- 多執行緒------執行緒與程式/執行緒排程/建立執行緒執行緒
- 多執行緒系列(1),多執行緒基礎執行緒
- oracle資料庫備份之exp增量備份Oracle資料庫
- a、多執行緒執行緒
- oracle 備份資料庫,匯出資料庫Oracle資料庫
- 多執行緒系列之 執行緒安全執行緒
- iOS 多執行緒之執行緒安全iOS執行緒
- Java多執行緒之執行緒中止Java執行緒
- Android多執行緒之執行緒池Android執行緒
- Java多執行緒-執行緒狀態Java執行緒
- Java多執行緒-執行緒通訊Java執行緒
- kuangshenshuo-多執行緒-執行緒池執行緒