MySQL не запускается из-за AppArmor?


31

Я пытаюсь установить mysql-server-5.7 на Kubuntu 16.04, но у меня проблемы.

sudo apt install mysql-server дает следующий вывод.

Setting up mysql-server-5.7 (5.7.18-0ubuntu0.16.04.1) ...
Renaming removed key_buffer and myisam-recover options (if present)
Job for mysql.service failed because the control process exited with error code. See "systemctl status mysql.service" and "journalctl -xe" for details.
invoke-rc.d: initscript mysql, action "start" failed.
● mysql.service - MySQL Community Server
   Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
   Active: activating (auto-restart) (Result: exit-code) since ons 2017-05-17 09:48:39 CEST; 10ms ago
  Process: 13622 ExecStartPost=/usr/share/mysql/mysql-systemd-start post (code=exited, status=0/SUCCESS)
  Process: 13621 ExecStart=/usr/sbin/mysqld (code=exited, status=2)
  Process: 13612 ExecStartPre=/usr/share/mysql/mysql-systemd-start pre (code=exited, status=0/SUCCESS)
 Main PID: 13621 (code=exited, status=2)

maj 17 09:48:39 anis systemd[1]: Failed to start MySQL Community Server.
maj 17 09:48:39 anis systemd[1]: mysql.service: Unit entered failed state.
maj 17 09:48:39 anis systemd[1]: mysql.service: Failed with result 'exit-code'.
dpkg: error processing package mysql-server-5.7 (--configure):
 subprocess installed post-installation script returned error exit status 1
dpkg: dependency problems prevent configuration of mysql-server:
 mysql-server depends on mysql-server-5.7; however:
  Package mysql-server-5.7 is not configured yet.

dpkg: error processing package mysql-server (--configure):
 dependency problems - leaving unconfigured
Errors were encountered while processing:
 mysql-server-5.7
 mysql-server
E: Sub-process /usr/bin/dpkg returned an error code (1)

И при попытке устранения неполадок при запуске journalctl -xeя получаю вывод, подобный следующему, который, кажется, указывает, что AppArmor доставляет мне проблемы.

maj 17 09:53:14 anis systemd[1]: Starting MySQL Community Server...
-- Subject: Unit mysql.service has begun start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Unit mysql.service has begun starting up.
maj 17 09:53:14 anis audit[14767]: AVC apparmor="DENIED" operation="open" profile="/usr/sbin/mysqld" name="/proc/14767/status" pid=14767 comm="mysqld" requested_mask="r" denied_mask="r" fsuid=124 ouid=124
maj 17 09:53:14 anis audit[14767]: AVC apparmor="DENIED" operation="open" profile="/usr/sbin/mysqld" name="/sys/devices/system/node/" pid=14767 comm="mysqld" requested_mask="r" denied_mask="r" fsuid=124 ouid=0
maj 17 09:53:14 anis kernel: audit: type=1400 audit(1495007594.314:240): apparmor="DENIED" operation="open" profile="/usr/sbin/mysqld" name="/proc/14767/status" pid=14767 comm="mysqld" requested_mask="r" denied_mask="r" fsuid=124 ouid=124
maj 17 09:53:14 anis kernel: audit: type=1400 audit(1495007594.314:241): apparmor="DENIED" operation="open" profile="/usr/sbin/mysqld" name="/sys/devices/system/node/" pid=14767 comm="mysqld" requested_mask="r" denied_mask="r" fsuid=124 ouid=0
maj 17 09:53:14 anis kernel: audit: type=1400 audit(1495007594.314:242): apparmor="DENIED" operation="open" profile="/usr/sbin/mysqld" name="/proc/14767/status" pid=14767 comm="mysqld" requested_mask="r" denied_mask="r" fsuid=124 ouid=124
maj 17 09:53:14 anis audit[14767]: AVC apparmor="DENIED" operation="open" profile="/usr/sbin/mysqld" name="/proc/14767/status" pid=14767 comm="mysqld" requested_mask="r" denied_mask="r" fsuid=124 ouid=124
maj 17 09:53:14 anis audit[14767]: AVC apparmor="DENIED" operation="open" profile="/usr/sbin/mysqld" name="/proc/14767/task/14767/mem" pid=14767 comm="mysqld" requested_mask="r" denied_mask="r" fsuid=124 ouid=124
maj 17 09:53:14 anis kernel: audit: type=1400 audit(1495007594.658:243): apparmor="DENIED" operation="open" profile="/usr/sbin/mysqld" name="/proc/14767/task/14767/mem" pid=14767 comm="mysqld" requested_mask="r" denied_mask="r" fsuid=124 ouid=124
maj 17 09:53:14 anis systemd[1]: mysql.service: Main process exited, code=exited, status=2/INVALIDARGUMENT

Как я могу решить эту проблему?


