首先查看Zabbix Agent的日志,找到關鍵出錯信息,日志如下:
1 cat /var/log/zabbix/zabbix_server.log
由上圖log日志可見,顯示Zabbix Agent無法通過/var/lib/mysql/mysql.sock連接到本地數據庫服務器連接數據庫(但是理論Zabbix Agent是不會連接數據庫的)
1 mysql 2 mysql -h localhost 3 mysql -h 127.0.0.1
錯誤產生原因解析:
這是由於我們連接數據庫使用的主機名參數為“localhost”,或者未使用主機名參數、服務器默認使用“localhost”做為主機名。 使用主機名參數為“localhost”連接mysql服務端時,mysql客戶端會認為是連接本機,所以會嘗試以socket文件方式進行連接(socket文件連接方式,比“ip:端口”方式效率更高),這時根據配置文件“/etc/mysql.cnf”的路徑,未找到相應的socket文件,就會引發此錯誤。
由於這是一個socket文件,它的默認權限對其他用戶或用戶組是開發讀寫權限的。
1 ls -ll /var/lib/mysql
確定mysql服務正常運行后,產生此錯誤的原因只剩下“socket”文件路徑不正確了,我們可以使用“find”命令或者“lsof”命令來確定socket文件的正確路徑:
1 find / -name '*sock'
故障解決方法:
修改“/etc/my.cnf”配置文件,在/etc/php.ini文件中"[MySQL]"項下找到"mysql.default_socket",並設置其值指向正確的mysql服務socket文件即可, 在配置文件中添加“[client]”選項和“[mysql]”選項,並使用這兩個選項下的“socket”參數值,與“[mysqld]”選項下的“socket”參數值,指向的socket文件路徑完全一致。如下:
1 vi /etc/php.ini # 編輯php.ini
1 cat /etc/my.cnf # 查看my.cnf文件
1 vi /etc/my.cnf # 編輯my.cnf文件