Eu tenho o MySQL (5.5) na configuração master-slave e criei outro servidor slave.
Parei o slave original, despejei os dados, copiei e reimportei e funcionou bem. Eu anotei o master_log pos do slave original e usei esses comandos para configurá-lo no novo slave
CHANGE MASTER TO MASTER_HOST='<ipaddress>',
MASTER_USER='<username>', MASTER_PASSWORD='<password>',
MASTER_PORT=3306, MASTER_LOG_FILE='mysql-bin.000851',
MASTER_LOG_POS=15824150,
MASTER_CONNECT_RETRY=10;
Quando eu comecei o novo escravo eu consegui
Last_IO_Error: Obteve o erro fatal 1236 do mestre ao ler dados do log binário: 'entrada de evento de log excedida max_allowed_packet; Aumente max_allowed_packet no master'
No entanto, quando eu iniciei o slave original, ele pegou bem e agora está em sincronia.
Então as perguntas:
o valor atual é 16M, como eu sei o quão grande devo ir? (Prefiro evitar tentativa e erro com um servidor de produção).
por que eu preciso aumentar o valor no mestre quando o escravo original lidou bem, o problema realmente pode ser com o novo escravo?
atualizar
Aumentei o max_allowed_packet para 1073741824 como Rolando sugeriu no mestre, escravo antigo e novo escravo, e reiniciei-os ( SET GLOBAL max_allowed_packet = 1073741824;
por algum motivo não pareceu demorar)
agora o último erro de IO é o mesmo de antes, mas agora vejo
Last_SQL_Error: Falha na leitura do log de retransmissão: não foi possível analisar a entrada do evento de log de retransmissão. As possíveis razões são: o log binário do mestre está corrompido (você pode verificar isso executando 'mysqlbinlog' no log binário), o log de retransmissão do escravo está corrompido (você pode verificar isso executando 'mysqlbinlog' no log de retransmissão), um problema de rede, ou um bug no código MySQL do mestre ou escravo. Se você quiser verificar o log binário do mestre ou o log de retransmissão do escravo, poderá saber seus nomes emitindo 'SHOW SLAVE STATUS' neste escravo.
Se eu fizer um mysqlbinlog no arquivo do mestre, ele passará com comandos muito felizes por muito tempo - o arquivo é 722M - se eu fizer isso para o log de retransmissão do escravo, recebo
ERRO: Erro no Log_event::read_log_event(): 'Falha na verificação de integridade', data_len: 38916267, event_type: 69
ERRO: Não foi possível ler a entrada no deslocamento 253: Erro no formato do log ou erro de leitura.
Eu verifiquei as variáveis e as alterações funcionaram no entanto
mysql> mostra variáveis LIKE '%max_allowed_packet%';
no novo escravo mostrou max_allowed_packet
E slave_max_allowed_packet
onde como no mestre só temmax_allowed_packet
então eu fiz uma verificação de versão no mestre:
mysql> show variables LIKE '%version%';
+-------------------------+--------------------------------------+
| Variable_name | Value |
+-------------------------+--------------------------------------+
| innodb_version | 1.1.6 |
| protocol_version | 10 |
| slave_type_conversions | |
| version | 5.5.11-log |
| version_comment | MySQL Community Server (GPL) by Remi |
| version_compile_machine | x86_64 |
| version_compile_os | Linux |
+-------------------------+--------------------------------------+
e no novo escravo
mysql> show variables LIKE '%version%';
+-------------------------+--------------------------------------+
| Variable_name | Value |
+-------------------------+--------------------------------------+
| innodb_version | 5.5.32 |
| protocol_version | 10 |
| slave_type_conversions | |
| version | 5.5.32-log |
| version_comment | MySQL Community Server (GPL) by Remi |
| version_compile_machine | x86_64 |
| version_compile_os | Linux |
+-------------------------+--------------------------------------+
Essas 2 versões estão muito distantes?
Não há problema em maximizar o
max_allowed_packet
para 1G. Sempre que um pacote MySQL é construído, ele não saltará para 1G desde o início. Por quê?Primeiro você precisa saber o que é um pacote MySQL. Página 99 do Livro
explica isso nos parágrafos 1-3 da seguinte forma:
Compare isso com a documentação do MySQL em
max_allowed_packet
:Dada esta informação, você deve estar feliz que o MySQL irá expandir e contratar o Pacote MySQL conforme necessário. Portanto, vá em frente e
max_allowed_packet
para 1G no mestre e no escravonet_buffer_length
para seu valor máximo de 1M tanto no Master quanto no SlaveMestre e Escravo devem corresponder em termos de quem eles transmitem dados, especialmente dados BLOB.
ATUALIZAÇÃO 2013-07-04 07:03 EDT
De suas mensagens sobre o log de retransmissão, parece que você tem o seguinte
SUGESTÃO
A execução
CHANGE MASTER TO
limpa todos os logs de retransmissão e inicia com um novo. Você estará replicando a partir do Último Evento BinLog Master (BinLog,Position) executado no Slave.De uma chance !!!
Embaraçosamente, o problema era nomes de arquivos incorretos para logs, causando resultados estranhos, reimportados com os nomes de arquivos corretos e tudo estava bem .
Se você vir o log binário no mestre, as posições do log binário estão erradas. Às vezes o erro não é o que parece ser. Não altere o valor máximo do pacote. Precisamos fazer um pequeno trabalho por aqui. Então, minha sugestão, você pode precisar redefinir as coordenadas de replicação do escravo. Use mysqlbinlog no mestre para identificar onde as transações começam e procure as transações adjacentes. Reinicialize conforme explicado abaixo.
Você pode encontrar mais detalhes sobre exatamente o que fazer neste artigo de solução de problemas do mysql . Espero que isso ajude.