无法通过套接字“/var/run/mysqld/mysqld.sock”(2)在通过终端进行后续连接时连接到本地 MySQL 服务器

无法通过套接字“/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)

在线阅读服务器故障事实如下:

#/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

[编辑]

显然有 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 会安装 mysql-commons,/etc/mysql/my.cnf同时我已经创建了/etc/my.cnf

请就此问题提出建议,因为我不想犯错误并根据自己的假设运行命令。感谢您阅读本文。

答案1

好吧,这太乱了。
为了解决您的一些问题/疑问:

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

为什么您不能再通过登录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,您将获得与以前相同的行为。
这目前可行,但我建议将来改为从包中进行全新安装。

答案2

MySQL 服务器尚未安装dpkg,您需要使用apt-get install mysql-server

答案3

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

另外 - 永远不要复制套接字 - 最好创建符号链接:)

答案4

在终端中使用以下命令。

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 文件夹是否存在。如果不存在,请在运行该命令之前创建该文件夹。

相关内容