Como mover o datadir do MySQL com o mínimo de tempo de inatividade?

3

Digamos que eu tenha a partição sda2 montada em /var e esteja quase cheia. Eu tenho um segundo disco sdb cuja partição sdb1 eu quero montar como /var .

Agora, como um serviço em execução (mysql) está usando /var o tempo todo, existe uma maneira de alternar sem interromper o serviço?

    
por JohnnyFromBF 04.03.2013 / 18:08

4 respostas

9

Configure um segundo servidor como escravo. Você provavelmente deseja uma configuração mestre / mestre para que o host possa realizar gravações. Mova o IP para esta segunda máquina. Agora você pode fazer o seu maint na primeira máquina. Isso minimizará o tempo de inatividade do serviço MySQL.

    
por 04.03.2013 / 19:39
2

Sinto dizer que a resposta é não, não existe. Se você começar a mover o sistema de arquivos enquanto o mysql estiver usando, você terá seu banco de dados inteiramente preparado.

    
por 04.03.2013 / 18:16
2

Primeiramente: Faça como o toppledwagon disse e configure um servidor slave .

Mas como um ponto secundário: Você não precisa mover o MySQL (a menos que seja realmente a única coisa que ocupa espaço substancial em /var ): Se você tiver muito lixo em /var/log , /var/spool , /var/www , etc. você pode movê-los para sistemas de arquivos separados também.

Na realidade, o MySQL é provavelmente seu gorila de 1.000 libras na partição, mas se você for REALMENTE processado por espaço (e apenas excluir outras coisas não é uma opção), você pode movê-lo como um paliativo servidor escravo.

    
por 05.03.2013 / 03:29
1

De acordo com a resposta de JennyD, não há como fazê-lo sem desligar o banco de dados.

No entanto, se o banco de dados mysql em si não for tão grande e a velocidade de E / S do sistema for razoavelmente alta, você poderá fazer isso facilmente, bastando acoplar alguns comandos e executá-lo em pouco tempo. Eu fiz isso com sucesso várias vezes para bancos de dados críticos do mysql. Talvez anuncie a manutenção e faça alguns testes em um sistema de teste para descobrir quanto tempo leva.

Algo como:

/etc/init.d/mysql stop && mv /var/lib/mysql/database /mnt/newdisk/mysql/ && ln -s /mnt/newdisk/mysql/database /var/lib/mysql/database && /etc/init.d/mysql start

É um pouco grosseiro, mas eficaz. E prático em muitos casos (provavelmente em todos os sistemas, exceto os mais cruciais, "não pode ser"). O "& &" no comando garante que, se um comando anterior falhar, ele não continuará.

    
por 05.03.2013 / 03:21