Alterando o diretório de dados do MySQL no Ubuntu Server 10.04

9

Eu estava recebendo o seguinte erro ao tentar alterar o diretório de dados no servidor ubuntu 10.04.

100809 19:33:00 [Note] Plugin 'FEDERATED' is disabled.
/usr/sbin/mysqld: Can't find file: './mysql/plugin.frm' (errno: 13)
100809 19:33:00 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
100809 19:33:00  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: 'create'.
InnoDB: Cannot continue operation.
Norling Jr.
fonte
2
... e sua pergunta é? Observe que se você mover apenas o conteúdo de pastas e nenhum arquivo, você perderá todo o conteúdo da tabela do InnoDB.
quer
não há pergunta / colher. Imaginei que isso poderia ser interessante para as pessoas por aqui. Bom argumento sobre o conteúdo da tabela do InnoDB!
2
Se você quiser fazer e responder sua própria pergunta, tudo bem, mas reserve um tempo para realmente fazer uma pergunta e forneça sua resposta como resposta.
Zoredache

Respostas:

8

Depois de alguma confusão geral sobre permissões, o OP percebeu que o problema não era que ele não tinha permissões e direitos de caminhos, mas que o AppArmor estava impedindo o MySQL de ler e gravar no novo local.

Esta é a solução dele:

Primeiro pare o MySQL, para que nada de estranho aconteça enquanto você estiver mexendo:

$ sudo stop mysql

Em seguida, mova todos os diretórios do banco de dados para o novo local:

$ sudo mv /var/lib/mysql/<all folders> /new-mysql-dir/

Não mova os arquivos, eles serão gerados pelo mysql, apenas mova as pastas (que são os bancos de dados).

Em seguida, solicite educadamente ao AppArmor que permita ao mysql usar a nova pasta:

$ sudo vim /etc/apparmor.d/usr.sbin.mysqld
  >> add lines
     /new-mysql-dir/ r,
     /new-mysql-dir/** rwk,

Então diga ao mysql que o datadir foi movido:

$ sudo vim /etc/mysql/my.cnf 
  >> change the line
     datadir=/var/lib/mysql
  >> to
     datadir=/my-new-db-dir/

NOTA: Dependendo da configuração do banco de dados, talvez seja necessário alterar innodb-data-home-dir etc.

Em seguida, reinicie o AppArmor para ler as novas configurações:

$ sudo /etc/init.d/apparmor restart

E inicie o MySQL novamente usando o novo datadir:

$ sudo start mysql
splattne
fonte
2
você pode manter o banco de dados em funcionamento vinculando os arquivos ao novo local, em vez de movê-los ... a menos que os dois locais de dados estejam em partições separadas.
cpbills
As instruções para mover apenas diretórios não são precisas no caso de você usar o innodb. Nesse caso, você terá que mover os dados do innodb e os arquivos de log também (ibdata *, ib_logfile *).
Hillel
Uma nota para outros tão descuidados quanto eu. Você precisa ter as barras no caminho na configuração do AppArmor, caso /new-mysql-dir/ rcontrário ainda será negado. Coisas básicas do Linux, mas nunca consigo corrigir as barras finais.
24418 Jeff
Eu ainda estava sendo negado pelo AppArmor. Esse tópico ajudou a superar esse obstáculo final.
24418 Jeff