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
.