it-swarm-pt.tech

Como posso mover arquivos de dados MySQL em partição diferente?

Eu tenho meu disco rígido particionado com duas partições, para que eu possa facilmente reinstalar o Ubuntu e experimentar diferentes versões sem perder meus dados de diretório de origem. É configurado assim:

20GB  -> /     (root)
180GB -> /home 

Eu faço muito trabalho de desenvolvimento, então eu tenho minha pasta /var/www para /home/valorin/workspace.

Mas eu quero fazer isso com meus arquivos de dados MySQL, assim como eu estou ficando irritado que cada vez que eu reinstalar minha máquina eu preciso fazer um SQLdump completo e restaurar todos os DBs antes que eu possa fazer mais trabalho.

Qual é a melhor maneira de fazer isso sem quebrar o MySQL?

28
Stephen RC

Bem, na verdade existe uma resposta específica do Ubuntu para esta questão.

Como mencionado por Gergoes link, isso é basicamente sobre como modificar /etc/mysql/my.cnf e definir um novo valor para datadir = na seção [mysqld] . Até agora, a parte inespecífica da resposta.

Assumindo que você está executando uma versão um tanto moderna do Ubuntu, você pode muito bem ter AppArmor instalado por padrão, com um perfil para /usr/sbin/mysqld em modo reforçado. Esse perfil padrão provavelmente não aceitará seu novo datadir.

Vamos supor que seu novo datadir seja /home/data/mysql .

Se você abrir o arquivo /etc/apparmor.d/usr.sbin.mysqld , você, entre as regras, encontrará 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
31
andol

Super usuário tem um bom passo a passo instruções sobre como resolver este problema

Aqui está um outro conjunto de instruções sobre como fazer a mesma coisa http://www.ubuntugeek.com/how-to-change-the-mysql-data-default-directory.html

Aqui é repostado. Ir e até votar o original, se você puder em super usuário.

Depois de alguma confusão geral sobre permissões, percebi que o problema não era que eu não tivesse minhas permissões e caminhos certos, mas que o AppArmor estava impedindo o mysql de ler e gravar no novo local.

Esta é minha solução:

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

$ Sudo stop mysql

Em seguida, mova todos os diretórios do banco de dados para sua nova home:

$ 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).

Então, educadamente, peça ao AppArmor para permitir que o mysql use a nova pasta:

$ Sudo vim /etc/apparmor.d/usr.sbin.mysqld

adicione linhas:

/new-mysql-dir/ r,
/new-mysql-dir/** rwk,

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

$ Sudo vim /etc/mysql/my.cnf 

mude a linha:

datadir=/var/lib/mysql

para:

datadir=/my-new-db-dir/

NOTA: Dependendo da configuração do banco de dados, talvez seja necessário alterar também 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

Espero que isto ajude!

4
nelaaro

Para quem gosta de mim trabalha com o VirtualBox e precisa mover o datadir do MySQL para uma pasta compartilhada no sistema Host, siga o tutorial simples em http://vacilando.org/en/article/moving-mysql-data -files-virtualbox-shared-folder

0
Vacilando

Isso realmente não é específico do Ubuntu. No entanto, aqui está algo que pode ajudar: http://developer.spikesource.com/wiki/index.php/How_to_change_the_mysql_database_location

0
Nathan Osman