Mover dados do MySQL para outro diretório

2

Estou tentando mover arquivos de dados de uma instalação do MySQL para outro lugar, mas não funciona.

Ao tentar iniciar o mysqld, eu recebo isso em /var/log/mysql/error.log :

110922  7:27:40 [Note] Plugin 'FEDERATED' is disabled.
/usr/sbin/mysqld: Can't find file: './mysql/plugin.frm' (errno: 13)
110922  7:27:40 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
110922  7:27:40  InnoDB: Initializing buffer pool, size = 512.0M
110922  7:27:40  InnoDB: Completed initialization of buffer pool
110922  7:27:40  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.

O acima acontece mesmo se eu tentar algo tão inocente como:

sudo cp -a /var/lib/mysql /var/lib/mysql2

... e altere a configuração datadir em /etc/mysql/my.cnf para /var/lib/mysql2

(Eu obtenho o mesmo resultado se eu deixar my.cnf como está, e crie um link simbólico chamado mysql2 para apontar para o mysql.)

Isso é um tanto desconcertante. As permissões de arquivo são exatamente iguais no datadir copiado. E obviamente eu estou parando / iniciando o daemon antes de fazer essas mudanças ( sudo service mysql stop etc.) Alguma idéia do que estou fazendo errado?

Este é o Ubuntu 11.04 no Amazon EC2 (instância de 64 bits m1.large).

(Na verdade, eu gostaria de mover os dados do MySQL para outro volume do EBS, para um caminho como /mnt/data/mysql ou /data/mysql , mas o cenário mínimo acima é suficiente para reproduzir o problema.)

    
por Jonik 22.09.2011 / 10:29

3 respostas

7

Você está correndo para regras do AppArmor que proíbem o MySQL de abrir arquivos onde você os colocou. Se você verificar os arquivos de log do sistema, encontrará uma mensagem de erro criptografada para esse efeito.

As soluções incluem:

  1. Desative o AppArmor (não recomendado)

  2. Edite as regras do AppArmor (complicadas)

  3. Use o bind de montagem para fazer com que o MySQL pense que seus arquivos de dados estão no local original enquanto eles estão realmente no volume do EBS. Reverta suas alterações para datadir .

Eu escrevi um artigo para a Amazon descrevendo as melhores práticas da comunidade para exatamente o que você está tentando fazer, incluindo o exemplo de ligação da montagem:

Running MySQL on Amazon EC2 with EBS
http://ec2ebs-mysql.notlong.com

Observe que o ID da AMI no artigo é antigo. Usando um Ubuntu AMI moderno, você precisará substituir / dev / sdh por / dev / xvdh no mkfs.xfs e / etc / fstab (mas não nas linhas de comando das ferramentas ec2).

    
por 22.09.2011 / 11:43
3

InnoDB: The error means mysqld does not have the access rights to the directory.

sudo chown -R mysql:mysql /var/lib/mysql2/
    
por 22.09.2011 / 10:47
0

tente editar seu arquivo /etc/apparmor.d/local/usr.sbin.mysqld e insira estas linhas:

/var/lib/mysql2/ r,
/var/lib/mysql2/** rwk,

e reinicie o serviço ( /etc/init.d/mysql restart )

    
por 18.07.2014 / 00:05