Can’t connect to local MySQL server through socket

來源:互聯網
上載者:User

標籤:MySQL server through

mysql,mysqldump,php串連mysql服務常會提示下面錯誤:


ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

 


產生此問題的原因一般有兩個:


1、mysql服務未正常運行:

由於mysql的socket檔案是由mysqld服務啟動時建立的,如果mysqld服務未正常啟動,socket檔案自然也不會被建立,當然會找不到socket檔案了。對於判斷mysql服務是否啟動,我們可以使用下面命令:


# 1、 連接埠是否開啟

[[email protected] ~]# lsof -i:3306

COMMAND   PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME

mysqld  12207 mysql   14u  IPv4  52350      0t0  TCP *:mysql (LISTEN)

 

# 2、mysqld服務是否正在運行

[[email protected] ~]# service mysqld status

mysqld (pid  4717) is running...

 


2、socket檔案路徑在設定檔中設定不完整:

這一般是由於我們修改了mysql配置“/etc/my.cnf”引起的。比如我們修改了設定檔中“[mysql]”選項下的“socket”參數,而未指定“[client]”、“[mysql]”選項的“socket”參數,導致mysql使用預設的socket檔案位置去尋找socket檔案,從而導致未找到socket檔案而引發此錯誤。


解決辦法:

下面是解決方案,更詳細的介紹可以參考:http://aiezu.com/article/mysql_cant_connect_through_socket.html


1、mysql服務未正常運行:

如果是服務未啟動,我們運行“service mysqld start”啟動服務即可。如果服務啟動不了,就去查看mysql服務日誌,尋找原因並解決再啟動

[[email protected] ~]# service mysqld start

Starting mysqld:                                           [  OK  ]

[[email protected] ~]# lsof -i:3306

COMMAND   PID  USER   FD   TYPE    DEVICE SIZE/OFF NODE NAME

mysqld  14109 mysql   10u  IPv4 247183583      0t0  TCP *:mysql (LISTEN)

[[email protected] ~]# service mysqld status

mysqld (pid  14109) is running...

 


2、完善mysql設定檔:

如果確認mysql服務正常運行,還提示文章標題的此錯誤,那就是“/etc/my.cnf”設定檔的問題了。解決辦法是修改“/etc/my.cnf”設定檔,在設定檔中添加“[client]”選項和“[mysql]”選項,並使用這兩個選項下的“socket”參數值,與“[mysqld]”選項下的“socket”參數值,指向的socket檔案路徑完全一致。如下:

[mysqld]

datadir=/storage/db/mysql

socket=/storage/db/mysql/mysql.sock

...省略n行(愛E族)...

 

[client]

default-character-set=utf8

socket=/storage/db/mysql/mysql.sock

 

[mysql]

default-character-set=utf8

socket=/storage/db/mysql/mysql.sock

 

其中socket等於的路徑就是socket檔案的位置,我們只要修改my.cnf檔案,告訴mysql,mysqldump,mysqladmin等命令,mysql服務的socket檔案位置在哪裡,然後重啟mysqld服務即可。


3、php串連mysql服務提示"Can't connect to local MySQL server through socket..."的解決方案

有時候mysql服務正常運行,使用者名稱密碼也完全正確,使用php的mysql_connect函數卻串連不了mysql,調用php的mysql_error()函數提示“Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock'”,這是我們需要修改/etc/php.ini檔案。

在/etc/php.ini檔案中"[MySQL]"項下找到"mysql.default_socket",並設定其值指向正確的mysql服務socket檔案即可,如:

[MySQL]

...省略n行...

mysql.default_socket = "/storage/db/mysql/mysql.sock"

 

4、python串連mysql提示"Can't connect to local MySQL server through socket..."的解決方案:

在串連mysql資料庫函數中指定socket檔案,如下:

#!/usr/bin/python

from MySQLdb import connect

conn = connect(db="pzy", user="root", host="localhost", unix_socket="/storage/db/mysql/mysql.sock")

cur = conn.cursor()

count=cur.execute("show databases")

print 'there has %s dbs' % count

conn.commit()

conn.close()

 

5. php pdo串連mysql提示"Can't connect to local MySQL server through socket..."的解決方案:

同樣在連接字串添加mysql socket檔案的位置即可,如下:

<?php

$dsn = "mysql:host=localhost;dbname=pzy;unix_socket=/storage/db/mysql/mysql.sock";

$db = new PDO($dsn, 'root', '');

$rs = $db->query("SELECT * FROM qrtest");

while($row = $rs->fetch()){

    print_r($row);

}

?>

要補充的地方是說這個mysql.sock檔案的位置    我的檔案是在/tmp/mysql.sock  但是開啟裡面是空的  

所以當時有一些疑惑   經過實驗 證明確實就是這個/tmp/mysql.sock  我的問題主要是php串連不上  

  mysql用戶端是可以的     然後改了 php.ini  重啟php-fpm就可以了  

 


Can’t connect to local MySQL server through socket

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.