專案在上線之後,經常會有客戶反饋某個頁面查詢很慢,解決方案是我們找到對應的sql來分析索引問題,其實解決起來並不麻煩,但是給客戶造成的體驗就不好了,大部分執行效率比較差的語句應該是在開發或者測試階段就優化完成的,mysql提供了慢查詢日誌,預設是關閉的,可以通過my.cnf(my.ini)來配置開啟
log_slow_queries = /var/log/mysql/mysql-slow.log
long_query_time = 1
引數一眼就能看明白了,完了以後需要重啟mysql服務,根據配置,如果一條查詢語句執行時間超過1秒,就會在日誌檔案中記錄下來。
檔案有了,但是要求開發人員每天登入到伺服器上看那些語句執行慢肯定是不現實的,所以我通過郵件的形式把這個檔案發出來
linux上發郵件的工具有很多,我這裡用的是mutt,也是我跟sendmail比較之後覺得相對好用的,安裝很簡單
sudo apt-get install mutt
接下來就是傳送郵件,我是通過shell指令碼結合cron來定時傳送的,關於shell指令碼有個不錯的教程[url]指令碼如下
#!/bin/bash
file="/var/log/mysql/mysql-slow.log"
tmpfile="/home/b2b/logs/mysql-slow-result.log"
#create the $tmpfile
if [ ! -e $tmpfile ]
then echo "$tmpfile doesn't exist, will create it";touch $tmpfile
else > $tmpfile
fi#copy content from $file to $tmpfile
if [ -s $file ]
then cat $file > $tmpfile; > $file
fi#send email
if [ -s $tmpfile ]
then echo -e "hello administrator, \nthis is the slow query log from 192.168.0.169, please check it!" | mutt -s "slow query" -a $tmpfile -e "my_hdr from:pracbiz" -- wwyou@pracbiz.com; echo "slow query email send successfully"
else echo "no slow query logs need to send"
fi
指令碼會建立乙個臨時檔案mysql-slow-result.log,每次把mysql-slow.log內容拷貝到臨時檔案,然後把mysql-slow.log清空,最後把這個臨時檔案作為附件發出去,這樣做的好處時每次傳送的內容都是新生成的,如果日誌為空則不傳送郵件。
指令碼儲存為slowquery.sh,需要執行
sudo chmod +x slowquery.sh
讓指令碼可執行。
最後把任務新增到cron中
0 0 * * * /home/b2b/script/slowquery.sh
Linux上通過docker方式安裝mysql
docker版本資訊 mysql版本 5.7 1 docker方式安裝 首先拉取mysql映象 docker pull mysql 5.7 檢視本地的mysql映象 執行如下命令,執行mysql容器 docker run p 3307 3307 name mysql 3307 v data mysq...
linux通過shell指令碼傳送網路郵件
很多運維人員在做一些簡單監控的指令碼時,需要對監控內容能夠及時反饋,比如監控cpu使用率達到50 就會收到警告,這時候郵件起了很大的作用,那麼如何在shell指令碼中呼叫郵件工具呢,這裡有乙個簡便的方法 這時我們需要把登入資訊下如mail程式 在檔案 etc mail.rc中新增如下兩行 set f...
通過adb 傳送廣播
adb shell am broadcast options 作用 傳送乙個廣播 舉例 adb shell am broadcast a send by frank test 傳送乙個廣播send by frank test 舉例 adb shell am broadcast a android.i...