Eu tenho o MySQL (5.5) na configuração master-slave e criei outro servidor slave.
Parei o escravo original, joguei os dados, copiei e reimportei e funcionou bem. Observei a posição master_log do escravo original e usei esses comandos para configurá-lo no novo escravo
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 recebi
Last_IO_Error: erro fatal 1236 do mestre ao ler dados do log binário: 'a entrada do evento de log excedeu max_allowed_packet; Aumentar max_allowed_packet no master '
No entanto, quando iniciei o escravo original, ele alcançou muito bem e agora está sincronizado.
Então as perguntas:
o valor atual é 16 milhões, como sei qual o tamanho máximo? (Prefiro evitar tentativa e erro com um servidor de produção).
por que preciso aumentar o valor do mestre quando o escravo original lidou muito bem? O problema poderia realmente estar com o novo escravo?
atualizar
Aumentei o max_allowed_packet para 1073741824, como Rolando sugeriu no mestre, no antigo escravo e no novo escravo, e os reiniciei ( SET GLOBAL max_allowed_packet = 1073741824;
por algum motivo não pareceu levar)
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 do 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), problema de rede ou um erro no código MySQL do mestre ou escravo. Se você quiser verificar o registro binário do mestre ou o relé do escravo, poderá saber seus nomes emitindo 'SHOW SLAVE STATUS' neste escravo.
Se eu faço um mysqlbinlog no arquivo do mestre, ele passa com comandos muito felizes por séculos - o arquivo é 722M - se eu fizer isso no 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> show variable 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 master:
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 duas versões estão muito distantes?
fonte
Respostas:
Não há problema em maximizar o
max_allowed_packet
1G. Sempre que um pacote MySQL é construído, ele não salta para 1G desde o início. Por quê?Primeiro você precisa saber o que é um pacote MySQL. Página 99 do Livro
explica nos parágrafos 1 a 3 da seguinte maneira:
Compare isso com a documentação do MySQL em
max_allowed_packet
:Dada essa informação, você deve estar satisfeito com o fato de o MySQL expandir e contratar o pacote MySQL conforme necessário. Portanto, vá em frente e
max_allowed_packet
como 1G no mestre e no escravonet_buffer_length
para seu valor máximo de 1M no mestre e no escravoMestre e Escravo devem corresponder em termos de quem eles transmitem dados, especialmente dados BLOB.
UPDATE 2013-07-04 07:03 EDT
Nas 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 começa com um novo. Você estará replicando a partir do Último Evento BinLog Principal (BinLog, Position) que foi executado no Escravo.De uma chance !!!
fonte
MASTER_LOG_FILE
nome errado . Por exemplo, usadomysql-bin.000001
quando eu deveria ter usado amysql-bin.000003
partirSHOW MASTER STATUS
deCHANGE MASTER TO
.De certa forma embaraçoso, o problema eram nomes de arquivos incorretos para logs, causando resultados estranhos, reimportados com os nomes de arquivos corretos e estava tudo bem com a cabeça envergonhada
fonte