Mysql
 sql >> Database >  >> RDS >> Mysql

Codice di avviso Mysql 1592 Istruzione non sicura scritta nel registro binario utilizzando il formato dell'istruzione

Presumibilmente hai familiarità con i due formati di registrazione binaria , basato su istruzioni -- che registra le query effettive che modificano i dati sul master in modo che possano essere eseguite sullo slave e basato su righe -- che registra le immagini precedenti e/o successive dei dati di riga effettivi che erano modificato dalla query, in modo che lo slave possa applicare direttamente tali modifiche ai suoi dati... e in modalità mista, in cui l'ottimizzatore e il motore di archiviazione determinano quale formato è il formato ottimale in base alla query.

L'istruzione che stai eseguendo non è sicura in linea di principio perché stai usando INSERT ... SELECT in una tabella con una colonna a incremento automatico. Se una query di quella forma generale sono stati utilizzati in una STATEMENT -based e il SELECT non ha restituito le righe nello stesso ordine su master e slave, le righe potrebbero essere selezionate in un ordine diverso e quindi finire con valori di incremento automatico diversi.

In pratica, lo specifico la query che stai eseguendo è deterministico perché stai inserendo solo una riga e stai specificando in modo esplicito il valore di incremento automatico. Sospetto che sia questa la causa della tua confusione. Tuttavia, sembra che tu stia ancora attivando l'avviso perché stai eseguendo INSERT ... SELECT in una tabella con un incremento automatico e il server sembra applicare la determinazione generalizzata "non sicura" alla query per principio, piuttosto che per precisione.

Cambiare il tuo binlog_format a MIXED dovrebbe far scomparire l'avviso, poiché il server può cambiare modalità a sua discrezione... ed è molto improbabile che abbia effetti collaterali negativi. Se non fosse per il fatto che STATEMENT è sempre stata l'impostazione predefinita (poiché inizialmente era l'unico tipo di replica disponibile), sospetto che avrebbero reso MIXED l'impostazione predefinita molto tempo fa... infatti, se ti familiarizzi con gli interni dei log binari, probabilmente saresti propenso a fare come me e ad usare ROW praticamente su tutto... tende a creare un registro binario molto più utile per la risoluzione dei problemi e per evitare problemi, perché i dati delle righe "vecchie" sono registrati su DELETE e UPDATE .