Tengo MySQL (5.5) en la configuración maestro-esclavo y creé otro servidor esclavo.
Detuve al esclavo original, descargué los datos, copié y volví a importar y funcionó bien. Noté la posición master_log del esclavo original y usé estos comandos para configurarlo en el nuevo esclavo
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;
Cuando comencé el nuevo esclavo que obtuve
Last_IO_Error: error grave 1236 del maestro al leer datos del registro binario: 'la entrada del evento de registro excedió max_allowed_packet; Aumentar max_allowed_packet en master '
Sin embargo, cuando comencé el esclavo original, se puso al día bien y ahora está sincronizado.
Entonces las preguntas:
el valor actual es 16M, ¿cómo sé qué tan grande ir? (Prefiero evitar la prueba y error con un servidor de producción).
¿por qué necesito aumentar el valor en el maestro cuando el esclavo original se las arregló bien, podría realmente ser el problema con el nuevo esclavo?
actualizar
Aumenté el max_allowed_packet a 1073741824 como Rolando sugirió en el maestro, esclavo viejo y esclavo nuevo, y los reinicié ( SET GLOBAL max_allowed_packet = 1073741824;
por alguna razón no pareció tomar)
ahora el último error de IO es el mismo que antes, pero ahora veo
Last_SQL_Error: error de lectura del registro de retransmisión: no se pudo analizar la entrada del evento de registro de retransmisión. Las posibles razones son: el registro binario del maestro está dañado (puede verificar esto ejecutando 'mysqlbinlog' en el registro binario), el registro de retransmisión del esclavo está dañado (puede verificar esto ejecutando 'mysqlbinlog' en el registro de retransmisión), un problema de red, o un error en el código MySQL del maestro o esclavo. Si desea verificar el registro binario del maestro o el registro de retransmisión del esclavo, podrá conocer sus nombres al emitir 'SHOW SLAVE STATUS' en este esclavo.
Si hago un mysqlbinlog en el archivo del maestro, se desplaza más allá con comandos muy felices durante siglos: el archivo es 722M, si lo hago para el registro de retransmisión esclavo, obtengo
ERROR: Error en Log_event :: read_log_event (): 'Error de comprobación de cordura', data_len: 38916267, event_type: 69
ERROR: no se pudo leer la entrada en el desplazamiento 253: error en el formato de registro o error de lectura.
Sin embargo, verifiqué las variables y los cambios funcionaron
mysql> muestra las variables como '% max_allowed_packet%';
en el nuevo esclavo mostró max_allowed_packet
Y slave_max_allowed_packet
donde como en el maestro solo tienemax_allowed_packet
así que hice una verificación de versión en el maestro:
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 |
+-------------------------+--------------------------------------+
y en el nuevo esclavo
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 |
+-------------------------+--------------------------------------+
¿Estas 2 versiones están demasiado separadas?
fuente
Respuestas:
Está bien maximizar el máximo
max_allowed_packet
a 1G. Cada vez que se construye un paquete MySQL, no saltará a 1G desde el principio. ¿Por qué?Primero necesitas saber qué es un paquete MySQL. Página 99 del libro
lo explica en los párrafos 1-3 de la siguiente manera:
Compare eso con la documentación de MySQL en
max_allowed_packet
:Dada esta información, debe alegrarse de que MySQL se expanda y contraiga el paquete MySQL según sea necesario. Por lo tanto, adelante y
max_allowed_packet
en 1G tanto en maestro como en esclavonet_buffer_length
en su valor máximo de 1M tanto en maestro como en esclavoMaster y Slave deben coincidir en términos de a quién transmiten datos, especialmente datos BLOB.
ACTUALIZACIÓN 2013-07-04 07:03 EDT
De sus mensajes relacionados con el registro de retransmisión, parece que tiene lo siguiente
SUGERENCIA
La ejecución
CHANGE MASTER TO
borra todos los registros de retransmisión y comienza con uno nuevo. Se replicará desde el último evento maestro de BinLog (BinLog, posición) que se ejecutó en el esclavo.Darle una oportunidad !!!
fuente
MASTER_LOG_FILE
nombre incorrecto . Por ejemplo, usadomysql-bin.000001
cuando debería haberlo usadomysql-bin.000003
desdeSHOW MASTER STATUS
adentroCHANGE MASTER TO
.Más bien el problema era vergonzosamente nombres de archivos incorrectos para troncos, producir resultados extraños, reimportadas con los nombres de los archivos correctos y todo estaba bien cuelga la cabeza de vergüenza
fuente