MySQL下PID文件丟失的相關(guān)錯(cuò)誤的解決方法
今天同事A找到我,說是Mysql server X的負(fù)載很高,查詢很慢。他自己搗鼓了一陣未果后,我們一起看了下。
[root@redhat var]# uname -a Linux xxx 2.6.18-128.el5 #1 SMP Wed Dec 17 11:41:38 EST 2008 x86_64 x86_64 x86_64 GNU/Linux [root@redhat var]# mysql -u root -p -e “select version();” +------------+ | version() | +------------+ | 5.1.32-log | +------------+
同事A的操作:
A一看mysql server有問題第一反應(yīng)是重啟mysql server,囧??!o(╯□╰)
但是又使用了錯(cuò)誤的命令
[root@redhat var]# /var/lib/mysql/libexec/mysqld restart ----操作① 100708 14:43:53 [ERROR] Fatal error: Please read "Security" section of the manual to find out how to run mysqld as root! 100708 14:43:53 [ERROR] Aborting 100708 14:43:53 [Note] /var/lib/mysql/libexec/mysqld: Shutdown complete
發(fā)現(xiàn)問題后,他又想起來應(yīng)該是用下面的命令重啟
[root@redhat var]# service mysql restart ----操作② MySQL manager or server PID file could not be found! [FAILED] Starting MySQL......
CTRL+C取消
這時(shí)候
[root@redhat var]# ps aux | grep mysql
可以看到,系統(tǒng)又啟動(dòng)了一個(gè)Mysql進(jìn)程,但是過一會(huì)后,會(huì)自動(dòng)消失,這時(shí)候看日志可以發(fā)現(xiàn)以下錯(cuò)誤:
100708 15:26:52 [ERROR] Can't start server: Bind on TCP/IP port: Address already in use 100708 15:26:52 [ERROR] Do you already have another mysqld server running on port: 30017 ? 100708 15:26:52 [ERROR] Aborting
然后后面我們一起看。
首先我用client工具連接,發(fā)現(xiàn)mysql正常。web應(yīng)用連接數(shù)據(jù)庫也正常只是查詢很慢。
其次我在命令下面,連接:
[root@redhat var]# mysql -u root -p
提示:
Enter password: ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
這時(shí)候同事A提醒我,可以重啟服務(wù)沒關(guān)系。囧,o(╯□╰)o,他在建議我重啟解決問題。
好吧,如他所愿。于是我先:
[root@redhat var]# service mysql stop MySQL is running but PID file could not be found
然后去mysql data dir下面查看,果然沒有pid file。
這時(shí)候我的第一反應(yīng)是配置文件不對,導(dǎo)致不能正常停止和重啟。
由于server是好的,因此我沒有急著去比較以前備份的/etc/my.cnf.bak和/etc/my.cnf。
我們先查找負(fù)載高的原因。因?yàn)槊钚邢聼o法進(jìn)入mysql,在client下使用
可以看到里面有很多l(xiāng)ocked的查詢,其中等待時(shí)間最久的一個(gè)是一個(gè)select查詢,顯示正在sending data,然后其余都是locked。
猜想是sending data的線程占用了“所有的分配給mysql的資源”,導(dǎo)致后來的線程全部掛起,由于“查詢(線程)是依次執(zhí)行的”,后面locked的線程一直在等待前面sending data的線程結(jié)束。(這一段是猜想的…)
sending data的這個(gè)線程U是一個(gè)select 查詢,這個(gè)select對6張表進(jìn)行了連接(公司的一個(gè)實(shí)習(xí)生提交的一個(gè)查詢),其中有兩張表的數(shù)據(jù)量在10w左右,另外有張data表數(shù)據(jù)量在 1000w左右,另外還有sum(distinct ) ,group by,order by… 可以想象下…不知道要到何年何月這個(gè)查詢才能執(zhí)行完。
這個(gè)sending data的慢查詢的processid為799,當(dāng)機(jī)立斷運(yùn)行
然后再運(yùn)行
可以看到前面locked的線程在一個(gè)個(gè)依次執(zhí)行,后面還有好多個(gè)跟線程U類似的select線程,全部kill掉后,被堵塞的別的正常的幾個(gè)Update,select,insert操作很快就執(zhí)行完了。
而后,web應(yīng)用恢復(fù)正常,速度變快。
返回linux命令行,使用
[root@redhat var]# top <shift+m 按內(nèi)存使用排序> <1 顯示cpu使用情況>
這時(shí)候可以發(fā)現(xiàn)server負(fù)載恢復(fù)正常。
下面解決無法正常關(guān)閉重啟的情況。
也就是因?yàn)榍懊嫱碌恼`操作引起的
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) 和MySQL manager or server PID file could not be found! [FAILED]
的錯(cuò)誤。
我前面不是懷疑是配置文件里面有什么無法識(shí)別的參數(shù)選項(xiàng)么。
通過
[root@redhat var]# diff /etc/my.cnf /etc/my.cnf.bak
發(fā)現(xiàn),配置文件沒有問題。
#我的server的hostname,mysql pid文件默認(rèn)名字為hostname.pid,如果沒有在/etc/my.cnf里面指定特定和pid filename和pid file path的話,這個(gè)文件是跟mysql數(shù)據(jù)在一起的。
[root@redhat var]# diff /etc/my.cnf /etc/my.cnf.bak
這時(shí)候通過
#切換到mysql data dir(mysql的數(shù)據(jù)文件目錄下) #你們的mysql data dir或許跟我的不一樣哦,我的是/var/lib/mysql/var/ [root@redhat var]# cd /var/lib/mysql/var/
獲取mysql用戶運(yùn)行的mysql進(jìn)程的 pid,然后導(dǎo)入到hostname.pid文件里面
[root@redhat var]# echo `ps aux | grep mysql | grep "user=mysql" | grep -v "grep" | awk '{print $2}'`>> redhat.pid #注意這里的redhat.pid跟hostname相關(guān),這里是我的hostname.pid
將文件的屬主和屬主組改為mysql:mysql
[root@redhat var]# chown mysql:mysql redhat.pid
然后運(yùn)行
[root@redhat var]# mysql -u root -p
還是會(huì)提示:
Enter password: ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
[root@redhat var]# ls /tmp | grep sock
果然沒有mysql.sock這個(gè)文件
但是這時(shí)候運(yùn)行
[root@redhat var]# service mysql status
顯示
MySQL running (10949) [ OK ]
恩,pid file文件恢復(fù)正常,然后運(yùn)行
[root@redhat var]# service mysql restart Shutting down MySQL. [ OK ] Starting MySQL. [ OK ]
這時(shí)候再運(yùn)行
[root@redhat var]# ls /tmp | grep sock
可以發(fā)現(xiàn)重啟后,/tmp下有了mysql.sock這個(gè)文件。
大家可以搜索下mysql.sock的用途以及使用產(chǎn)生等等。
同事A的 操作① 導(dǎo)致pid 文件丟失, 操作② 導(dǎo)致mysql.sock文件丟失,大家感興趣可以去vi mysqld腳本和server mysql腳本,然后導(dǎo)致service mysql status/stop/start/restart運(yùn)行異常,導(dǎo)致命令行下mysql -u root -p登錄mysql異常。
That's all.
- MySQL 數(shù)據(jù)丟失排查案例
- MySQL 丟失數(shù)據(jù)的原因及解決
- 解決docker重啟redis,mysql數(shù)據(jù)丟失的問題
- MySQL使用Replace操作時(shí)造成數(shù)據(jù)丟失的問題解決
- Python3.6-MySql中插入文件路徑,丟失反斜杠的解決方法
- Mysql掛掉后無法重啟報(bào)pid文件丟失的解決方法
- 使用SKIP-GRANT-TABLES 解決 MYSQL ROOT密碼丟失
- 防止服務(wù)器宕機(jī)時(shí)MySQL數(shù)據(jù)丟失的幾種方案
- MySQL遠(yuǎn)程連接丟失問題解決方法(Lost connection to MySQL server)
- 記一次mysql字符串末尾空白丟失的排查
相關(guān)文章
MySQL的id關(guān)聯(lián)和索引使用的實(shí)際優(yōu)化案例
這篇文章主要介紹了MySQL的id關(guān)聯(lián)實(shí)際優(yōu)化案例,關(guān)聯(lián)和索引一直是MySQL常見的可優(yōu)化大塊兒,需要的朋友可以參考下2015-05-05phpmyadmin報(bào)錯(cuò):#2003 無法登錄 MySQL服務(wù)器的解決方法
通過phpmyadmin連接mysql數(shù)據(jù)庫時(shí)提示:“2003 無法登錄 MySQL服務(wù)器”。。。很明顯這是沒有啟動(dòng)mysql服務(wù),右擊我的電腦-管理-找到服務(wù),找到mysql啟動(dòng)一下2012-04-04解決MySQL8.0 輸入無誤仍然提示Access denied問題
這篇文章主要介紹了解決MySQL8.0 輸入無誤仍然提示Access denied問題,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-05-05Windows環(huán)境下MySQL 8.0 的安裝、配置與卸載
這篇文章主要介紹了Windows環(huán)境下MySQL 8.0 的安裝、配置與卸載步驟,本文分步驟給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-09-09mysql-8.0.15-winx64 使用zip包進(jìn)行安裝及服務(wù)啟動(dòng)后立即關(guān)閉問題
這篇文章主要介紹了mysql 使用zip包進(jìn)行安裝以及服務(wù)啟動(dòng)后立即關(guān)閉問題 ,本實(shí)例使用的mysql版本為mysql-8.0.15-winx64,需要的朋友可以參考下2019-05-05delete、truncate、drop的區(qū)別以及該如何選擇
這篇文章主要給大家介紹了關(guān)于delete、truncate、drop的區(qū)別以及該如何選擇的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11MySQL數(shù)據(jù)庫數(shù)據(jù)刪除操作詳解
本文我們將要學(xué)習(xí)的是作為刪除數(shù)據(jù)使用的?“DELETE”?語句,“DELETE”?語句是用來刪除數(shù)據(jù)的,它不能用來刪除數(shù)據(jù)表本身。刪除數(shù)據(jù)表使用的是?“DROP”?語句,而?“DELETE”?的作用只是用來刪除記錄而已2022-08-08史上最簡單的MySQL數(shù)據(jù)備份與還原教程(上)(三十五)
這篇文章主要為大家詳細(xì)介紹了史上最簡單的MySQL數(shù)據(jù)備份與還原教程第一篇,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-10-10mysql數(shù)據(jù)庫備份設(shè)置延時(shí)備份方法(mysql主從配置)
這篇文章主要介紹了mysql數(shù)據(jù)庫延時(shí)備份的方法,也就是mysql主從服務(wù)器備份,可以同步到多個(gè)服務(wù)器,最后我們提供了一個(gè)備份腳本,大家參考使用吧2013-12-12MySQL 與 Elasticsearch 數(shù)據(jù)不對稱問題解決辦法
這篇文章主要介紹了MySQL 與 Elasticsearch 數(shù)據(jù)不對稱問題解決辦法的相關(guān)資料,對于 elasticsearch 增量寫入,但經(jīng)常jdbc源一端的數(shù)據(jù)庫可能會(huì)做數(shù)據(jù)庫刪除或者更新操作,這里提供解決辦法,需要的朋友可以參考下2017-08-08