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.

datadir         = /database/mysql
innodb_data_home_dir = /database/mysql
innodb_log_group_home_dir = /database/mysql

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.

/usr/sbin/mysqld: Can't find file: './mysql/plugin.frm' (errno: 13 - Permission denied)
2015-04-07 16:31:39 13641 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.

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.

ERROR 29 (HY000): File '....' not found (Errcode: 13)

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

# Allow data dir access
 /var/lib/mysql/ r,
 /var/lib/mysql/** rwk,

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

# Allow data dir access
 #/var/lib/mysql/ r,
 #/var/lib/mysql/** rwk,
 /database/mysql/ r,
 /database/mysql/** rwk,

Recarregue o apparmor

/etc/init.d/apparmor reload

Inicie o serviço do MySQL

/etc/init.d/mysql start

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.