Ubuntu

在隨後通過終端連接時,無法通過套接字’/var/run/mysqld/mysqld.sock’ (2) 連接到本地 MySQL 伺服器

  • August 17, 2013

對於之前顯然已經回答過的問題,我深表歉意。我發布的事實是我想絕對確定,因為它是關於目前執行的實時伺服器。

這就是發生的事情。我不小心成為專用伺服器的系統管理員。機器上執行著tomcat,使用mysql作為數據庫。我在安裝 OpenCart 的過程中碰巧curl, gd and mysql 通過

apt-get install curl libcurl3 libcurl3-dev php5-curl
restart apache2
apt-get install php5-gd
restart apache2
apt-get install libapache2-mod-auth-mysql php5-mysql 
restart apache2

我之前聯繫過mysql -u<username> -p,一切都很好。現在它給了

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

線上閱讀和ServerFault這些是事實:

#/var/lib# /etc/init.d/mysqld start
-bash: /etc/init.d/mysqld: No such file or directory
#/var/lib# netstat -lntp | grep mysqld
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      29570/mysqld  
#/var/lib# ps -ef | grep mysqld
root     13684 13580  0 09:25 pts/3    00:00:00 grep mysqld
root     29321     1  0  2011 ?        00:00:00 /bin/sh bin/mysqld_safe --user=mysql
mysql    29570 29321  0  2011 ?        03:58:46 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/usr/local/mysql/data/server.host.com.err --pid-file=/usr/local/mysql/data/server.host.com.pid --socket=/tmp/mysql.sock --port=3306

/etc/mysql/my.cnf看起來像:

[client]
port            = 3306
socket          = /var/run/mysqld/mysqld.sock

[mysqld_safe]
socket          = /var/run/mysqld/mysqld.sock
nice            = 0

[mysqld]
user            = mysql
socket          = /var/run/mysqld/mysqld.sock
port            = 3306
basedir         = /usr
datadir         = /var/lib/mysql
tmpdir          = /tmp
skip-external-locking


dpkg -l | grep mysql
rc  libapache2-mod-auth-mysql       4.3.9-12ubuntu1              Apache 2 module for MySQL authentication
ii  libmysqlclient16                5.1.63-0ubuntu0.10.04.1      MySQL database client library
ii  mysql-common                    5.1.63-0ubuntu0.10.04.1      MySQL database common files (e.g. /etc/mysql
ii  php5-mysql                      5.3.2-1ubuntu4.17            MySQL module for php5

$$ EDIT $$

顯然有2個my.cnf文件

# ls -al /etc/my.cnf
-rw-r--r-- 1 root root 4715 2011-11-30 12:52 /etc/my.cnf
# ls -al /etc/mysql/my.cnf 
-rw-r--r-- 1 root root 3564 2012-06-11 14:11 /etc/mysql/my.cnf

下面是配置/etc/my.cnf

[client]
#password       = your_password
port            = 3306
socket          = /tmp/mysql.sock

# The MySQL server
[mysqld]
datadir         =/usr/local/mysql/data
port            = 3306
socket          = /tmp/mysql.sock

`/usr/local/mysql/ 的內容如下

/usr/local/mysql# ls -l
total 80
drwxr-xr-x  2 root  root  4096 2011-11-30 07:56 bin
-rw-r--r--  1 root  root 17987 2011-10-12 12:10 COPYING
drwx------ 11 mysql root  4096 2012-08-21 07:43 data
-rw-------  1 root  root   346 2011-11-30 13:09 DEADJOE
drwxr-xr-x  2 root  root  4096 2011-11-30 07:55 docs
drwxr-xr-x  3 root  root  4096 2011-11-30 07:55 include
-rw-r--r--  1 root  root  7604 2011-10-12 12:10 INSTALL-BINARY
drwxr-xr-x  3 root  root  4096 2011-11-30 07:56 lib
drwxr-xr-x  4 root  root  4096 2011-11-30 07:55 man
drwxr-xr-x 10 root  root  4096 2011-11-30 07:56 mysql-test
-rw-r--r--  1 root  root  2552 2011-10-12 12:10 README
drwxr-xr-x  2 root  root  4096 2011-11-30 07:56 scripts
drwxr-xr-x 27 root  root  4096 2011-11-30 07:56 share
drwxr-xr-x  4 root  root  4096 2011-11-30 07:56 sql-bench
drwxr-xr-x  2 root  root  4096 2011-11-30 07:55 support-files

裡面沒有 mysqld.sock/var/run/mysqld也沒有/var/lib/mysql但是有 /usr/local/mysql/data包含 mysql 數據和/tmp/mysqld.sock

那麼,我在這裡有什麼選擇?

步驟 1備份/etc/mysql/my.cnf

步驟 2 移除/etc/mysql/my.cnf

第4步調用/etc/init.d/mysql start(實際上mysql.server在/etc/init.d/中沒有mysql,我對這個完全困惑)

所以如果我理解得很好。安裝 php5-mysql 安裝了/etc/mysql/my.cnf同時創建的 mysql-commons 我已經有了/etc/my.cnf

請就這個問題提出建議,因為我不想犯錯誤並根據自己的假設執行命令。感謝您閱讀本文。

好吧,這是一團糟。

要解決您的一些問題/疑問:

為什麼tomcat還能正常執行?

Tomcat 可能通過網路而不是通過套接字連接。

mysqld 在執行時也不會重新讀取 my.cnf。

失去/移動的數據目錄將在下次重新啟動時出現問題,而不是在執行時。

為什麼你不能再登錄mysql -u ...了?

您現在有 2 個 my.cnf 文件。

文件的順序很重要,mysql會先讀取/etc/my.cnf,然後/etc/mysql/my.cnf. 如果在兩個位置都定義了選項,則最後一個將獲勝(http://dev.mysql.com/doc/refman/5.1/en/option-files.html)。

你現在有什麼選擇?

如果您刪除/etc/mysql/my.cnf或將其內容替換為/etc/my.cnf,您將具有與以前相同的行為。

這暫時可行,但我建議將來從軟體包更改為全新安裝。

引用自:https://serverfault.com/questions/419608