今天在做mysql sniff測驗的時候,中間重啟MySQL實體的程序中,出現了"The server quit without updating PID file"這個經典的錯誤,
因為把mysql sniff的日志檔案放在了mysql實體的目錄中,因此洗掉mysql sniff日志的時候無意中洗掉了mysql的errorlog檔案,
所以一開始懷疑這里出現的錯誤是mysql sniff行程在MySQL實體的datadir下寫資料導致的,各種嘗試重現都無法重現,
最后仔細回憶了一下錯誤最開始的一些操作,好似乎跟mysql的errorlog有關,嘗試后發現是洗掉MySQL的errorlog之后重啟,也可以造成上述錯誤
重現方式如下:
1,對于正常運行的MySQL實體,直接洗掉MySQL配置的errorlog檔案
2,重啟MySQL實體,發現:The server quit without updating PID FILE
解決辦法1:
step 1,手動生成mysql errorlog檔案,errorlog檔案名稱需要與組態檔中的配置名稱保持不一致
step 2,修改MySQL相關檔案的權限,chown -R mysql:mysql
解決辦法2:
1,簡單粗暴,直接修改MySQL組態檔中的用戶,以root用戶啟動
2,待MySQL實體啟動后,因為部分檔案屬主是root,比如每次重啟都會重新生成的ibtmp1檔案,修改MySQL相關檔案的權限,chown -R mysql:mysql
3,修改組態檔中的user為mysql,重啟實體
最后,為什么洗掉mysql的errorlog可以導致mysql重啟的時候出現"The server quit without updating PID file"?
查閱了很多資料,了解了一下MySQL的啟動程序,個人推測大概如下
1,mysql實體啟動的程序中需要往errorlog中寫入啟動資訊,如果errorlog不存在,則啟動失敗
2,以root用戶啟動的時候,root用戶的權限更高,應該可以創建errorlog
3,不管怎么解決這個錯誤,最后一定要修改MySQL basedir的屬主,
參考:
https://www.cnblogs.com/ivictor/p/6846017.html
https://blog.csdn.net/wzl505/article/details/53322845
https://codar.club/blogs/5c2d75cca8b3b.html(太奇葩了,應該是翻譯軟體翻譯上面第一個的鏈接的內容的,看到這句話震驚了:Many children's shoes encountered this mistake when they started mysql.)
另:
MySQL 5.7版本下,mysql sniff死活抓不到當前實體請求的包資料,經過各種重啟,各種折騰還是不行,最后發現mysql sniff已經對5.7不支持了
開源是把雙刃劍,別人的東西,沒問的時候,用起來爽歪歪,有了問題,又沒有原始碼修改能力,就只能干瞪眼了,
https://github.com/Qihoo360/mysql-sniffer/issues/32
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/114657.html
標籤:MySQL
上一篇:day 36
下一篇:mybatis中的分頁插件
