o mysql não inicia após realocar o diretório de dados

6

Eu tenho um servidor web onde a instalação padrão do mysql coloca todos os seus arquivos de banco de dados em /var/lib/mysql . A partição onde /var está montado tem apenas 2GB de espaço, então depois de correr em problemas de espaço, decidi realocar o diretório de dados do mysql.

Minha abordagem ingênua era copiar o diretório /var/lib/mysql completamente para /web/dbs/mysql e alterar /etc/mysql/my.cnf para que ele fosse lido

datadir = /web/dbs/mysql

No entanto, depois de reiniciar, recebo os seguintes erros no log de erros do mysql, e o servidor não inicializa.

130130  9:59:23 [Note] Plugin 'FEDERATED' is disabled.
/usr/sbin/mysqld: Can't find file: './mysql/plugin.frm' (errno: 13)
130130  9:59:23 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
130130  9:59:23  InnoDB: Initializing buffer pool, size = 8.0M
130130  9:59:23  InnoDB: Completed initialization of buffer pool
130130  9:59:23  InnoDB: Operating system error number 13 in a file operation.
InnoDB: The error means mysqld does not have the access rights to
InnoDB: the directory.
InnoDB: File name ./ibdata1
InnoDB: File operation call: 'open'.
InnoDB: Cannot continue operation.

Todos os arquivos e diretórios pertencem a mysql:mysql . Para testar, eu até alterei os direitos de acesso para /web/dbs/mysql are rwxrwxrwx por enquanto.

E sim, /web/dbs/mysql/mysql/plugin.frm existe.

Qual poderia ser o problema aqui? Estou esquecendo de algo? Existe um log de saída mais detalhado disponível?

UPDATE:
Mais algumas informações:
Eu tentei novamente tudo com os seguintes comandos:

  • encerrei o servidor stop mysql
  • removi os dados antigos rm -r /web/dbs/mysql
  • copiei usando cp -p -r /var/lib/mysql/ /web/dbs/
  • eu configurei o datadir em my.cnf para datadir = /web/dbs/mysql
  • reiniciei o servidor. Mesmo erro

Privilégios:

drwxr-xr-x  4 mysql mysql 34   2013-01-30 15:55 /web/dbs
drwx------ 19 mysql mysql 4096 2013-01-30 15:44 /web/dbs/mysql
drwx------  2 mysql mysql 4096 2012-10-11 11:25 /web/dbs/mysql/mysql
-rw-rw----  1 mysql mysql 8586 2012-08-14 19:15 /web/dbs/mysql/mysql/plugin.frm

Quando eu reinicia o datadir para datadir = /var/lib/mysql , o servidor é iniciado sem problemas .

Tentei o seguinte:

root:/# su - mysql
mysql:~$ /usr/sbin/mysqld --verbose
130130 16:01:05 [Warning] Can't create test file /web/dbs/mysql/s15800994.lower-test
130130 16:01:05 [Warning] Can't create test file /web/dbs/mysql/s15800994.lower-test

mysql:~$ touch /web/dbs/mysql/s15800994.lower-test
mysql:~$ ls -l /web/dbs/mysql/s15800994.lower-test
-rw-r--r-- 1 mysql mysql 0 2013-01-30 16:01 /web/dbs/mysql/s15800994.lower-test

O diretório de dados é definido corretamente. O usuário mysql tem acesso de gravação, mas o processo mysql não pode criar os arquivos.

O que poderia estar errado?

    
por king_nak 30.01.2013 / 12:47

2 respostas

10

Adicionando solução, chegamos aos comentários como uma resposta completa para completar ...

O teste com su / sudo mostrou que, enquanto o mysqld reclamava de erros de permissão, o usuário mysql poderia gravar com sucesso na pasta, deixando claro que esse não era um problema de permissão do sistema de arquivos. (Um primeiro passo útil se confrontado com um problema semelhante)

Algumas distribuições do Linux (se não todas?) agora vêm com o AppArmor, que limita os arquivos / pastas que os executáveis têm permissão para acessar.

A solução neste caso foi simplesmente adicionar o novo caminho ao arquivo de política /etc/apparmor.d/usr.sbin.mysqld .

    
por 30.01.2013 / 20:05
1

No caso, se não houver uma busca do AppArmor para o selinux, porque na maior parte do linux baseado no rpm você verá o selinux. Apenas desative-o.

#setenforce 0
#getenforce

O comando Getenforce lhe dará permissão.

    
por 27.03.2018 / 23:28