De instructie die u uitvoert is in principe onveilig omdat je INSERT ... SELECT
. gebruikt in een tabel met een auto-increment kolom. Als een zoekopdracht van die algemene vorm werden gebruikt in een STATEMENT
-gebaseerde omgeving, en de SELECT
de rijen niet in dezelfde volgorde op master en slave heeft geretourneerd, kunnen de rijen in een andere volgorde worden geselecteerd en zo eindigen met verschillende auto-increment-waarden.
In de praktijk is de specifieke zoekopdracht die u uitvoert is deterministisch omdat u slechts één rij invoegt en u expliciet de waarde voor automatisch verhogen opgeeft. Ik vermoed dat dat de oorzaak is van je verwarring. Het lijkt er echter op dat u nog steeds de waarschuwing activeert omdat u INSERT ... SELECT
doet in een tabel met een automatische verhoging, en de server lijkt de algemene "onveilige" bepaling toe te passen op de query als een kwestie van principe, in plaats van precisie.
Uw binlog_format
wijzigen naar MIXED
zou de waarschuwing moeten laten verdwijnen, aangezien de server naar eigen goeddunken van modus kan veranderen... en het is zeer onwaarschijnlijk dat er negatieve bijwerkingen optreden. Als het niet zo was dat STATEMENT
altijd de standaard is geweest (aangezien dat aanvankelijk de enige beschikbare replicatie was), vermoed ik dat ze MIXED
zouden hebben gemaakt de standaard lang geleden... in feite, als je jezelf vertrouwd maakt met de binnenkant van binaire logbestanden, zou je waarschijnlijk geneigd zijn om te doen wat ik doe en ROW
te gebruiken op zo ongeveer alles... het heeft de neiging om een veel nuttiger binair logboek te maken voor het oplossen van problemen en om uzelf uit de problemen te helpen, omdat de "oude" rijgegevens zijn aangemeld bij DELETE
en UPDATE
.