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?