MySQL Error Log 文件丟失致使The server quit without updating PID file啓動失敗的場景

 

今天在作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以後重啓,也能夠形成上述錯誤
html


重現方式以下:
1,對於正常運行的MySQL實例,直接刪除MySQL配置的errorlog文件
2,重啓MySQL實例,發現:The server quit without updating PID FILEmysql

解決辦法1:
step 1,手動生成mysql errorlog文件,errorlog文件名稱須要與配置文件中的配置名稱保持不一致
step 2,修改MySQL相關文件的權限,chown -R mysql:mysqlgit

解決辦法2:
1,簡單粗暴,直接修改MySQL配置文件中的用戶,以root用戶啓動
2,待MySQL實例啓動後,由於部分文件屬主是root,好比每次重啓都會從新生成的ibtmp1文件,修改MySQL相關文件的權限,chown -R mysql:mysql
3,修改配置文件中的user爲mysql,重啓實例github


最後,爲何刪除mysql的errorlog能夠致使mysql重啓的時候出現"The server quit without updating PID file"?
查閱了不少資料,瞭解了一下MySQL的啓動過程,我的推測大概以下
1,mysql實例啓動的過程當中須要往errorlog中寫入啓動信息,若是errorlog不存在,則啓動失敗
2,以root用戶啓動的時候,root用戶的權限更高,應該能夠建立errorlog
3,無論怎麼解決這個錯誤,最後必定要修改MySQL basedir的屬主。

sql

 

參考:測試

http://www.javashuo.com/article/p-mtbcsoda-m.htmlhttps://blog.csdn.net/wzl505/article/details/53322845
https://codar.club/blogs/5c2d75cca8b3b.html(太奇葩了,應該是翻譯軟件翻譯上面第一個的連接的內容的,看到這句話震驚了:Many children's shoes encountered this mistake when they started mysql.)
ui

 

另:this

MySQL 5.7版本下,mysql sniff死活抓不到當前實例請求的包數據,通過各類重啓,各類折騰仍是不行,最後發現mysql sniff已經對5.7不支持了
開源是把雙刃劍,別人的東西,沒問的時候,用起來爽歪歪,有了問題,又沒有源碼修改能力,就只能乾瞪眼了。
https://github.com/Qihoo360/mysql-sniffer/issues/32.net

相關文章
相關標籤/搜索