Como mover arquivos de dados MySQL para partições diferentes?

27

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

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

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

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

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

Stephen RC
fonte

Respostas:

30

Bem, na verdade, existe uma resposta específica específica do Ubuntu para esta pergunta.

Como mencionado no link Gergoes, trata-se basicamente de modificar o /etc/mysql/my.cnf e definir um novo valor para datadir = na seção [mysqld] . Até agora, a parte não específica da resposta.

Supondo que você esteja executando uma versão moderna do Ubuntu, é bem possível que o AppArmor esteja 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 assumir que seu novo datadir será / home / data / mysql .

Se você abrir o arquivo /etc/apparmor.d/usr.sbin.mysqld , dentre as regras, essas duas linhas serão encontradas.

/var/lib/mysql/ r,
/var/lib/mysql/** rwk,

Assumindo o nosso exemplo acima, eles terão que ser substituídos ou (provavelmente preferível) 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 precisaremos recarregar explicitamente nosso novo perfil apparmor.

$ sudo apparmor_parser -r /etc/apparmor.d/usr.sbin.mysqld
andol
fonte
Isso não parece funcionar em Natty (11.4). Eu tive que iniciar o MySQL usando / usr / sbin / mysqld para que ele lesse meu diretório de dados alterados. Caso contrário, ele continuaria lendo meu diretório de dados antigo. Isso pode ser um erro do meu lado.
three-cups
O exemplo acima não conseguiu resolver o problema para mim no Ubuntu 12.04 (Precise). Eu descobri que é preciso editar o arquivo /etc/apparmor.d/tunables/alias para incluir uma linha "alias / var / lib / mysql / -> / home / data / mysql /". Com isso, I não precisou de alterações em nenhum dos outros arquivos do AppArmor. Ele funcionou imediatamente após reiniciar o AppArmor com "/etc/init.d/apparmor restart" e o MySQL com "restart mysql".
mak
Eu acho que certas permissões precisam ser definidas na nova pasta que deve ser usada. Alguém sabe o que eles são? Eu sei que a instalação do mysql cria um usuário mysql ... e que, por padrão, não consigo acessar o conteúdo da pasta / var / lib / mysql.
NullVoxPopuli
4

O superusuário tem boas instruções passo a passo sobre como resolver esse problema

Aqui está 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 é anunciado. Vá para cima e vote no original, se puder, no superusuário.

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

Esta é a minha solução:

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

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 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!

nelaaro
fonte
0

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

Nathan Osman
fonte
As instruções realmente não ajudaram, pois a parte que eu não consegui trabalhar foi o AppArmour e sua postagem apenas explicou de passagem. Além disso, este site tem perguntas específicas do Ubuntu? Como os novos usuários que procuram ajuda sabem o que é específico do Ubuntu ou não, e onde devem perguntar se são genéricos?
Stephen RC
Site indisponível.
Hengjie
-1

Isso não vai funcionar assim.

O usuário mysql precisa ter o direito de escrever no novo diretório:

sudo chown -R mysql:mysql /newdatadir
sudo chmod -R 754 /newdatadir
sudo chmod 754 /newdatadir/..
Marin Marušić
fonte