MySQL 删除 sock 文件并抱怨其权限

MySQL 删除 sock 文件并抱怨其权限

这个问题今天真的让我抓狂:

基本上,我从源代码(ARM 机器上的 Ubuntu 9.04 上的 MySQL 5.1.14)编译了 MySQL,当我尝试运行它时发生的情况如下:

/etc/init.d/mysql start
Starting MySQL.. * Manager of pid-file quit without updating file.

深入研究错误日志,我看到的是:

110826 18:00:21 mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/var
110826 18:00:22 [ERROR] Can't start server : Bind on unix socket: Permission denied
110826 18:00:22 [ERROR] Do you already have another mysqld server running on socket: /tmp/mysql.sock ?
110826 18:00:22 [ERROR] Aborting

110826 18:00:22 [Note] /usr/local/mysql/libexec/mysqld: Shutdown complete

110826 18:00:22 mysqld_safe mysqld from pid file /usr/local/mysql/var/Serv.pid ended

因此,这就是我尝试做的事情:

touch mysql.sock
chown mysql:mysql mysql.sock
chmod 1777 mysql.sock

一切似乎都很好:

ls -la | grep mysql.sock
-rwxrwxrwt  1 mysql mysql        0 2011-08-26 18:02 mysql.sock

但是你猜怎么着,每次我尝试重新启动 mySQL 时,都会发生同样的错误,而且似乎由于某种原因,sock 文件不见了。

我以 root 身份运行整个过程,因此权限应该没有问题。

有什么建议吗?谢谢!

答案1

chmod 1777 /tmp然后再试一次。

答案2

您确实不应该手动创建此文件,这不是普通文件,这是一个命名套接字,它应该在ls输出中列出,类似于srwxrwxrwx 1 mysql mysql 0 Aug 20 23:49 mysql.sock=。您确定没有在同一个套接字上启动另一个 mysqld 吗?

答案3

Ubuntu 是否设置为使用 SELinux、SMACK 或 AppArmor 等安全框架,需要修改这些框架才能运行您的自定义 mysql 实例?mysql 所需的数据库文件是否归 mysql 用户所有,因为 mysql 在运行时会放弃 root 权限?

顺便说一句,您尝试创建套接字文件是错误的,您创建的是常规文件而不是套接字,您需要使用 mksock 在文件系统中创建套接字文件。

相关内容