MySQL non si avvia a causa di AppArmor?


30

Sto cercando di installare mysql-server-5.7 su Kubuntu 16.04, ma sto riscontrando problemi.

sudo apt install mysql-server fornisce il seguente output.

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)

E quando journalctl -xeprovo a risolvere eseguendo ottengo un output come il seguente, il che sembra indicare che AppArmor mi sta dando problemi.

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

Come potrei risolvere questo problema?


6
Nota per i lettori futuri: l'apparmor ha negato che i messaggi siano solo avvertimenti e MySQL probabilmente uscirà per un motivo diverso - vedi /var/log/mysql/error.log. MySQL dovrebbe essere comunque in grado di funzionare anche se non può accedere ai file / proc e / sys sopra.
SystemParadox,

Assicurati che il tuo disco non sia pieno.
Buttle Butkus,

Risposte:


31

È necessario modificare la configurazione di Apparmor per consentire a MySQL di accedere a tali file. I messaggi di registro indicano che è /usr/sbin/mysqldnecessario l' raccesso read ( ) per l'apertura /proc/14767/status, /sys/devices/system/node/(barra finale perché vuole leggere la directory) e /proc/14767/task/14767/mem. Il file da modificare è /etc/apparmor.d/usr.sbin.mysqld.

Nel mio caso ho risolto il problema aggiungendo queste linee da qualche parte nel mezzo (con due spazi davanti a ciascuna):

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

(Nota la barra finale per la seconda riga.)

Dopo averlo fatto, prova ad avviare MySQL e, se ricevi più errori, aggiungi anche questi file e riprova.

Ecco una risposta che ho dato a questo problema altrove.


6
Perché si dovrebbe modificare apparmourmanualmente le impostazioni per l'installazione mysql, se è così allora c'è un problema.
George Udosen,

2
Sono d'accordo @George! Ecco un rapporto sul launchpad con altri utenti che condividono lo stesso problema: bugs.launchpad.net/ubuntu/+source/mysql-5.7/+bug/1610765 (la maggior parte dei commentatori riporta gli stessi messaggi di registro qui, sebbene il reporter originale ne avesse diversi. )
Paul A Jungwirth,

3
/proc/*/status rè inutilmente aperto. Apparmor ha abbinamenti per il prid corrente, quindi puoi farlo in questo modo: @{PROC}/@{pid}/status r, potresti anche voler accedere a caratteri jolly node*/meminfose hai il supporto NUMA / più di una CPU esposta alla macchina.
Martin Foot,

3
Inoltre potrebbe essere necessario riavviare Apparmor successivamente: sudo service apparmor restart
Zbyszek

1
potrebbe avere senso inserirlo /etc/apparmor.d/local/user.sbin/mysqldinvece per evitare di scontrarsi con gli aggiornamenti del profilo predefinito. È già incluso nel profilo predefinito
Marat

6

Potrebbe essere questo: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=739846 quindi prova a utilizzare

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

se non aiuta a usare:

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

per rimuovere completamente mysql e reinstallare Avvertenza: se si dispone di database verranno rimossi.


Grazie per il suggerimento! Il mio /etc/init.d/mysql ha già exit 0alla fine. Ho provato a eliminare e reinstallare mysql-server, il che non mi è stato di aiuto. Ho appena provato a reinstallare (senza eliminare) mysql-common, che inoltre non ha aiutato. L'eliminazione mi richiederà di disinstallare molti pacchetti che dipendono da esso, di cui ho un po 'paura.
Supernormal,

Ho appena fatto sudo apt remove --purge mysql-*per rimuovere completamente tutte le cose di MySQL (ho la versione 5.7), e poi l'ho fatto sudo apt install akonadi-server mysql-client mysql-server, ma il risultato è sempre lo stesso. Ricevo ancora lo stesso messaggio di errore e journalctl -xeindica un problema di AppArmor come sopra.
Supernormal,

1

Ho risolto questo problema con questo;

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

Aggiungi queste righe;

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

ricaricare il servizio apparmor

#sudo service apparmor reload

0

Nel mio caso, tentando di installare mysql-server-5.7 su Ubuntu 16.04 dopo aver usato le risposte di cui sopra, la cosa che ha funzionato è stata:

  1. Correre sudo apt install mysql-server
  2. Ispezionare l'errore esatto sopra riportato
  3. Reboot
  4. Esegui di sudo apt install mysql-servernuovo per continuare l'installazione

Installazione completata.


OK, ma purtroppo non funziona ancora per me.
Supernormal,

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

1
Si prega di utilizzare il markup {}del codice per il codice, lo rende più leggibile. Puoi modificare la tua risposta.
Robert Riedl,

Ho rinominato i miei ib_logfile*file e l'ho fatto, apt upgradema quando apt è arrivato a mysql, ho ottenuto il seguente output mysql_upgrade: [ERROR] 1812: Tablespace is missing for table mysql.plugin
Supernormal,

bene, ho provato prima a tarball, mysql ha rimosso il tarball, ora non si avvia per un motivo diverso. Ubuntu 18.04. YMMV
Chaim Eliyah
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.