![MySQL 删除 sock 文件并抱怨其权限](https://linux22.com/image/559680/MySQL%20%E5%88%A0%E9%99%A4%20sock%20%E6%96%87%E4%BB%B6%E5%B9%B6%E6%8A%B1%E6%80%A8%E5%85%B6%E6%9D%83%E9%99%90.png)
这个问题今天真的让我抓狂:
基本上,我从源代码(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 在文件系统中创建套接字文件。