如果 /etc/mysql/my.cnf 中的 .sock 文件发生更改,则无法启动 MySQL 服务器

如果 /etc/mysql/my.cnf 中的 .sock 文件发生更改,则无法启动 MySQL 服务器

我在 Ubuntu 12.04 上安装了 MySQL 服务器 5.5。我尝试在不同的 sock 文件上启动 MySQL 服务器。默认情况下,MySQL 在 /var/run/mysqld/mysqld.sock 上运行。

我正在尝试在 /var/run/mysqld/mysqld1.sock 上运行同一个服务器。

为此我做了以下改变:

  1. /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
  1. 我还将以下行添加到 /etc/apparmor.d/usr/sbin.mysqld

    /var/run/mysqld/mysqld1.sock w,

    /var/run/mysqld/mysqld[1-9].sock w,

  2. 我还将目录 /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,

谢谢林兹温德指出这一点。

相关内容