Не удается запустить сервер MySQL, если файл .sock изменен в /etc/mysql/my.cnf

8

Я установил MySQL сервер 5.5 на Ubuntu 12.04. Я пытаюсь запустить сервер MySQL с другим файлом sock. По умолчанию MySQL работает на /var/run/mysqld/mysqld.sock.

Я пытаюсь запустить тот же сервер на /var/run/mysqld/mysqld1.sock.

Для этого я сделал следующие изменения:

  1. Изменения в /etc/mysql/my.cnf
[Клиент]
    порт = 3306
    socket = /var/run/mysqld/mysqld1.sock

[Mysqld_safe]
    socket = /var/run/mysqld/mysqld1.sock
    хороший = 0

[ТуздЫ]
    user = mysql
    pid-file = /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 дек. 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 [Примечание] Имя хоста сервера (bind-адрес): '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.

2 января 12:09:34 praveshp-lt mysqld: 130102 12:09:34 [Примечание] Плагин 'FEDERATED' отключен.
2 января 12:09:34 praveshp-lt mysqld: 130102 12:09:34 InnoDB: куча памяти InnoDB отключена
2 января 12:09:34 praveshp-lt mysqld: 130102 12:09:34 InnoDB: мьютексы и rw_locks используют атомарные встроенные функции GCC
2 января 12:09:34 praveshp-lt mysqld: 130102 12:09:34 InnoDB: в сжатых таблицах используется zlib 1.2.3.4
2 января 12:09:34 praveshp-lt mysqld: 130102 12:09:34 InnoDB: Инициализация пула буферов, размер = 128.0M
2 января 12:09:34 praveshp-lt mysqld: 130102 12:09:34 InnoDB: завершена инициализация пула буферов
2 января 12:09:34 praveshp-lt mysqld: 130102 12:09:34 InnoDB: самый высокий поддерживаемый формат файла - Barracuda.
2 января 12:09:35 praveshp-lt mysqld: 130102 12:09:35 InnoDB: Ожидание запуска фоновых потоков
2 января 12:09:36 praveshp-lt mysqld: 130102 12:09:36 InnoDB: 1.1.8 запущено; регистрационный номер 1595685
2 января 12:09:36 praveshp-lt mysqld: 130102 12:09:36 [Примечание] Имя хоста сервера (bind-адрес): '127.0.0.1'; порт: 3307
2 января 12:09:36 praveshp-lt mysqld: 130102 12:09:36 [Примечание] - «127.0.0.1» преобразуется в «127.0.0.1»;
Янв 2 12:09:36 praveshp-lt mysqld: 130102 12:09:36 [Примечание] Серверный сокет, созданный для IP: «127.0.0.1».
2 января 12:09:36 praveshp-lt mysqld: 130102 12:09:36 [ОШИБКА] Не удается запустить сервер: привязка к сокету unix: разрешение запрещено
2 января 12:09:36 praveshp-lt mysqld: 130102 12:09:36 [ОШИБКА] У вас уже есть другой сервер mysqld, работающий на сокете: /var/run/mysqld/mysqld1.sock?
2 января 12:09:36 praveshp-lt mysqld: 130102 12:09:36 [ОШИБКА] Отмена
2 января 12:09:36 praveshp-lt mysqld: 
2 января 12:09:36 praveshp-lt mysqld: 130102 12:09:36 InnoDB: запуск выключения ...
2 января 12:09:36 ядро ​​praveshp-lt: [7060.098580] type = 1400 аудит (1357108776.036: 33): apparmor = операция "DENIED" = "mknod" parent = 6702 profile = "/ usr / sbin / mysqld" name = "/run/mysqld/mysqld1.sock" pid = 7039 comm = "mysqld" required_mask = "c" denied_mask = "c" fsuid = 116 ouid = 116
2 января 12:09:36 praveshp-lt mysqld: 130102 12:09:36 InnoDB: завершение работы завершено; регистрационный номер 1595685
2 января 12:09:36 praveshp-lt mysqld: 130102 12:09:36 [Примечание] / usr / sbin / mysqld: завершение работы завершено

В нем говорится, что разрешение отклонено, однако я, кажется, установил правильные разрешения.

user117844
источник
1. Проверьте разрешения на /usr/local/mysqlи /tmp. Нужно быть как минимум 775. 2. Разрешение для каталога базы данных mysql в /var/lib/папке должно быть mysql:root ( chown mysql:root mysql)
Rinzwind
1
Я проверил разрешения, и они, кажется, в порядке.
user117844
также проверьте /etc/apparmor.d/usr.sbin.mysqldЗдесь есть сравнение между старой и новой версией: bugs.launchpad.net/ubuntu/+source/mysql-5.1/+bug/876268/…
Rinzwind

Ответы:

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 за указание на это.

user117844
источник
Ха! : D
Потребовалось
Я улучшил ваш ответ, чтобы использовать локальный каталог изменений Apparmor. Избегая того, что с вашим пакетом управления, это менее вероятно, сломается позже при выполнении обновлений и тому подобное.
gertvdijk