6
Примечание для будущих читателей: сообщения, запрещенные apparmor, являются просто предупреждениями, и MySQL, вероятно, выходит по другой причине - смотрите /var/log/mysql/error.log. MySQL все еще должен быть в состоянии работать, даже если он не может получить доступ к вышеуказанным файлам / proc и / sys.
SystemParadox

Убедитесь, что ваш диск не заполнен.
Баттл Буткус

Ответы:


31

Вам нужно отредактировать конфигурацию вашего apparmor, чтобы разрешить MySQL доступ к этим файлам. Сообщения журнала говорят о том , что /usr/sbin/mysqldпотребности чтения ( r) доступ к открытым /proc/14767/status, /sys/devices/system/node/(завершающего слэша , потому что он хочет прочитать каталог), и /proc/14767/task/14767/mem. Файл для редактирования есть /etc/apparmor.d/usr.sbin.mysqld.

В моем случае я решил проблему, добавив эти строки где-то посередине (с двумя пробелами перед каждой):

  /proc/*/status r,
  /sys/devices/system/node/ r,
  /sys/devices/system/node/node0/meminfo r,

(Обратите внимание на косую черту для второй строки.)

После этого попробуйте запустить MySQL, и если вы получите больше ошибок, добавьте эти файлы и попробуйте снова.

Вот ответ, который я дал на эту проблему в другом месте.


6
Зачем нужно редактировать apparmourнастройки вручную, чтобы установить mysql, если это так, то есть проблема.
Джордж Удосен,

2
Я согласен @ Джордж! Вот отчет панели запуска, на котором другие пользователи сталкиваются с той же проблемой: bugs.launchpad.net/ubuntu/+source/mysql-5.7/+bug/1610765 (большинство комментаторов сообщают те же сообщения журнала, что и здесь, хотя у исходного репортера были другие сообщения. )
Пол A

3
/proc/*/status rнеоправданно открыт. Apparmor имеет сопоставления для текущего prid, так что вы можете сделать это следующим образом: @{PROC}/@{pid}/status r, Вы также можете захотеть использовать подстановочный доступ, node*/meminfoесли у вас есть поддержка NUMA / более одного процессора, выставленного на машину.
Мартин Фут

3
Также может потребоваться перезапустить apparmor после этого: sudo service apparmor restart
Zbyszek

1
/etc/apparmor.d/local/user.sbin/mysqldвместо этого может иметь смысл вставить его, чтобы избежать конфликтов с обновлениями профиля по умолчанию. Он уже включен в профиль по умолчанию
Марат

6

Это может быть так: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=739846, поэтому попробуйте использовать

echo "exit 0" >> /etc/init.d/mysql
dpkg --configure -a

если это не помогает использовать:

sudo apt-get purge mysql-server mysql-client mysql-common mysql-server-5.5
sudo apt-get install mysql-server

чтобы полностью удалить MySQL и переустановить Внимание: если у вас есть какие-либо базы данных, они будут удалены.


Спасибо за предложение! Мой /etc/init.d/mysql уже есть exit 0в конце. Я попытался очистить и переустановить MySQL-сервер, который не помог. Я только что попытался переустановить (без очистки) mysql-common, что тоже не помогло. Очистка потребует от меня удаления множества пакетов, которые зависят от него, чего я немного боюсь.
Сверхъестественное

Я только что сделал, sudo apt remove --purge mysql-*чтобы полностью удалить все вещи MySQL (у меня версия 5.7), а затем сделал sudo apt install akonadi-server mysql-client mysql-server, но результат все тот же. Я все еще получаю то же сообщение об ошибке и journalctl -xeуказываю на проблему AppArmor, как указано выше.
Сверхъестественное

1

Я решил эту проблему с этим;

Отредактируйте /etc/apparmor.d/local/usr.sbin.mysqld

Добавьте эти строки;

/data/ r,
/data/** rwk,

перезагрузить сервис одежды

#sudo service apparmor reload

0

В моем случае попытка установить mysql-server-5.7 на Ubuntu 16.04 после использования вышеупомянутых ответов, что работало так:

  1. Бег sudo apt install mysql-server
  2. Проверьте вышеуказанную точную ошибку
  3. перезагружать
  4. Запустите sudo apt install mysql-serverснова, чтобы продолжить установку

Установка завершена.


Хорошо, но это все еще не работает для меня, к сожалению.
Сверхъестественное

0
  1. stop mysql-server
  2. rm /var/lib/mysql/ib_logfile*
  3. restart mysql

1
Пожалуйста, используйте разметку кода {}для кода, это делает его более читабельным. Вы можете редактировать свой ответ.
Роберт Ридл

Я переименовал свои ib_logfile*файлы и сделал, apt upgradeно когда apt добрался до mysql, я получил следующий вывод mysql_upgrade: [ERROR] 1812: Tablespace is missing for table mysql.plugin
Supernormal

отлично, сначала я попытался выполнить тарбол, mysql удалил тарбол, теперь он не запускается по другой причине. Ubuntu 18.04. YMMV
Хаим Элайя
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.