Um procedimento comum após a instalação do MySQL é alterar o datadir e normalmente é para outra unidade de disco. Nos servidores que eu administro sempre busco deixar o datadir em uma unidade de disco e a gravação de logs em outra, isso faz não existir concorrência de I/O no momento de leitura ou gravação de dados.

Eu normalmente utilizo CentOS para o MySQL mas devido a um projeto acabei utilizando Ubuntu 14.04. Toda a instalação, tuning, etc… foi maravilhosamente bem, até o momento em que eu foi alterar o datadir do MySQL.

Então eu parei o serviço do MySQL com o comando /etc/init/d/mysql stop , e editei o /etc/mysql/my.cnf para alterar as variáveis de datadir e variáveis de diretório das tabelas InnoDB.

Copy to Clipboard

Nesse momento os problemas começaram, o serviço do MySQL não levantou de forma alguma, lendo o log de erros ficou claro que o problema era permissão para acessar os arquivos no novo diretório.

Copy to Clipboard

Eu achei bem estranha essa mensagem, pois quando copiei eu tomei o cuidado para copiar as permissões corretamente utilizando o comando cp -pR /var/lib/mysql/ /database/. Nesse momento comecei a brincar com as permissões, testeis todas as combinações que vieram na minha cabeça e a mensagem de erro era sempre a mesma. Nesse momento me dei conta que o problema não estava no MySQL, mas sim no SO.
Algum tempo atrás eu tive problemas com o comando LOAD DATA INFILE no ubuntu, onde a mensagem exibida era.

Copy to Clipboard

Acho que o que fez eu ligar uma coisa na outra foi o Errcode/errno 13.

Acontece que o Ubuntu tem um cara chamado apparmor e é necessário configurar ele para indicar onde o MySQL para ler/gravar os seus dados.

Para resolver o problema edite o arquivo /etc/apparmor.d/usr.sbin.mysqld

Procure por

Copy to Clipboard

Comente essas duas linhas e adiciona novas linhas com o novo diretório

Copy to Clipboard

Recarregue o apparmor

Copy to Clipboard

Inicie o serviço do MySQL

Copy to Clipboard

Após alterar o datadir e reiniciar o serviço do MySQL, execute o mysql_upgrade, ele irá corrigir algum possível problema em tabelas internas do MySQL. Veja mais em https://dev.mysql.com/doc/refman/5.6/en/mysql-upgrade.html

Pronto, agora o serviço do MySQL pode ser iniciado com sucesso.