Não é possível criar o arquivo /var/lib/mysql/user.lower-test

11

O banco de dados MySQL está livre de problemas há alguns meses. Hoje, quando verifiquei os pacotes atualizáveis ​​usando o Synaptic Package Manager, ele veio com os vários componentes do MySQL (-common, -client, -server, etc). Portanto, decidi atualizar (esqueci de anotar a versão instalada, mas acho que era a 5.6.21) para a 5.6.25-1-ubuntu2.0. Depois, quando fui consultar o banco de dados, recebi a mensagem: -

Error occured: Can't connect to MySQL server on '127.0.0.1' (111)

Eu então encontrei o servidor não estava sendo executado. No arquivo de log, gosto que a mensagem: -

Can't create file /var/lib/mysql/user.lower-test

Passei uma hora pesquisando on-line e, embora o problema tenha sido relatado anteriormente, não o vi no contexto de um problema de 'pós-atualização', tão inseguro quanto à minha próxima etapa.

MichaelJohn
fonte

Respostas:

6

Esse problema parece ter problemas de permissão ou alterar os diretórios de dados do mysql para outro local que não seja o / var / lib / mysql.

Tente rodar com o sudo

Parece que / var / lib / mysql pertence ao usuário mysql e o grupo também está definido como mysql.

$ sudo chown -R mysql /var/lib/mysql
$ sudo chgrp -R mysql /var/lib/mysql
$ sudo chmod 755 /var/lib/mysql

Você verificou se o diretório / var / lib / mysql realmente existe e corresponde ao seu diretório de dados? Caso contrário, provavelmente você deve especificar o parâmetro datadir na seção mysqld

[mysqld]
datadir=/var/lib/mysql

Então você pode escolher entre configurar o apparmor para permitir que o MySQL leia \ execute \ modifique o novo diretório de dados e subdiretórios ou, por seu próprio risco, você pode remover o apparmor. Você pode precisar ser root para fazer o seguinte:

/etc/init.d/apparmor stop
/etc/init.d/apparmor teardown
update-rc.d -f apparmor remove
apt-get purge apparmor
reboot
Hitesh Mundra
fonte
Eu passei por tudo isso, mas sem sucesso. Tendo backups, decidi reinstalar e tudo funciona, exceto um problema que tive. Mas é o problema Linux ou é MySQL ...
Michaeljohn
@MichaelJohn não pode dizer nada. poderia ser apparmor ou corrupção pacote mysql
Hitesh Mundra
No Ubuntu Xenial: apparmoré automaticamente instalado e ativado quando você instala mysql-server-5.6. Mesmo se você o desativou anteriormente. Você não pode remover o apparmorpacote porque é uma dependência de mysql-server-5.6. Você pode resolver o erro "Não é possível criar o arquivo /var/lib/mysql/user.lower-test" fazendoservice apparmor stop; service apparmor teardown; update-rc.d -f apparmor remove
Jeroen Vermeulen - MageHost
5

Encontrei este problema ao tentar executar várias instâncias do MySQL, mas em vez de remover o apparmor, atualizei o arquivo usr.sbin.mysqld:

vim /etc/apparmor.d/usr.sbin.mysqld

Por exemplo, é assim que meu arquivo se parece e, depois de adicionar as pastas que precisam de permissões de gravação, tudo funcionou como deveria.

/usr/sbin/mysqld {

  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/lib/mysql1/ r,
  /var/lib/mysql1/** rwk,
  /var/log/mysql/ r,
  /var/log/mysql/* rw,
  /var/run/mysqld/mysqld.pid rw,
  /var/run/mysqld/mysqld.sock w,
  /var/run/mysqld/mysqld1.pid rw,
  /var/run/mysqld/mysqld1.sock w,
  /run/mysqld/mysqld.pid rw,
  /run/mysqld/mysqld.sock w,

  /sys/devices/system/cpu/ r,

}
Jubair
fonte
1
Isso funcionou para mim também. Eu tive que reiniciar o servidor para que isso funcionasse - apenas parar e reiniciar o AppArmour não funcionou.
MikeHoss #
3

O problema aconteceu comigo quando tentei mover / var / lib / mysql para outro disco e substituir o diretório original por um link simbólico.

O Apparmor negará o acesso nesta configuração, consulte

por que isso é considerado não um bug pelos desenvolvedores do Apparmor. A solução alternativa é usar uma montagem de ligação. Vejo

para uma explicação.

assim

mount --bind /newmysqldatadir /var/lib/mysql
service mysql start

corrigiu o problema para mim.

Wolfgang Fahl
fonte
1

Eu tive um problema parecido. Reinstalei o Ubuntu Server na minha máquina, fiz um backup completo do / etc / no disco rígido, depois de reinstalar fiz uma cópia de todos os arquivos importantes de / drive / etc / para os meus sistemas / etc.

Enquanto isso, criei um bak para o arquivo usr.sbin.mysqld chamado usr.sbin.mysqld.bak e o mantive no mesmo diretório /etc/apparmor.d/.

Após uma pesquisa mais aprofundada, encontrei esta postagem no blog: https://blogs.oracle.com/jsmyth/apparmor-and-mysql

Instalei o apparmor-utils e tentei reclamar em / usr / sbin / mysqld e ele disse que eu tenho 2 configurações do apparmor definidas (ambos os meus arquivos).

Eu sei que pode não ser o problema que você está enfrentando, mas apenas por uma questão de clareza, não seja tão burro quanto eu, criando um arquivo de backup no mesmo diretório do diretório apparmor sbin.

Radu Galan
fonte
0

Verifique também se sua partição não está cheia, como foi o meu caso.

Por um motivo desconhecido, mover os dados para outra partição também não funcionou.

Portanto, para uma solução rápida, em vez de mexer com llvm ou gparted, reduzi meu /swapfiletamanho.

Daishi
fonte