Ubuntu 11.04 - 无法通过套接字'/var/run/mysqld/mysqld.sock' (13) 连接到本地MySQL服务器

8

我已经谷歌了两天,最初得到的是

'/var/run/mysqld/mysqld.sock' (2)

我用以下方法解决了这个问题:
sudo touch /var/run/mysqld/mysqld.sock
sudo chown -R mysql /var/run/mysqld/

现在我遇到了错误:

 '/var/run/mysqld/mysqld.sock' (13)

所以所有权限都正确,文件也存在。有什么想法吗?

[编辑]

已经解决了,尽管我不确定是怎么做到的。我以root身份运行了aa-logprof,没有改变任何内容,然后有点生气地重新设置它,结果开始工作了。

4个回答

6
在我的情况下,运行mysqld_safe创建了一个新的mysqld.sock文件。
$ cd /etc/init.d/
$ mysqld_safe

你可能无法再次看到提示,但是如果你重新启动会话,就会生成一个mysqld.sock文件。使用以下命令查找它:

$ sudo find / -type s | grep mysqld.sock

很好,我得到了这个错误(我猜)是因为我取消了一个巨大的表的alter操作,我没有找到任何锁文件,但mysqld_safe解决了这个问题!谢谢。 - porfiriopartida

5

您绝对不能用普通文件替换文件系统管道/var/run/mysqld/mysql.sock。您需要使用mkfifo(1)创建客户端与mysql服务器通信的pipe(7)

(13)可能也意味着您遇到了权限被拒绝的错误返回,即EACCES(通常具有十进制值13 - 是的,我见过很多次)。

如果文件系统权限已正确配置,则可能会因强制访问控制工具(如AppArmorSELinuxTOMOYOSMACK)而被拒绝访问。

AppArmor 默认预安装在 Ubuntu 系统上,可能会拒绝访问管道。请检查 /var/log/syslog/var/log/audit/audit.logdmesg(1) 输出的消息,看起来像这样:

type=AVC msg=audit(1320723925.179:45115): apparmor="DENIED"
operation="open" parent=1 profile="/usr/sbin/ntop"
name="/usr/share/ntop/html/PlotKit/excanvas.js" pid=1835 comm="ntop"
requested_mask="r" denied_mask="r" fsuid=122 ouid=0

(但是使用name=/var/run/mysqld/mysql.sock代替。)
如果你遇到了这样的错误信息,请以root身份运行aa-logprof并回答问题。关于配置AppArmor的更多信息可以在apparmor.d(5)手册页面或一些各种维基页面中找到。

111104 11:54:40 [注意] 插件 'FEDERATED' 已禁用。 111104 11:54:40 InnoDB: 初始化缓冲池,大小为8.0M 111104 11:54:40 InnoDB: 缓冲池初始化完成 111104 11:54:43 InnoDB: 启动;日志序列号为0 44233 111104 11:54:44 [注意] 事件调度器:已加载0个事件 111104 11:54:44 [注意] /usr/sbin/mysqld:已准备好连接。 版本:'5.1.54-1ubuntu4' 套接字:'/var/run/mysqld/mysqld.sock' 端口:3306 (Ubuntu) - Jamie Hutber
嘿,这看起来像是一个改进;111 表示 "Connection refused"。在重新创建 socket 后,你是否重启了服务器?服务器是否配置使用该路径名? - sarnold
当我找不到问题的根本原因时,我总是有同样不满意的感觉。 :( 不过,我很高兴它现在能正常工作了。 - sarnold
1
mysql.sock不是管道/命名管道,而是本地Unix套接字。您无法创建它,MySQL服务器在启动时必须创建它(如果目录权限有误,或者服务器在客户端查找位置之外的某个目录中创建套接字,则可能不会创建)。 - nos
1
在运行rsync命令恢复根文件系统下某些文件夹的部分备份(例如:rsync -avc ${SOME_RESTORE_DIR}/ /,但不包括/var/lib/mysql)后,我遇到了类似的问题。在我的情况下,此操作后/的权限被设置为700,这导致mysqld无法启动。为了解决这个问题,我不得不执行chmod 755 /并重新启动mysqld。如果没有发现这个问题,这可能也会在服务器上引起许多问题;-) - TrinitronX
显示剩余7条评论

0
你检查过mysql服务器mysqld是否正在运行了吗?另外,检查系统消息日志,看看它是否在抱怨什么。

它曾经运行过,但目前无法启动。请看下面的评论。 - Jamie Hutber

0
你尝试过删除.lock文件并重新启动mysqld吗?

这个 .lock 文件会在哪里呢? - Jamie Hutber

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接