通过terminal的后续连接,无法通过套接字'/var/run/mysqld/mysqld.sock'(2)连接到本地MySQL服务器

我诚挚的道歉,提出一些明显的答案。 我发布的事实是,我想绝对确定,因为它是关于一个正在运行的现场服务器。

这是发生了什么事。 我不小心是专用服务器的系统pipe理员。 在机器上运行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 (eg /etc/mysql ii php5-mysql 5.3.2-1ubuntu4.17 MySQL module for php5 

[编辑]

显然有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的configuration

 [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 

/var/run/mysqld没有mysqld.sock,没有/var/lib/mysql但是/usr/local/mysql/data包含mysql数据和/tmp/mysqld.sock

那么,我在这里有什么select?

第一步备份/etc/mysql/my.cnf

第2步删除/etc/mysql/my.cnf

第四步调用/etc/init.d/mysql start(实际上mysql.server中的/etc/init.d/中没有mysql,对此完全不知所措)

所以如果我理解的很好。 安装php5-mysql安装了mysql-commons,里面创build了/etc/mysql/my.cnf同时我已经有了/etc/my.cnf

请告诉我这个问题,因为我不想犯我犯的错误和运行命令。 感谢您阅读此。

好吧,这是一团糟。
为了解决您的一些问题/问题:

为什么tomcat仍然运行正常?
Tomcat可能通过networking而不是通过套接字连接。
此外,mysqld在运行时不会重新读取my.cnf。
丢失/移动的datadir将在下一次重新启动时出现问题,而不是在运行时。

为什么不能通过mysql -u ...login?
你现在有2个my.cnf文件。
文件的顺序很重要,mysql会首先读取/etc/my.cnf ,然后读取/etc/mysql/my.cnf 。 如果在两个位置都定义了选项,则最后一个将获胜( http://dev.mysql.com/doc/refman/5.1/en/option-files.html )。

你现在有什么select?
如果你删除/etc/mysql/my.cnf ,或者用/etc/my.cnfreplace它的内容,你将会和以前一样。
这将现在工作,但我会build议在未来从包改变到一个干净的安装。

根据dpkg ,MySQL服务器还没有安装,需要使用apt-get install mysql-server

正如@faker所说的,/etc/init.d/mysql.server和/ usr / local / mysql表示你的Mysql Server是从源代码安装的。 如果你有与Ubuntu兼容的脚本(如debian启动脚本升级,启动修复表等)的漂亮的MySQL二进制文件,维护编译的mysql实例是不值得的。

另外 – 不要复制套接字 – 最好做符号链接:)

在terminal中使用以下命令。

 sudo ln -s {your current .sock location} {path in the error} 

例如

 sudo ln -s /opt/lampp/var/mysql/mysql.sock /var/run/mysqld/mysqld.sock 

这将纠正错误。

注意:在运行此命令之前,您必须检查mysqld文件夹是否存在。 如果不存在,请在运行命令之前创build文件夹。