我已经在 Ubuntu 12.04 上安装了 MySQL 服务器 5.5。我正在尝试在不同的 sock 文件上启动 MySQL 服务器。默认情况下,MySQL 在 /var/run/mysqld/mysqld.sock 上运行。
我试图在 /var/run/mysqld/mysqld1.sock 上运行相同的服务器。
为此,我进行了以下更改:
[客户]
端口 = 3306
socket = /var/run/mysqld/mysqld1.sock
[mysqld_safe]
socket = /var/run/mysqld/mysqld1.sock
不错 = 0
[mysqld]
用户 = mysql
pid-file = /var/run/mysqld/mysqld.pid
**socket = /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 Dec 31 17:24 mysqld
但是,当我尝试启动 MySQL 服务器时,出现以下错误(作为 root 用户)
$ mysqld --user=mysql --verbose
121231 18:40:56 [注意] 插件“联邦”被禁用。
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:支持的最高文件格式是梭子鱼。
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:关闭完成
如果我使用默认套接字文件启动服务器,我就可以启动服务器。我用谷歌搜索过这个问题,但只找到了表明它是权限问题的解决方案。但是权限似乎很好。有些人认为 AppArmor 可能是一个原因,但我也检查过 - 片段粘贴在上面。
有人可以提供一些线索吗?
[编辑]
我在/var/log/syslog.
Jan 2 12:09:34 praveshp-lt mysqld: 130102 12:09:34 [注意] 插件“联邦”被禁用。 Jan 2 12:09:34 praveshp-lt mysqld: 130102 12:09:34 InnoDB:InnoDB 内存堆被禁用 Jan 2 12:09:34 praveshp-lt mysqld: 130102 12:09:34 InnoDB:互斥锁和 rw_locks 使用 GCC 原子内置函数 Jan 2 12:09:34 praveshp-lt mysqld: 130102 12:09:34 InnoDB:压缩表使用 zlib 1.2.3.4 Jan 2 12:09:34 praveshp-lt mysqld:130102 12:09:34 InnoDB:初始化缓冲池,大小 = 128.0M Jan 2 12:09:34 praveshp-lt mysqld: 130102 12:09:34 InnoDB:缓冲池初始化完成 Jan 2 12:09:34 praveshp-lt mysqld: 130102 12:09:34 InnoDB:支持的最高文件格式是梭子鱼。 Jan 2 12:09:35 praveshp-lt mysqld:130102 12:09:35 InnoDB:等待后台线程启动 Jan 2 12:09:36 praveshp-lt mysqld:130102 12:09:36 InnoDB:1.1.8 启动;日志序列号 1595685 Jan 2 12:09:36 praveshp-lt mysqld: 130102 12:09:36 [注意] 服务器主机名(绑定地址):'127.0.0.1'; 端口:3307 Jan 2 12:09:36 praveshp-lt mysqld: 130102 12:09:36 [注意] - '127.0.0.1' 解析为 '127.0.0.1'; Jan 2 12:09:36 praveshp-lt mysqld: 130102 12:09:36 [注意] 在 IP 上创建的服务器套接字:'127.0.0.1'。 Jan 2 12:09:36 praveshp-lt mysqld: 130102 12:09:36 [错误] 无法启动服务器:绑定在 unix 套接字上:权限被拒绝 Jan 2 12:09:36 praveshp-lt mysqld: 130102 12:09:36 [错误] 您是否已经在套接字上运行了另一个 mysqld 服务器:/var/run/mysqld/mysqld1.sock? Jan 2 12:09:36 praveshp-lt mysqld: 130102 12:09:36 [错误] 中止 1 月 2 日 12:09:36 praveshp-lt mysqld: Jan 2 12:09:36 praveshp-lt mysqld: 130102 12:09:36 InnoDB:开始关闭... Jan 2 12:09:36 praveshp-lt 内核:[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" requests_mask="c" denied_mask="c" fsuid=116 ouid=116 Jan 2 12:09:36 praveshp-lt mysqld:130102 12:09:36 InnoDB:关闭完成;日志序列号 1595685 Jan 2 12:09:36 praveshp-lt mysqld: 130102 12:09:36 [注意] /usr/sbin/mysqld:关闭完成
它说权限被拒绝,但是我似乎设置了正确的权限。
通过查看日志中下一行中的这一行,似乎 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
Run Code Online (Sandbox Code Playgroud)
为此,请添加/etc/apparmor.d/local/usr.sbin.mysqld包含以下条目的文件,然后重新启动 MySQL。
/var/run/mysqld/mysqld1.sock w,
Run Code Online (Sandbox Code Playgroud)
感谢Rinzwind指出这一点。
| 归档时间: |
|
| 查看次数: |
28332 次 |
| 最近记录: |