sql >> Base de Datos >  >> RDS >> Mysql

Código de advertencia de Mysql 1592 Declaración insegura escrita en el registro binario usando formato de declaración

Probablemente esté familiarizado con los dos formatos de registro binario , basado en declaraciones, que registra las consultas reales que modifican los datos en el maestro para que puedan ejecutarse en el esclavo, y basado en filas, que registra imágenes anteriores y/o posteriores de los datos de fila reales que fueron cambiado por la consulta, para que el esclavo pueda aplicar directamente esos cambios a sus datos... y modo mixto, donde el optimizador y el motor de almacenamiento determinan qué formato es el formato óptimo consulta por consulta.

La instrucción que está ejecutando no es segura en principio porque estás usando INSERT ... SELECT en una tabla con una columna de incremento automático. Si una consulta de esa forma general se utilizaron en una STATEMENT -entorno basado, y el SELECT no devolvió las filas en el mismo orden en el maestro y el esclavo, las filas podrían seleccionarse en un orden diferente y, por lo tanto, terminar con diferentes valores de incremento automático.

En la práctica, el específico la consulta que está ejecutando es determinista porque solo está insertando una fila y está especificando explícitamente el valor de incremento automático. Sospecho que esa es la causa de tu confusión. Sin embargo, parece que sigue activando la advertencia porque está haciendo INSERT ... SELECT en una tabla con un incremento automático, y el servidor parece estar aplicando la determinación generalizada "insegura" a la consulta como una cuestión de principio, en lugar de precisión.

Cambiando su binlog_format a MIXED debería hacer que la advertencia desaparezca, ya que el servidor puede cambiar de modo a su discreción... y es muy poco probable que tenga efectos secundarios negativos. Si no fuera por el hecho de que STATEMENT siempre ha sido el predeterminado (ya que inicialmente ese era el único tipo de replicación disponible), sospecho que habrían hecho MIXED el valor predeterminado hace mucho tiempo... de hecho, si se familiariza con el funcionamiento interno de los registros binarios, probablemente se inclinará por hacer lo que yo hago y usar ROW en casi todo... tiende a ser un registro binario mucho más útil para solucionar problemas y evitar problemas, porque los datos de la fila "antigua" se registran en DELETE y UPDATE .