Se você estiver executando o Ubuntu (e possivelmente outras versões recentes do Linux), pode acontecer que o MySQL tenha acesso negado ao local do seu arquivo, mesmo que as permissões do arquivo estejam corretas. Isso é causado pelo AppArmor , um módulo de segurança do Linux que implementa controles de acesso obrigatórios baseados em nome. Para verificar se você está executando o AppArmor, tente o comando:
$ sudo apparmor_status
Se isso funcionar e incluir o mysqld, você provavelmente precisará alterar sua configuração. Isso foi descrito em um post útil por andol em AskUbuntu , mas isso resolveu o problema para mim apenas à primeira vista (eu reproduzo o post de andol abaixo por conveniência, e no caso da outra página mudar).
Após mover o arquivo de banco de dados e colocar um link simbólico, o arquivo não cresceu mais e o arquivo principal do InnoDB foi gravado (embora eu use innodb_file_per_table
para ter arquivos DB individuais). Presumo agora que as mudanças sugeridas no post por andol (e muitos outros lugares na web) não são de fato suficientes. Eu finalmente mudei todo o meu diretório de dados do MySQL e editei o arquivo do AppArmor /etc/apparmor.d/tunables/alias
(e nenhum outro arquivo) para fazer a mudança (a documentação está no arquivo). Isso funcionou corretamente no Ubuntu 12.4 (preciso).
Aqui está o que andol escreveu - como eu disse acima, isso não funcionou para mim.
Vamos supor que seu novo datadir seja / home / data / mysql .
Se você abrir o arquivo /etc/apparmor.d/usr.sbin.mysqld , você encontrará, entre as regras, essas duas linhas.
/var/lib/mysql/ r,
/var/lib/mysql/** rwk,
Assumindo nosso exemplo acima, eles terão que ser substituídos ou (provavelmente preferíveis) complementados por essas duas linhas.
/home/data/mysql/ r,
/home/data/mysql/** rwk,
Antes de podermos iniciar nosso servidor MySQL, com seu novo datadir, também teremos que recarregar explicitamente nosso novo perfil apparmor.
$ sudo apparmor_parser -r /etc/apparmor.d/usr.sbin.mysqld