MariaDB não inicia após a atualização para o Ubuntu 16.04

2

Atualizada para o Ubuntu 16.04 de 14.04 x64

Se eu tentar iniciar o mysqld , ele falha e no syslog eu tenho

kernel: [ 2336.792423] audit: type=1400 audit(1470265086.730:518): apparmor="DENIED" operation="sendmsg" info="Failed name lookup - disconnected path" error=-13 profile="/usr/sbin/mysqld" name="run/systemd/notify" pid=11850 comm="mysqld" requested_mask="w" denied_mask="w" fsuid=117 ouid=0

Eu adicionei /run/systemd/notify/ ao apparmor, mas não consigo adicionar run/systemd/notify - "/" está faltando

Como posso consertar isso? Eu preciso que o MariaDB seja executado em uma partição separada

Estou usando o MariaDB com a pasta de dados em /home/db/mysql Eu tinha um link simbólico configurado para apontar para

lrwxrwxrwx 1 mysql mysql 14 iun 22 20:58 /var/lib/mysql -> /home/db/mysql

e também tinha o perfil de armadura do aplicativo configurado:

# vim:syntax=apparmor
# Last Modified: Tue Jun 19 17:37:30 2007
#include <tunables/global>

/usr/sbin/mysqld {
#include <abstractions/base>
#include <abstractions/nameservice>
#include <abstractions/user-tmp>
#include <abstractions/mysql>
#include <abstractions/winbind>

capability dac_override,
capability sys_resource,
capability setgid,
capability setuid,

network tcp,

/etc/hosts.allow r,
/etc/hosts.deny r,

/etc/mysql/*.pem r,
/etc/mysql/conf.d/ r,
/etc/mysql/conf.d/* r,
/etc/mysql/*.cnf r,
/usr/lib/mysql/plugin/ r,
/usr/lib/mysql/plugin/*.so* mr,
/usr/sbin/mysqld mr,
/usr/share/mysql/** r,
/var/log/mysql.log rw,
/var/log/mysql.err rw,
/var/lib/mysql/ r,
/var/lib/mysql/** rwk,
/var/log/mysql/ r,
/var/log/mysql/* rw,
/var/run/mysqld/mysqld.pid rw,
/var/run/mysqld/mysqld.sock w,
/run/mysqld/mysqld.pid rw,
/run/mysqld/mysqld.sock w,
/run/systemd/notify w,
/home/db/** rwk,
/home/db/mysql/** rwk,

/sys/devices/system/cpu/ r,

# Site-specific additions and overrides. See local/README for details.
#include <local/usr.sbin.mysqld>
}

Ele falhou anteriormente no cd para /home/db/mysql , mas corrigiu-o editando o /lib/systemd/system/mariadb.service e a configuração ProtectHome=false

    
por Alex Burdusel 04.08.2016 / 01:06

2 respostas

1

Após várias tentativas falhas envolvendo a configuração do apparmor, a edição /lib/systemd/system/mariadb.service e /etc/mysql/my.cnf para definir o datadir, que falhou, eu fui em uma abordagem diferente.

  1. Interrompido o serviço (se iniciado): sudo service mysqld stop
  2. Eliminou a instalação apt-get purge mysqld*

  3. Eu removi tudo que envolvia o mysql e o mariadb (procurei /etc , /var para eles). Você pode querer fazer o backup deles se achar que precisa deles para referência futura.

    • Configuração do mysql e mariadb em /etc/systemd/system

    • perfil do mysql em /etc/apparmor.d

    • dir /etc/mysql

    • o link simbólico que eu tinha para mysql em /var/lib (meus dados estão seguros em /home/db/mysql ). Ignore isso se seus dados estiverem em /var/lib/mysql

  4. Reinstalado sudo apt-get install mariadb-server

  5. Renomeou o /var/lib/mysql para /var/lib/mysql.bk e criou o link simbólico para /home/db/mysql to /var/lib/mysql
  6. Defina a propriedade para o link simbólico e /home/db/mysql para mysql: mysql

Tudo funciona na reinicialização e não morre mais.

Eu posso iniciar e interromper o serviço com sudo /etc/init.d/mysql start sudo /etc/init.d/mysql stop

Eu acho que a migração para o systemd causou todo esse problema. Talvez usar os antigos scripts init.d não seja a melhor maneira de fazer as coisas, mas é a única maneira que encontrei para manter o MariaDB rodando após a reinicialização, caso contrário ele continuava travando por causa de

kernel: [ 2336.792423] audit: type=1400 audit(1470265086.730:518): apparmor="DENIED" operation="sendmsg" info="Failed name lookup - disconnected path" error=-13 profile="/usr/sbin/mysqld" name="run/systemd/notify" pid=11850 comm="mysqld" requested_mask="w" denied_mask="w" fsuid=117 ouid=0 

Como alguns dos clientes que eu estava usando deram Failed to connect to database: Error: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) , tive que criar um link simbólico sudo ln -s /var/run/mysqld/mysqld.sock /tmp/mysql.sock . O link foi removido na reinicialização ...

Portanto, tive de editar os arquivos /etc/mysql/my.cnf e /etc/mysql/debian.cnf para definir socket = /tmp/mysql.sock . O debian.cnf diz DO NOT TOUCH! , mas aproveitei as chances, já que my.cnf diz Remember to edit /etc/mysql/debian.cnf when changing the socket location . Nota: uma reinicialização foi necessária para ver as alterações aplicadas. Somente reiniciar o serviço não os aplicou. Talvez algum daemon tenha sido recarregado, mas não sabia qual deles.

    
por Alex Burdusel 04.08.2016 / 20:54
0

No meu caso eu instalei o MariaDB 10.2 no Ubuntu Xenial 16.04 e usei links simbólicos para apontar para os bancos de dados dos usuários em seus diretórios home. Isso funcionou bem para 10.0, mas agora retornaria erros

  

[ERRO] InnoDB: número 13 do sistema operacional em uma operação de arquivo.

     

[ERRO] InnoDB: O erro significa que o mysqld não possui os direitos de acesso ao diretório.

     

[ERRO] InnoDB: os_file_readdir_next_file () retornou -1 no diretório ./, a recuperação de falhas pode ter falhado em alguns arquivos .ibd!

Todos os arquivos e diretórios eram de propriedade do mysql: mysql. No entanto, graças ao pôster da pergunta, encontrei em /lib/systemd/system/mariadb.service a configuração:

  

# Evitar acessar / home, / root e / run / user

     

ProtectHome = true

Depois de definir isso como false e systemctl daemon-reload , o MariaDB será iniciado normalmente.

Espero que isso ajude alguém.

    
por Cris 23.01.2018 / 04:03