Wegen der folgenden Warnung in mysqld.log
:
[Warnung] Unsichere Anweisung, die im Anweisungsformat in das Binärprotokoll geschrieben wurde, da BINLOG_FORMAT = STATEMENT. Die Anweisung ist unsicher, da sie eine LIMIT-Klausel verwendet. Dies ist unsicher, da die enthaltenen Zeilen nicht vorhergesagt werden können.
Ich möchte das Replikationsformat auf MIXED
ändern.
Aber laut MySQL-Dokument:
Das Wechseln des Replikationsformats zur Laufzeit wird nicht empfohlen, wenn temporäre Tabellen vorhanden sind, da temporäre Tabellen nur bei Verwendung der anweisungsbasierten Replikation protokolliert werden, während sie bei der zeilenbasierten Replikation nicht protokolliert werden.
Die Frage ist also, wie ich feststellen kann, ob temporäre Tabellen vorhanden sind, um das binäre Protokollformat sicher zu wechseln.
Da ein Binlog in dem Moment, in dem Sie dies tun, ein bestimmtes Format hat, können Sie sich entscheiden, nicht mit den beiden Formaten zusammen zu spielen, obwohl MySQL (eh Oracle [kann mir immer noch nicht die Zunge runter rollen]) diese Funktion erstellt hat.
Versuchen Sie Folgendes, um ohne MySQL-Neustart auf Nummer sicher zu gehen:
FLUSH TABLES WITH READ LOCK;
FLUSH LOGS;
SET GLOBAL binlog_format = 'MIXED';
FLUSH LOGS;
UNLOCK TABLES;
Dadurch bleibt das letzte Binlog im 'MIXED'-Format. Das vorletzte (vorletzte) Binlog schließt lediglich das letzte Binlog, das im vorherigen Format war.
Alle vorhandenen Sitzungen vor dem ersten FLUSH LOGS;
beginnt einmal im letzten binlog zu schreiben UNLOCK TABLES;
wird ausgeführt.
Versuche es !!!
VORBEHALT
Wenn ich Kredit gebe, wo Kredit fällig ist, ist meine Antwort wirklich huckepack von @ Jonathans Antwort . Ich schließe und öffne darüber hinaus Binlogs. Er bekommt eine +1, wenn er dies zuerst herausbringt.
UPDATE 2011-10-12 13:58 EDT
Wenn Sie dies einem aktiven Master antun und ein oder mehrere Slaves von diesem Master replizieren, müssen Sie sich Sorgen machen, dass die Relay-Protokolle ebenfalls im neuen Format vorliegen. Folgendes können Sie tun:
Führen Sie auf dem Slave STOP SLAVE;
Führen Sie auf dem Master folgende Schritte aus:
FLUSH TABLES WITH READ LOCK;
FLUSH LOGS;
SET GLOBAL binlog_format = 'MIXED';
FLUSH LOGS;
UNLOCK TABLES;
Führen Sie auf dem Slave START SLAVE;
Laufen STOP SLAVE;
und START SLAVE;
dreht die Relaisprotokolle und bewirkt, dass die neuen Einträge in jedem Format repliziert werden. Möglicherweise möchten Sie die Änderung binlog_format auch im Slave anwenden.
So wechseln Sie binlog_format zur Laufzeit:
set global binlog_format = 'MIXED';
Dadurch werden alle NEUEN Sitzungen auf das gemischte Binlog-Format eingestellt. Alle vorhandenen Sitzungen werden bis zu ihrem Ende so eingestellt, wie sie zuvor festgelegt wurden.
Sie können auch set session binlog_format = 'MIXED';
manuell, um Probleme mit der Sitzung spezifisch zu lösen.