企業實踐題1:(生產實戰案例):監控MySQL主從同步是否異常,如果異常,則傳送簡訊或者郵件給管理員。提示:如果沒主從同步環境,可以用下面文本放到檔案裡讀取來類比:
階段1:開發一個守護進程指令碼每30秒實現檢測一次。
階段2:如果同步出現如下錯誤號碼(1158,1159,1008,1007,1062),則跳過錯誤。
階段3:請使用數組技術實現上述指令碼(擷取主從判斷及錯誤號碼部分)
mysql查看狀態語句
mysql>show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 10.0.0.42
Master_User: backup
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 538
Relay_Log_File: mysql-relay-bin.000002
Relay_Log_Pos: 701
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
使用MysqlCmd2 命令篩選後語句:
Yes
Yes
0
0
it
#!/bin/bashport=3306 error=(1158 1159 1008 1007 1062) #錯誤編號的數組MysqlCmd1= mysql -uroot -p192.168.51.9 -eMysqlCmd2= mysql -uroot -p192.168.51.9 -e"show slave status\G"|egrep "_Running|Last_Errno|Behind_Master"|awk '{print $NF}'
#檢查mysql是否運行function is_run(){ [ `lsof -i:$port|wc -l` -lt 2 ]&&{ echo"mysql is stop" exit 1 }}
#提取mysql slave狀態到數組arrayfunction mysql_status(){ array=(`$MysqlCmd2`) }
#判斷錯誤類型,是否是需要排除的那幾個錯誤編號function judge_error(){for i in ${error[*]}do if [ "${array[2]}" == "$i" ];then $MysqlCmd1"stop slave;SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;start slave;" else echo "mysql is failed,error id is ${array[2]}" fidone}
#判斷 mysql slave 狀態judge_status(){mysql_statusecho ${array[*]}if [ "${array[0]}" == "Yes" -a "${array[1]}" == "Yes" -a "${array[3]}" == "0" ];then echo "Mysql slave is ok"else judge_error ${array[2]}fi}
#主函數function main(){while true do is_run judge_status sleep 30 done}main
企業實踐題2:
使用for迴圈在/oldboy目錄下通過隨機小寫10個字母加固定字串oldboy大量建立10個html檔案,名稱例如為:
coaolvajcq_oldboy.html qnvuxvicni_oldboy.html
#!/bin/bash
dir=/oldboy
[ ! -d $dir ] && mkdir -p $dir
cd $dir
for((i=1;i<=10;i++ ))
do
a=`tr -dc "a-z" < /dev/urandom | head -c 10`_oldboy,html
touch $a
done
#tr -dc 的意思是,將字串中a到z 以外的字元提取並刪除