MySQL nie chce się uruchomić z powodu AppArmor?

30

Próbuję zainstalować mysql-server-5.7 na Kubuntu 16.04, ale mam problem.

sudo apt install mysql-server daje następujący wynik.

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)

A gdy próbuję rozwiązać problem przez uruchomienie journalctl -xe, otrzymuję dane wyjściowe takie jak poniżej, co wydaje się wskazywać, że AppArmor sprawia mi kłopot.

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

Jak mogę rozwiązać ten problem?

Nadprzyrodzone
źródło
6
Uwaga dla przyszłych czytelników: wiadomości odrzucone przez apparmor to tylko ostrzeżenia, a MySQL prawdopodobnie wychodzi z innego powodu - patrz /var/log/mysql/error.log. MySQL powinien nadal być w stanie działać, nawet jeśli nie może uzyskać dostępu do powyższych plików / proc i / sys.
SystemParadox
Upewnij się, że twój dysk nie jest pełny.
Buttle Butkus

Odpowiedzi:

31

Musisz zmodyfikować konfigurację Apparmor, aby umożliwić MySQL dostęp do tych plików. Komunikaty dziennika informują, że /usr/sbin/mysqldnależy rotworzyć ( ), aby otworzyć /proc/14767/status, /sys/devices/system/node/(ukośnik końcowy, ponieważ chce odczytać katalog), oraz /proc/14767/task/14767/mem. Plik do edycji to /etc/apparmor.d/usr.sbin.mysqld.

W moim przypadku rozwiązałem problem, dodając te linie gdzieś pośrodku (z dwoma spacjami przed każdym):

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

(Zwróć uwagę na ukośnik drugiego wiersza).

Po wykonaniu tej czynności spróbuj uruchomić MySQL, a jeśli pojawi się więcej błędów, dodaj te pliki i spróbuj ponownie.

Oto odpowiedź, którą udzieliłem na ten problem w innym miejscu.

Paul A Jungwirth
źródło
6
Dlaczego trzeba edytować apparmourustawienia ręcznie, aby zainstalować mysql, jeśli tak jest, to jest problem.
George Udosen
2
Zgadzam się @George! Oto raport startera z innymi osobami mającymi ten sam problem: bugs.launchpad.net/ubuntu/+source/mysql-5.7/+bug/1610765 (Większość komentujących zgłasza takie same komunikaty dziennika jak tutaj, chociaż pierwotny reporter miał inne. )
Paul A Jungwirth
3
/proc/*/status rjest niepotrzebnie otwarty. Apparmor ma dopasowywacze dla bieżącego prid, więc możesz to zrobić w następujący sposób: @{PROC}/@{pid}/status r, Możesz także chcieć dostępu do symboli wieloznacznych, node*/meminfojeśli masz wsparcie NUMA / więcej niż jeden procesor wystawiony na maszynę.
Martin Foot
3
Może być też konieczne ponowne uruchomienie zbroi po tym: sudo service apparmor restart
Zbyszek
1
warto /etc/apparmor.d/local/user.sbin/mysqldzamiast tego wprowadzić go, aby uniknąć kolizji z domyślnymi aktualizacjami profilu. Jest już włączony do domyślnego profilu
Marat
6

Może być tak: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=739846, więc spróbuj użyć

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

jeśli to nie pomaga w użyciu:

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

aby całkowicie usunąć mysql i ponownie zainstalować Ostrzeżenie: Jeśli masz jakieś bazy danych, zostaną one usunięte.

ADDB
źródło
Dzieki za sugestie! Mój /etc/init.d/mysql już maexit 0 na końcu. Próbowałem wyczyścić i ponownie zainstalować serwer mysql, co nie pomogło. Właśnie próbowałem ponownie zainstalować (bez czyszczenia) mysql-common, co również nie pomogło. Usunięcie go będzie wymagało ode mnie odinstalowania wielu pakietów, które są od niego zależne, czego się trochę boję.
Supernormal
Właśnie zrobiłem, sudo apt remove --purge mysql-*aby całkowicie usunąć wszystkie rzeczy MySQL (mam wersję 5.7), a potem zrobiłem sudo apt install akonadi-server mysql-client mysql-server, ale wynik jest nadal taki sam. Nadal pojawia się ten sam komunikat o błędzie i journalctl -xewskazuje na problem AppArmor, jak powyżej.
Supernormal
1

Rozwiązałem ten problem z tym;

Edytuj /etc/apparmor.d/local/usr.sbin.mysqld

Dodaj te linie;

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

przeładuj usługę Apparmor

#sudo service apparmor reload
Kadir Y.
źródło
0

W moim przypadku próba instalacji mysql-server-5.7 na Ubuntu 16.04 po użyciu powyższych odpowiedzi działała następująco:

  1. Biegać sudo apt install mysql-server
  2. Sprawdź dokładnie powyższy błąd
  3. Restart
  4. Uruchom sudo apt install mysql-serverponownie, aby kontynuować instalację

Instalacja zakończona.

viky_manoli
źródło
OK, ale niestety to nadal nie działa.
Supernormal
0
  1. stop mysql-server
  2. rm /var/lib/mysql/ib_logfile*
  3. restart mysql
jusme Mi
źródło
1
Proszę użyć znaczników kodu {}dla kodu, dzięki czemu jest bardziej czytelny. Możesz edytować swoją odpowiedź.
Robert Riedl
Zmieniłem nazwy ib_logfile*plików i zrobiłem, apt upgradeale kiedy apt dostał się do mysql, otrzymałem następujące dane wyjściowe mysql_upgrade: [ERROR] 1812: Tablespace is missing for table mysql.plugin
Supernormal
świetnie, najpierw spróbowałem go zapakować, mysql usunął go, teraz nie działa z innego powodu. Ubuntu 18.04. YMMV
Chaim Eliyah