我在 Ubuntu 12.04 上安装了 MySQL 服务器 5.5。我尝试在不同的 sock 文件上启动 MySQL 服务器。默认情况下,MySQL 在 /var/run/mysqld/mysqld.sock 上运行。
我正在尝试在 /var/run/mysqld/mysqld1.sock 上运行同一个服务器。
为此我做了以下改变:
- /etc/mysql/my.cnf 的变更
[客户] 端口 = 3306 套接字 = /var/run/mysqld/mysqld1.sock [mysqld_safe] 套接字 = /var/run/mysqld/mysqld1.sock 好 = 0 [mysqld] 用户 = mysql pid 文件 = /var/run/mysqld/mysqld.pid **套接字 = /var/run/mysqld/mysqld1.sock** 端口 = 3306 basedir = /usr 数据目录 = /var/lib/mysql tmpdir = /tmp lc-messages-dir = /usr/share/mysql
我还将以下行添加到 /etc/apparmor.d/usr/sbin.mysqld
/var/run/mysqld/mysqld1.sock w,
/var/run/mysqld/mysqld[1-9].sock w,
我还将目录 /var/run/mysqld 的所有权更改为 mysql 用户。
ls -lA /var/run/|grep mysqld
drwxrwxrwx 2 mysql mysql 40 十二月 31 17:24 mysqld
但是当我尝试启动 MySQL 服务器时出现以下错误(以 root 用户身份)
$ mysqld --user=mysql --verbose 121231 18:40:56 [注意] 插件‘FEDERATED’已被禁用。 121231 18:40:56 InnoDB:InnoDB 内存堆已禁用 121231 18:40:56 InnoDB:互斥锁和 rw_locks 使用 GCC 原子内置函数 121231 18:40:56 InnoDB:压缩表使用 zlib 1.2.3.4 121231 18:40:56 InnoDB:初始化缓冲池,大小 = 128.0M 121231 18:40:56 InnoDB:缓冲池初始化已完成 121231 18:40:56 InnoDB:支持的最高文件格式是Barracuda。 121231 18:40:57 InnoDB:等待后台线程启动 121231 18:40:58 InnoDB:1.1.8 已启动;日志序列号 1595685 121231 18:40:58 [注意] 服务器主机名(绑定地址):'127.0.0.1';端口:3306 121231 18:40:58 [注意] - '127.0.0.1' 解析为 '127.0.0.1'; 121231 18:40:58 [注意] 在 IP '127.0.0.1' 上创建服务器套接字。 **`121231 18:40:58 [错误] 无法启动服务器:绑定在 unix 套接字上:权限被拒绝`** 121231 18:40:58 [错误] 您是否已在套接字上运行另一个 mysqld 服务器: /var/run/mysqld/mysqld1.sock? 121231 18:40:58 [错误] 正在中止** 121231 18:40:58 InnoDB:正在开始关闭... 121231 18:40:58 InnoDB:关闭完成;日志序列号 1595685 121231 18:40:58 [注] mysqld: 关闭完成
如果我使用默认套接字文件启动服务器,我就可以启动服务器。我已经在 Google 上搜索过这个问题,但只找到了建议这是权限问题的解决方案。但是权限似乎没问题。有人建议 AppArmor 可能是原因,但我也检查过了 - 代码片段粘贴在上面。
有人可以提供一些线索吗?
[编辑]
我在 中看到以下输出/var/log/syslog
。
1 月 2 日 12:09:34 praveshp-lt mysqld: 130102 12:09:34 [注意] 插件“FEDERATED”已被禁用。 1 月 2 日 12:09:34 praveshp-lt mysqld: 130102 12:09:34 InnoDB: InnoDB 内存堆已禁用 1 月 2 日 12:09:34 praveshp-lt mysqld:130102 12:09:34 InnoDB:互斥锁和 rw_locks 使用 GCC 原子内置函数 1 月 2 日 12:09:34 praveshp-lt mysqld: 130102 12:09:34 InnoDB: 压缩表使用 zlib 1.2.3.4 1 月 2 日 12:09:34 praveshp-lt mysqld:130102 12:09:34 InnoDB:初始化缓冲池,大小 = 128.0M 1 月 2 日 12:09:34 praveshp-lt mysqld: 130102 12:09:34 InnoDB: 完成缓冲池的初始化 1 月 2 日 12:09:34 praveshp-lt mysqld:130102 12:09:34 InnoDB:支持的最高文件格式是 Barracuda。 1 月 2 日 12:09:35 praveshp-lt mysqld: 130102 12:09:35 InnoDB:等待后台线程启动 1 月 2 日 12:09:36 praveshp-lt mysqld:130102 12:09:36 InnoDB:1.1.8 已启动;日志序列号 1595685 1 月 2 日 12:09:36 praveshp-lt mysqld:130102 12:09:36 [注意] 服务器主机名(绑定地址):'127.0.0.1';端口:3307 1 月 2 日 12:09:36 praveshp-lt mysqld:130102 12:09:36 [注] - '127.0.0.1' 解析为 '127.0.0.1'; 1 月 2 日 12:09:36 praveshp-lt mysqld:130102 12:09:36 [注意] 在 IP '127.0.0.1' 上创建服务器套接字。 1 月 2 日 12:09:36 praveshp-lt mysqld:130102 12:09:36 [错误] 无法启动服务器:绑定在 unix 套接字上:权限被拒绝 1 月 2 日 12:09:36 praveshp-lt mysqld:130102 12:09:36 [错误] 您是否已在套接字 /var/run/mysqld/mysqld1.sock 上运行另一个 mysqld 服务器? 1 月 2 日 12:09:36 praveshp-lt mysqld:130102 12:09:36 [错误] 中止 1 月 2 日 12:09:36 praveshp-lt mysqld: 1 月 2 日 12:09:36 praveshp-lt mysqld:130102 12:09:36 InnoDB:正在开始关闭... 1 月 2 日 12:09:36 praveshp-lt 内核:[7060.098580] 类型 = 1400 审核(1357108776.036:33):apparmor =“DENIED”操作 =“mknod”父级 = 6702 配置文件 =“/usr/sbin/mysqld”名称 =“/run/mysqld/mysqld1.sock”pid = 7039 comm =“mysqld”requested_mask =“c”denied_mask =“c”fsuid = 116 ouid = 116 1 月 2 日 12:09:36 praveshp-lt mysqld: 130102 12:09:36 InnoDB: 关闭完成;日志序列号 1595685 1 月 2 日 12:09:36 praveshp-lt mysqld: 130102 12:09:36 [注意] /usr/sbin/mysqld: 关闭完成
它说权限被拒绝,但我似乎已经设置了正确的权限。
答案1
通过查看日志中下一行的这一行,似乎 Apparmor 拒绝访问。
Jan 2 12:09:36 praveshp-lt kernel: [ 7060.098580] type=1400 audit(1357108776.036:33):
apparmor="DENIED" operation="mknod" parent=6702 profile="/usr/sbin/mysqld"
name="/run/mysqld/mysqld1.sock" pid=7039 comm="mysqld" requested_mask="c"
denied_mask="c" fsuid=116 ouid=116
为此,请添加一个/etc/apparmor.d/local/usr.sbin.mysqld
包含以下条目的文件,然后重新启动 MySQL。
/var/run/mysqld/mysqld1.sock w,
谢谢林兹温德指出这一点。