MySQL не запуститься через AppArmor?


30

Я намагаюся встановити 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
Зауважте майбутнім читачам: повідомлення, яким заборонено додаток, є лише попередженнями, і MySQL, ймовірно, виходить з іншої причини - див /var/log/mysql/error.log. MySQL все ще має бути здатний запускатися, навіть якщо він не може отримати доступ до вищевказаних / proc та / sys файлів.
SystemParadox

Переконайтесь, що ваш диск не заповнений.
Buttle Butkus

Відповіді:


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
Я згоден @George! Ось звіт про запуску з іншими людьми, які поділяють ту саму проблему: bugs.launchpad.net/ubuntu/+source/mysql-5.7/+bug/1610765 (Більшість коментаторів повідомляють про ті самі повідомлення журналу, що і тут, хоча у початкового репортера були різні. )
Пол А Юнгвірт

3
/proc/*/status rзайво відкритий. У Apparmor є відповідники для поточного дода, тому ви можете зробити це так: @{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,

перезавантажити службу apparmor

#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.