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


8

我已经在Ubuntu 12.04上安装了MySQL服务器5.5。我正在尝试在其他袜子文件上启动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
    datadir = / 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 Dec 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:支持的最高文件格式是梭子鱼。
    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:支持的最高文件格式是梭子鱼。
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 [错误]您是否已经在套接字上运行了另一个mysqld服务器:/var/run/mysqld/mysqld1.sock?
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” operation =“ mknod” parent = 6702 profile =“ / usr / sbin / mysqld” name = “ /run/mysqld/mysqld1.sock” pid = 7039 comm =“ mysqld” request_mask =“ c” reject_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.检查/usr/local/mysql和的权限/tmp。至少需要为775。2. /var/lib/文件夹下的mysql数据库目录的权限应为mysql:rootchown mysql:root mysql
Rinzwind

1
我检查了权限,它们似乎很好。
user117844

还要检查/etc/apparmor.d/usr.sbin.mysqld有新旧版本之间的比较,在这里:bugs.launchpad.net/ubuntu/+source/mysql-5.1/+bug/876268/...
Rinzwind

Answers:


5

通过在日志的下一行中查看此行,似乎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,

感谢Rinzwind指出这一点。


哈!:D进行了一些搜索;)
Rinzwind

我已经改善了使用Apparmor 的本地更改目录的答案。通过避免与软件包管理一起使用,这在以后进行升级等操作时不太可能中断。
gertvdijk
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.