在隨後通過終端連接時,無法通過套接字’/var/run/mysqld/mysqld.sock’ (2) 連接到本地 MySQL 伺服器
對於之前顯然已經回答過的問題,我深表歉意。我發布的事實是我想絕對確定,因為它是關於目前執行的實時伺服器。
這就是發生的事情。我不小心成為專用伺服器的系統管理員。機器上執行著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
,您將具有與以前相同的行為。這暫時可行,但我建議將來從軟體包更改為全新安裝。