Como mover arquivos de dados do MySQL para uma partição diferente?

27

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

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

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

Mas eu também quero fazer isso com meus arquivos de dados MySQL, pois estou ficando irritado porque cada vez que eu reinstalo minha máquina, eu preciso fazer um SQLdump completo e restaurar todos os DBs antes que eu possa fazer mais trabalhos.

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

    
por Stephen RC 29.07.2010 / 01:56

5 respostas

31

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 = no [ mysqld] seção. 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 o AppArmor instalado por padrão, com um perfil para / usr / sbin / mysqld no modo imposto. 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ê 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
    
por andol 29.07.2010 / 19:26
4

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

Aqui está outro conjunto de instruções sobre como fazer a mesma coisa link

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

Após alguma confusão geral sobre as permissões, percebi que o problema não era que eu não tivesse minhas permissões e caminhos corretos, mas que o AppArmor estava impedindo que o mysql lesse e escrevesse para o novo local.

Esta é a 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 casa:

$ 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

adicionar linhas:

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

Em seguida, diga ao mysql que o datadir foi movido:

$ sudo vim /etc/mysql/my.cnf 

altere 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 isso ajude!

    
por nelaaro 24.03.2011 / 11:48
0

Isso realmente não é específico do Ubuntu. No entanto, aqui está algo que pode ajudar: link

    
por Nathan Osman 29.07.2010 / 01:57
0

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 link

    
por Vacilando 31.05.2014 / 16:13
-1

Isso não funcionará assim.

usuário mysql tem que ter o direito de escrever para o novo diretório:

sudo chown -R mysql:mysql /newdatadir
sudo chmod -R 754 /newdatadir
sudo chmod 754 /newdatadir/..
    
por Marin Marušić 11.04.2013 / 19:51

Tags