Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Mysql Warning Code 1592 Niebezpieczna instrukcja zapisana w dzienniku binarnym przy użyciu formatu instrukcji

Prawdopodobnie znasz dwa formaty rejestrowania binarnego , oparte na instrukcjach – które rejestruje rzeczywiste zapytania, które modyfikują dane na urządzeniu głównym, aby mogły być wykonywane na urządzeniu podrzędnym, oraz oparte na wierszach – które rejestruje obrazy przed i/lub po rzeczywistych danych wiersza, które zostały zmieniony przez zapytanie, dzięki czemu urządzenie podrzędne może bezpośrednio zastosować te zmiany do swoich danych... oraz w trybie mieszanym, w którym optymalizator i silnik pamięci masowej określają, który format jest optymalnym formatem na podstawie zapytania po zapytaniu.

Oświadczenie, które wykonujesz, jest niebezpieczne w zasadzie ponieważ używasz INSERT ... SELECT do tabeli z kolumną autoinkrementacji. Jeśli zapytanie w tej formie ogólnej zostały użyte w STATEMENT środowiska i SELECT nie zwrócił wierszy w tej samej kolejności na urządzeniu nadrzędnym i podrzędnym, wiersze można wybrać w innej kolejności, a tym samym uzyskać różne wartości automatycznego przyrostu.

W praktyce konkretne zapytanie, które wykonujesz jest deterministyczny, ponieważ wstawiasz tylko jeden wiersz i jawnie określasz wartość automatycznego zwiększania. Podejrzewam, że to jest przyczyną twojego zamieszania. Jednak wygląda na to, że nadal wyświetlasz ostrzeżenie, ponieważ wykonujesz INSERT ... SELECT do tabeli z automatycznym przyrostem, a serwer wydaje się stosować uogólnione określenie „niebezpieczne” do zapytania z zasady, a nie precyzji.

Przełączanie binlog_format do MIXED powinno sprawić, że ostrzeżenie zniknie, ponieważ serwer może przełączać tryby według własnego uznania... i jest bardzo mało prawdopodobne, aby miał negatywne skutki uboczne. Gdyby nie fakt, że STATEMENT zawsze był domyślny (ponieważ początkowo był to jedyny dostępny rodzaj replikacji), podejrzewam, że zrobiliby MIXED dawno temu domyślne... w rzeczywistości, jeśli zapoznasz się z wewnętrznymi funkcjami dzienników binarnych, prawdopodobnie będziesz skłonny zrobić to, co ja i użyć ROW na prawie wszystkim... zwykle tworzy o wiele bardziej użyteczny dziennik binarny do rozwiązywania problemów i wycofywania się z kłopotów, ponieważ "stare" dane wiersza są rejestrowane w DELETE i UPDATE .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak stworzyć tabelę na podstawie zestawu wyników JDBC

  2. SQLSTATE[HY000] [2002] Brak takiego pliku lub katalogu

  3. MySQL Niewrażliwy na wielkość liter, ale wrażliwy na akcenty UTF8 Unikalny klucz

  4. Bardzo powolne usuwanie w bazie mysql za pomocą podzapytania

  5. Neo4j - Usuń węzeł za pomocą Cypher