国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

MySQL下PID文件丟失的相關錯誤的解決方法

2024-07-24 13:07:38
字體:
來源:轉載
供稿:網友

這篇文章主要介紹了MySQL下PID文件丟失的相關錯誤的解決方法,具體的提示可能會是"mysql PID file not found and Can’t connect to MySQL through socket mysql.sock",需要的朋友可以參考下

今天同事A找到我,說是Mysql server X的負載很高,查詢很慢。他自己搗鼓了一陣未果后,我們一起看了下。

  1. [root@redhat var]# uname -a 
  2. 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 
  3.  
  4. [root@redhat var]# mysql -u root -p -e “select version();” 
  5. +------------+ 
  6. | version() | 
  7. +------------+ 
  8. | 5.1.32-log | 
  9. +------------+ 


同事A的操作:

A一看mysql server有問題第一反應是重啟mysql server,囧!!o(╯□╰)

但是又使用了錯誤的命令

 

 
  1. [root@redhat var]# /var/lib/mysql/libexec/mysqld restart ----操作① 
  2. 100708 14:43:53 [ERROR] Fatal error: Please read "Security" section of the manual to find out how to run mysqld as root! 
  3. 100708 14:43:53 [ERROR] Aborting 
  4. 100708 14:43:53 [Note] /var/lib/mysql/libexec/mysqld: Shutdown complete 

發現問題后,他又想起來應該是用下面的命令重啟

 

 
  1. [root@redhat var]# service mysql restart ----操作② 
  2. MySQL manager or server PID file could not be found! [FAILED] 
  3. Starting MySQL...... 

CTRL+C取消

這時候

 

 
  1. [root@redhat var]# ps aux | grep mysql 

可以看到,系統又啟動了一個Mysql進程,但是過一會后,會自動消失,這時候看日志可以發現以下錯誤:

 

 
  1. 100708 15:26:52 [ERROR] Can't start server: Bind on TCP/IP port: Address already in use 
  2. 100708 15:26:52 [ERROR] Do you already have another mysqld server running on port: 30017 ? 
  3. 100708 15:26:52 [ERROR] Aborting 

然后后面我們一起看。

首先我用client工具連接,發現mysql正常。web應用連接數據庫也正常只是查詢很慢。

其次我在命令下面,連接:

 

 
  1. [root@redhat var]# mysql -u root -p 

提示:

 

 
  1. Enter password: 
  2. ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) 

這時候同事A提醒我,可以重啟服務沒關系。囧,o(╯□╰)o,他在建議我重啟解決問題。

好吧,如他所愿。于是我先:

 

 
  1. [root@redhat var]# service mysql stop 
  2. 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命令行,使用

 

 
  1. [root@redhat var]# top 
  2. <shift+m 按內存使用排序> 
  3. <1 顯示cpu使用情況> 

這時候可以發現server負載恢復正常。

下面解決無法正常關閉重啟的情況。

也就是因為前面同事的誤操作引起的

 

 
  1. ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) 
  2. 和MySQL manager or server PID file could not be found! [FAILED] 

的錯誤。

我前面不是懷疑是配置文件里面有什么無法識別的參數選項么。

通過

 

 
  1. [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數據在一起的。

 

  1. [root@redhat var]# diff /etc/my.cnf /etc/my.cnf.bak 


這時候通過

 

 
  1. #切換到mysql data dir(mysql的數據文件目錄下) 
  2. #你們的mysql data dir或許跟我的不一樣哦,我的是/var/lib/mysql/var/ 
  3. [root@redhat var]# cd /var/lib/mysql/var

獲取mysql用戶運行的mysql進程的 pid,然后導入到hostname.pid文件里面

 

 
  1. [root@redhat var]# echo `ps aux | grep mysql | grep "user=mysql" | grep -v "grep" | awk '{print $2}'`>> redhat.pid 
  2. #注意這里的redhat.pid跟hostname相關,這里是我的hostname.pid 

將文件的屬主和屬主組改為mysql:mysql

 

 
  1. [root@redhat var]# chown mysql:mysql redhat.pid 

然后運行

 

 
  1. [root@redhat var]# mysql -u root -p 

還是會提示:

 

 
  1. Enter password: 
  2. ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) 

 

 
  1. [root@redhat var]# ls /tmp | grep sock 

果然沒有mysql.sock這個文件

但是這時候運行

 

 
  1. [root@redhat var]# service mysql status 

顯示

 

  
  1. MySQL running (10949) [ OK ] 

恩,pid file文件恢復正常,然后運行

 

 
  1. [root@redhat var]# service mysql restart 
  2. Shutting down MySQL. [ OK ] 
  3. Starting MySQL. [ OK ] 

這時候再運行

 

 
  1. [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.

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 澄城县| 含山县| 内丘县| 库车县| 龙州县| 噶尔县| 宁陵县| 文水县| 拉萨市| 红桥区| 永年县| 镇宁| 台中县| 平泉县| 东丽区| 遂溪县| 五华县| 阿尔山市| 隆林| 台江县| 诏安县| 肃宁县| 政和县| 孟州市| 商河县| 娱乐| 西乌珠穆沁旗| 牙克石市| 青浦区| 永康市| 无极县| 太仆寺旗| 东港市| 靖远县| 清苑县| 玉树县| 长丰县| 新乡市| 潮安县| 商水县| 余干县|