Sie sind vermutlich mit den zwei Formaten der binären Protokollierung , anweisungsbasiert – was die eigentlichen Abfragen protokolliert, die Daten auf dem Master modifizieren, damit sie auf dem Slave ausgeführt werden können, und zeilenbasiert – was Vorher- und/oder Nachbilder der tatsächlichen Zeilendaten protokolliert durch die Abfrage geändert, sodass der Slave diese Änderungen direkt auf seine Daten anwenden kann ... und gemischter Modus, bei dem der Optimierer und die Speicher-Engine auf einer Abfrage-für-Abfrage-Basis bestimmen, welches Format das optimale Format ist.
Die von Ihnen ausgeführte Anweisung ist grundsätzlich unsicher weil Sie INSERT ... SELECT
verwenden in eine Tabelle mit einer Auto-Increment-Spalte. Wenn eine Abfrage dieser allgemeinen Form in einem STATEMENT
verwendet wurden -basierte Umgebung und die SELECT
die Zeilen nicht in der gleichen Reihenfolge auf Master und Slave zurückgeben, könnten die Zeilen in einer anderen Reihenfolge ausgewählt werden und somit zu unterschiedlichen Auto-Inkrement-Werten führen.
In der Praxis das spezifische Abfrage, die Sie ausführen ist deterministisch, da Sie nur eine Zeile einfügen und den Auto-Increment-Wert explizit angeben. Ich vermute, das ist der Grund für deine Verwirrung. Es scheint jedoch, dass Sie die Warnung immer noch auslösen, weil Sie INSERT ... SELECT
ausführen in eine Tabelle mit automatischem Inkrement, und der Server scheint die verallgemeinerte "unsichere" Bestimmung eher aus Prinzip als aus Genauigkeit auf die Abfrage anzuwenden.
Ändern Sie Ihr binlog_format
zu MIXED
sollte die Warnung verschwinden lassen, da der Server den Modus nach eigenem Ermessen wechseln kann ... und es sehr unwahrscheinlich ist, dass negative Nebenwirkungen auftreten. Wenn da nicht STATEMENT
wäre immer die Standardeinstellung war (da dies anfangs die einzige verfügbare Art der Replikation war), vermute ich, dass sie MIXED
gemacht hätten die Voreinstellung ist schon lange her ... tatsächlich, wenn Sie sich mit den Interna von Binärlogs vertraut machen, würden Sie wahrscheinlich geneigt sein, es mir gleich zu tun und ROW
zu verwenden auf so gut wie alles ... es neigt dazu, ein viel nützlicheres Binärlog für die Fehlersuche und die Rettung aus Schwierigkeiten zu machen, weil die "alten" Zeilendaten auf DELETE
protokolliert werden und UPDATE
.