sql >> Database >  >> RDS >> Mysql

Mysql-waarschuwingscode 1592 Onveilige verklaring geschreven naar het binaire logboek met instructieformaat

U bent vermoedelijk bekend met de twee formaten van binaire logging , statement-based -- die de feitelijke vragen registreert die gegevens op de master wijzigen zodat ze kunnen worden uitgevoerd op de slave, en row-based -- die voor- en/of na-afbeeldingen registreert van de daadwerkelijke rijgegevens die waren gewijzigd door de query, zodat de slaaf die wijzigingen rechtstreeks op zijn gegevens kan toepassen... en mixed-mode, waarbij de optimizer en de opslagengine per query bepalen welk formaat het optimale formaat is.

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 .




  1. Een subtekenreeks extraheren in MySQL

  2. Manieren om SQL Server te repareren Detecteerde een op logische consistentie gebaseerde I/O-fout

  3. Hoe converteer je alle tabellen van MyISAM naar InnoDB?

  4. Node.js verbinding maken via ssh