我真诚地为问一个显然之前已经回答过的问题而道歉。我发帖是因为我想绝对确定,因为这是关于目前正在运行的实时服务器。
事情是这样的。我偶然成为了专用服务器的系统管理员。机器上运行着 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 文件夹是否存在。如果不存在,请在运行该命令之前创建该文件夹。