Debido a la siguiente advertencia en mysqld.log
:
[Advertencia] Declaración insegura escrita en el registro binario usando el formato de declaración desde BINLOG_FORMAT = STATEMENT. La declaración no es segura porque usa una cláusula LIMIT. Esto no es seguro porque el conjunto de filas incluidas no se puede predecir.
Quiero cambiar el formato de replicación a MIXED
.
Pero de acuerdo con el documento MySQL:
No se recomienda cambiar el formato de replicación en tiempo de ejecución cuando existen tablas temporales, porque las tablas temporales se registran solo cuando se usa la replicación basada en instrucciones, mientras que con la replicación basada en filas no se registran.
Entonces, la pregunta es ¿cómo puedo identificar si existen tablas temporales para cambiar el formato de registro binario de manera segura?
fuente
Respuestas:
Dado que un binlog tendrá un formato específico en el momento en que lo haga, puede decidir no jugar con los dos formatos juntos, aunque MySQL (eh Oracle [todavía no puede salir de mi lengua]) construyó esta característica.
Para jugar de forma totalmente segura sin reiniciar mysql, intente lo siguiente:
Esto dejará el último binlog en el formato 'MIXTO'. El binlog penultimiate (penúltimo) existe simplemente cierra el último binlog que estaba en el formato anterior.
Todas las sesiones existentes antes de la primera
FLUSH LOGS;
comenzarán a escribirse en el último binlog una vez queUNLOCK TABLES;
se ejecute.Darle una oportunidad !!!
ADVERTENCIA
Dando crédito donde se debe, mi respuesta es realmente aprovecharse de la respuesta de @ Jonathan . Simplemente cierro y abro binlogs encima de eso. Obtiene un +1 por sacar esto primero.
ACTUALIZACIÓN 2011-10-12 13:58 EDT
Si le hace esto a un maestro activo y hay uno o más esclavos que se replican desde ese maestro, también debe preocuparse de que los registros de retransmisión estén en el nuevo formato. Esto es lo que puedes hacer:
En el esclavo, corre
STOP SLAVE;
En el Master ejecuta estos:
En el esclavo, corre
START SLAVE;
Al ejecutar
STOP SLAVE;
ySTART SLAVE;
rotar los registros de retransmisión, las nuevas entradas se replican en cualquier formato. Es posible que también desee aplicar el cambio binlog_format en el esclavo.fuente
Para cambiar binlog_format en tiempo de ejecución puede hacer:
Esto configurará todas las NUEVAS sesiones en un formato binlog mixto. Todas las sesiones existentes serán las que se hayan configurado previamente hasta que finalicen.
También puede hacerlo
set session binlog_format = 'MIXED';
manualmente para resolver cualquier problema con la sesión específicamente.fuente