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執行緒資料庫
- shell 多執行緒執行緒
- [shell進階]——shell多執行緒執行緒
- shell模擬“多執行緒”執行緒
- 同步寫兩個資料庫--多執行緒資料庫執行緒
- mysql多執行緒備份與還原工具mydumperMySql執行緒
- MySQL資料庫備份的shell指令碼MySql資料庫指令碼
- 資料庫單表備份還原shell資料庫
- JAVA多執行緒共享資料Java執行緒
- 多執行緒資料採集執行緒
- 2 Day DBA-管理方案物件-備份資料庫-練習:當資料庫OPEN時執行全資料庫備份物件資料庫
- MySQL 官方出品,比 mydumper 更快的多執行緒邏輯備份工具-MySQL Shell Dump & LoadMySql執行緒
- Liunx備份mysql資料庫的shell指令碼MySql資料庫指令碼
- 2 Day DBA-管理方案物件-執行備份和恢復-備份資料庫-資料檔案增量備份物件資料庫
- MySQL5.7.11 mysqlpump 多執行緒邏輯備份工具MySql執行緒
- DM聯機執行SQL語句進行資料庫備份SQL資料庫
- 2 Day DBA-管理方案物件-執行備份和恢復-備份資料庫-備份標籤物件資料庫
- springboot配置執行緒池使用多執行緒插入資料Spring Boot執行緒
- 多執行緒和多執行緒同步執行緒
- 使用shell 指令碼備份資料指令碼
- 實驗-shell執行資料庫命令.TXT資料庫
- 資料庫備份資料庫
- 資料提取方法-多程式多執行緒爬蟲執行緒爬蟲
- 多執行緒【執行緒池】執行緒
- 多執行緒--執行緒管理執行緒
- Java多執行緒——執行緒Java執行緒
- 執行緒與多執行緒執行緒
- Java 共享資料讀寫(多執行緒)Java執行緒
- Core Data:多執行緒大量資料同步執行緒
- DM7使用離線工具DMRMAN執行資料庫備份資料庫
- Android中Sqlite資料庫多執行緒併發問題AndroidSQLite資料庫執行緒
- 求助!關於多執行緒連線資料庫的問題執行緒資料庫
- VC多執行緒 C++ 多執行緒執行緒C++
- 多執行緒-執行緒控制之休眠執行緒執行緒
- 多執行緒-執行緒控制之加入執行緒執行緒
- 多執行緒-執行緒控制之禮讓執行緒執行緒
- 多執行緒-執行緒控制之中斷執行緒執行緒