O MySQL não inicia por causa do AppArmor?

30

Estou tentando instalar o mysql-server-5.7 no Kubuntu 16.04, mas estou tendo problemas.

sudo apt install mysql-server dá a seguinte saída.

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 ao tentar solucionar problemas executando journalctl -xe, recebo resultados como os seguintes, o que parece indicar que o AppArmor está me causando problemas.

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

Como eu poderia resolver esse problema?

Supernormal
fonte
6
Nota para futuros leitores: as mensagens negadas pelo aparentemente são apenas avisos, e o MySQL provavelmente está saindo por um motivo diferente - veja /var/log/mysql/error.log. O MySQL ainda deve ser capaz de executar, mesmo que não possa acessar os arquivos / proc e / sys acima.
SystemParadox
Verifique se o seu disco não está cheio.
Buttle Butkus

Respostas:

31

Você precisa editar sua configuração do apparmor para permitir que o MySQL acesse esses arquivos. As mensagens de log estão dizendo que /usr/sbin/mysqldas necessidades ler ( r) acesso a aberta /proc/14767/status, /sys/devices/system/node/(barra invertida porque quer ler o diretório), e /proc/14767/task/14767/mem. O arquivo a ser editado é /etc/apparmor.d/usr.sbin.mysqld.

No meu caso, resolvi o problema adicionando essas linhas em algum lugar no meio (com dois espaços na frente de cada uma):

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

(Observe a barra à direita da segunda linha.)

Depois de fazer isso, tente iniciar o MySQL e, se você receber mais erros, adicione esses arquivos também e tente novamente.

Aqui está uma resposta que eu dei para esse problema em outro lugar.

Paul A Jungwirth
fonte
6
Por que é necessário editar as apparmourconfigurações manualmente para instalar mysql, se for esse o caso, há um problema.
George Udosen
2
Eu concordo @ George! Aqui está um relatório da barra de ativação com outras pessoas que compartilham o mesmo problema: bugs.launchpad.net/ubuntu/+source/mysql-5.7/+bug/1610765 (A maioria dos comentaristas relata as mesmas mensagens de log que aqui, embora o repórter original tenha diferentes. )
Paul A Jungwirth
3
/proc/*/status restá desnecessariamente aberto. O Apparmor possui correspondências para o preço atual, portanto, você pode fazer o seguinte: @{PROC}/@{pid}/status r, Você também pode querer acessar caracteres curinga node*/meminfose tiver suporte NUMA / mais de uma CPU exposta à máquina.
Martin Foot
3
Também pode ser necessário reiniciar o apparmor depois disso: sudo service apparmor restart
Zbyszek
1
pode fazer sentido colocá-lo em /etc/apparmor.d/local/user.sbin/mysqldvez de evitar conflitos com as atualizações de perfil padrão. Ele já está incluído no perfil padrão
Marat
6

Pode ser o seguinte: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=739846, então tente usar

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

se não estiver ajudando no uso:

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

remover completamente o mysql e reinstalar Aviso: Se você tiver algum banco de dados, ele será removido.

ADDB
fonte
Obrigado pela sugestão! Meu /etc/init.d/mysql já tem exit 0no final. Eu tentei limpar e reinstalar o mysql-server, o que não ajudou. Eu apenas tentei reinstalar (sem limpar) o mysql-common, o que também não ajudou. Para removê-lo, será necessário desinstalar muitos pacotes que dependem dele, dos quais tenho um pouco de medo.
Supernormal
Eu apenas fiz sudo apt remove --purge mysql-*para remover completamente todas as coisas do MySQL (eu tenho a versão 5.7) e depois o fiz sudo apt install akonadi-server mysql-client mysql-server, mas o resultado ainda é o mesmo. Ainda recebo a mesma mensagem de erro e journalctl -xeindica um problema do AppArmor como acima.
Supernormal
1

Eu resolvi esse problema com isso;

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

Adicione estas linhas;

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

recarregar o serviço apparmor

#sudo service apparmor reload
Kadir Y.
fonte
0

No meu caso, tentando instalar o mysql-server-5.7 no Ubuntu 16.04 depois de usar as respostas acima, o que funcionou foi:

  1. Corre sudo apt install mysql-server
  2. Inspecione o erro exato acima
  3. Reiniciar
  4. Execute sudo apt install mysql-servernovamente para continuar a instalação

Instalação completa.

viky_manoli
fonte
OK, mas isso ainda não funciona para mim, infelizmente.
Supernormal
0
  1. stop mysql-server
  2. rm /var/lib/mysql/ib_logfile*
  3. restart mysql
jusme Mi
fonte
1
Por favor, use a marcação {}de código para torná-lo mais legível. Você pode editar sua resposta.
Robert Riedl
Renomeei meus ib_logfile*arquivos e o fiz, apt upgrademas quando o apt chegou ao mysql, obtive a seguinte saída mysql_upgrade: [ERROR] 1812: Tablespace is missing for table mysql.plugin
Supernormal
ótimo, tentei tarball primeiro, o mysql removeu o tarball, agora está falhando ao iniciar por um motivo diferente. Ubuntu 18.04. YMMV
Chaim Eliyah