1. 程式人生 > >mysql報錯排查總結

mysql報錯排查總結

port ror 一個 服務 span -h gre server 恢復數據

mysql報錯:

[root@zabbix ~]# mysql ERROR 2002 (HY000): Can‘t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock‘ (2)

問題排查總結:

問題1: mysqld 守護進程是否啟動

解決: [root@zabbix mysql]# service mysqld start Starting mysqld: [ OK ] [root@zabbix mysql]# /etc/init.d/mysqld status mysqld (pid 2767) is running... ---成功啟動--->解決! --啟動失敗--->問題2 [root@zabbix mysql]# /etc/init.d/mysqld start MySQL Daemon failed to start. Starting mysqld: [FAILED] [root@zabbix ~]# /etc/rc.d/init.d/mysqld status mysqld is stopped

問題2:
由於異常退出,導致產生了mysql僵屍進程

再次啟動時失敗, 解決: 清除/var/run/mysql/下的僵屍進程 mysqld.pid 和 /var/lock/subsys/mysqld 文件 [root@zabbix mysqld]# ll /var/lock/subsys/mysqld -rw-r--r--. 1 root root 0 Sep 15 22:17 /var/lock/subsys/mysqld

問題3:/var/lib/mysql/ 日誌目錄滿了

解決: 刪除目錄下的文件,
或者修改my.cnf配置文件,關閉日誌輸出

問題4: 配置文件/etc/my.cnf 的 socket 路徑不對

不是 /tmp/mysql.sock
[root@zabbix mysql]# egrep -i socket /etc/my.cnf socket = /var/lib/mysql/mysql.sock socket = /var/lib/mysql/mysql.sock # All interaction with mysqld must be made via Unix sockets or named pipes.
解決: 創建軟連接到對應文件或修改配置文件的socket路徑
ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock

問題5:mysql 的進程運行目錄不存在,或被刪除

解決: [root@zabbix mysql]# mkdir /var/run/mysqld [root@zabbix mysql]# chmod 777 /var/run/mysqld/

問題6:權限問題,對應目錄的權限

[root@zabbix mysql]# chmod 777 /var/lib/mysql

問題7:關閉SElinux

[root@zabbix mysqld]# setenforce 0 ....

進程相關知識補充

var/lib/mysql

這些是mysql 的log文件,需要有什麽事故的時候可以用這些文件來恢復數據,但是用到的時候會很少,可以修改配置文件不生成bin-log文件,默認的配置文件為my-huge.cnf 在你的/var/lib/mysql/support-files/目錄下,vi my-huge.cnf 搜索log-bin 在前面加#號註釋掉後就不會產生,log-bin文件了。

/var/lock/subsys作用

關於/var/lock/subsys目錄 總的來說,系統關閉的過程(發出關閉信號,調用服務自身的進程)中會檢查/var/lock/subsys 下的文件,逐一關閉每個服務,如果某一運行的服務在/var/lock/subsys下沒有相應的選項。在系統關閉的時候,會像殺死普通進程一樣殺死這個服務。 通過察看/etc/rc.d/init.d下的腳本,可以發現每個服務自己操縱時都會去查看/var/lock/subsys下相應的服務。 很多程序需要判斷是否當前已經有一個實例在運行,這個目錄就是讓程序判斷是否有實例運行的標誌,比如說xinetd,如果存在這個文件,表示已 經有xinetd在運行了,否則就是沒有,當然程序裏面還要有相應的判斷措施來真正確定是否有實例在運行。 通常與該目錄配套的還有/var/run目錄,用來存放對應實例的PID,如果你寫腳本的話,會發現這2個目錄結合起來可以很方便的判斷出許多服務 是否在運行,運行的相關信息等等。 實際上,判斷是否上鎖就是判斷這個文件,所以文件存在與否也就隱含了是否上鎖。而這個目錄的內容並不能表示一定上鎖了,因為很多服務在啟 動腳本裏用touch來創建這個加鎖文件,在系統結束時該腳本負責清除鎖,這本身就不可靠(比如意外失敗導致鎖文件仍然存在),我在腳本裏一般是結 合PID文件(如果有PID文件的話),從PID文件裏得到該實例的PID,然後用ps測試是否存在該PID,從而判斷是否真正有這個實例在運行,更加穩妥 的方法是用進程通訊了,不過這樣的話單單靠腳本就做不到了。

mysql報錯排查總結