MySQL下PID文件喪失的相干毛病的處理辦法。本站提示廣大學習愛好者:(MySQL下PID文件喪失的相干毛病的處理辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是MySQL下PID文件喪失的相干毛病的處理辦法正文
明天同事A找到我,說是Mysql server X的負載很高,查詢很慢。他本身搗鼓了一陣未果後,我們一路看了下。
[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有成績第一反響是重啟mysql server,囧!!o(╯□╰)
然則又應用了毛病的敕令
[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
發明成績後,他又想起來應當是用上面的敕令重啟
[root@redhat var]# service mysql restart ----操作② MySQL manager or server PID file could not be found! [FAILED] Starting MySQL......
CTRL+C撤消
這時候候
[root@redhat var]# ps aux | grep mysql
可以看到,體系又啟動了一個Mysql過程,然則過一會後,會主動消逝,這時候候看日記可以發明以下毛病:
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對象銜接,發明mysql正常。web運用銜接數據庫也正常只是查詢很慢。
其次我在敕令上面,銜接:
[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)
這時候候同事A提示我,可以重啟辦事沒緊要。囧,o(╯□╰)o,他在建議我重啟處理成績。
好吧,如他所願。因而我先:
[root@redhat var]# service mysql stop MySQL is running but PID file could not be found
然後去mysql data dir上面檢查,果真沒有pid file。
這時候候我的第一反響是設置裝備擺設文件纰謬,招致不克不及正常停滯和重啟。
因為server是好的,是以我沒有急著去比擬之前備份的/etc/my.cnf.bak和/etc/my.cnf。
我們先查找負載高的緣由。由於敕令行下沒法進入mysql,在client下應用
show processlist;
可以看到外面有許多locked的查詢,個中期待時光最久的一個是一個select查詢,顯示正在sending data,然後其他都是locked。
料想是sending data的線程占用了“一切的分派給mysql的資本”,招致後來的線程全體掛起,因為“查詢(線程)是順次履行的”,前面locked的線程一向在期待後面sending data的線程停止。(這一段是料想的…)
sending data的這個線程U是一個select 查詢,這個select對6張表停止了銜接(公司的一個練習生提交的一個查詢),個中有兩張表的數據量在10w閣下,別的有張data表數據量在 1000w閣下,別的還有sum(distinct ) ,group by,order by… 可以想象下…不曉得要到何年何月這個查詢能力履行完。
這個sending data的慢查詢的processid為799,應機立斷運轉
kill 799
然後再運轉
show processlist;
可以看到後面locked的線程在一個個順次履行,前面還有很多多少個跟線程U相似的select線程,全體kill失落後,被梗塞的其余正常的幾個Update,select,insert操作很快就履行完了。
爾後,web運用恢復正常,速度變快。
前往linux敕令行,應用
[root@redhat var]# top <shift+m 按內存應用排序> <1 顯示cpu應用情形>
這時候候可以發明server負載恢復正常。
上面處理沒法正常封閉重啟的情形。
也就是由於後面同事的誤操作惹起的
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]
的毛病。
我後面不是疑惑是設置裝備擺設文件外面有甚麼沒法辨認的參數選項麼。
經由過程
[root@redhat var]# diff /etc/my.cnf /etc/my.cnf.bak
發明,設置裝備擺設文件沒有成績。
#我的server的hostname,mysql pid文件默許名字為hostname.pid,假如沒有在/etc/my.cnf外面指定特定和pid filename和pid file path的話,這個文件是跟mysql數據在一路的。
[root@redhat var]# diff /etc/my.cnf /etc/my.cnf.bak
這時候候經由過程
#切換到mysql data dir(mysql的數據文件目次下) #你們的mysql data dir也許跟我的紛歧樣哦,我的是/var/lib/mysql/var/ [root@redhat var]# cd /var/lib/mysql/var/
獲得mysql用戶運轉的mysql過程的 pid,然後導入到hostname.pid文件外面
[root@redhat var]# echo `ps aux | grep mysql | grep "user=mysql" | grep -v "grep" | awk '{print $2}'`>> redhat.pid #留意這裡的redhat.pid跟hostname相干,這裡是我的hostname.pid
將文件的屬主和屬主組改成mysql:mysql
[root@redhat var]# chown mysql:mysql redhat.pid
然後運轉
[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)
[root@redhat var]# ls /tmp | grep sock
果真沒有mysql.sock這個文件
然則這時候候運轉
[root@redhat var]# service mysql status
顯示
MySQL running (10949) [ OK ]
恩,pid file文件恢復正常,然後運轉
[root@redhat var]# service mysql restart Shutting down MySQL. [ OK ] Starting MySQL. [ OK ]
這時候候再運轉
[root@redhat var]# ls /tmp | grep sock
可以發明重啟後,/tmp下有了mysql.sock這個文件。
年夜家可以搜刮下mysql.sock的用處和應用發生等等。
同事A的 操作① 招致pid 文件喪失, 操作② 招致mysql.sock文件喪失,年夜家感興致可以去vi mysqld劇本和server mysql劇本,然後招致service mysql status/stop/start/restart運轉異常,招致敕令行下mysql -u root -p登錄mysql異常。
That's all.