Como posso criar uma réplica escrava de um servidor MySQL sem parar o master?

3

Para garantir que os dados no escravo e mestre estejam no mesmo lugar para replicação, o novo mestre deve ser parado e os dados transferidos para o novo escravo antes de iniciar o mestre novamente, pelo menos essa é uma opção.

Como posso iniciar a replicação de um servidor MySQL sem parar o master?

    
por DavidM 01.06.2009 / 20:54

4 respostas

6

opção fácil - se você tiver uma pequena quantidade de dados, use

mysqldump --master-data -uyouruser -p.... -a > dump.sql

isso bloqueará todas as tabelas e gerará um dump com informações sobre a posição atual do mestre. despejo irá bloquear todas as tabelas - provavelmente não é algo que você quer fazer quando você tem site ocupado e dados de 20GB para despejar.

opção mais avançada. pegue seus dados na partição lvm e use o instantâneo lvm. que está em um processo bloqueia todas as tabelas FLUSH TABLES WITH READ LOCK; SHOW MASTER STATUS; em outro proces, execute a sincronização algumas vezes para uma boa medida e crie um instantâneo lvm de seus logs de dados / innodb. logo após criar um instantâneo [que leva 2-3 segundos para mim] desbloqueie todas as tabelas.

agora você tem um instantâneo consistente e seu servidor SQL ainda está em execução. montar instantâneo e 'enviar' o mais cedo possível para outro servidor. lá rodar o mysql nesses dados, deixar o innodb recuperar todos os dados dos logs e executar o mysqldump, que é enviado para o escravo.

inicie o escravo usando as informações do SHOW MASTER STATUS que você executou antes de tirar o instantâneo do LVM.

mylvmbackup faz exatamente isso. leia sobre isso aqui .

    
por 01.06.2009 / 21:04
0

FLUSH TABLES WITH READ LOCK no mestre, copie os dados para o escravo (possivelmente com operações SELECT NULL periódicas no cliente que está falando com o mestre para evitar que os bloqueios sejam perdidos nos tempos limite de conexão) e inicie a replicação no escravo e UNLOCK TABLES no mestre.

Todas as operações mestre especificadas precisam estar em uma única sessão do cliente. Não tente sair enquanto a cópia estiver em andamento.

    
por 01.06.2009 / 21:02
0

Como pQd mencionado acima:

mysqldump --master-data -uyouruser -p.... -a > dump.sql

mas por que não ssh na máquina remove e canaliza os dados diretamente pelo ssh?

    
por 01.06.2009 / 21:59
0

Ainda não posso comentar, mas e a diferença entre o MyISAM e o INNODB? Não tenho certeza se você pode simplesmente fazer uma tabela de bloqueio com INNODB e esperar um bom instantâneo.

    
por 16.06.2009 / 23:46