Z důvodu následujícího upozornění v mysqld.log
:
[Upozornění] Nebezpečný příkaz zapsaný do binárního protokolu pomocí formátu příkazu, protože BINLOG_FORMAT = STATEMENT. Příkaz je nebezpečný, protože používá klauzuli LIMIT. To není bezpečné, protože nelze zahrnout sadu řádků, které lze zahrnout.
Chci přepnout formát replikace na MIXED
.
Ale podle dokumentu MySQL:
Přepínání formátu replikace za běhu se nedoporučuje, pokud existují nějaké dočasné tabulky, protože dočasné tabulky jsou protokolovány pouze při použití replikace založené na příkazech, zatímco u replikace založené na řádcích nejsou protokolovány.
Otázkou tedy je, jak mohu zjistit, zda existují nějaké dočasné tabulky pro bezpečné přepínání formátu binárního protokolu?
Protože binlog bude mít v tuto chvíli specifický formát, můžete se rozhodnout nehrát společně s těmito dvěma formáty, i když tuto funkci vytvořil MySQL (eh Oracle [stále nelze zavřít můj jazyk]).
Chcete-li ji hrát zcela bezpečně bez restartu mysql, zkuste následující:
FLUSH TABLES WITH READ LOCK;
FLUSH LOGS;
SET GLOBAL binlog_format = 'MIXED';
FLUSH LOGS;
UNLOCK TABLES;
Tím zůstane poslední binlog ve formátu „MIXED“. Penultimiate (vedle posledního) binlog existuje, pouze zavře poslední binlog, který byl v předchozím formátu.
Všechny existující relace před první FLUSH LOGS;
začne psát v posledním binlogu jednou UNLOCK TABLES;
je provedeno.
Pokusit se !!!
CAVEAT
Když dostanu úvěr, kde je splatný kredit, moje odpověď je opravdu naskakující z @ Jonathanova odpověď . Kromě toho jen zavírám a otevírám blogy. Dostane +1 za to, že to vyjde první.
AKTUALIZACE 2011-10-12 13:58 EDT
Pokud tak učiníte s aktivním Masterem a existuje jeden nebo více Slaves replikujících se z tohoto Master, musíte se také starat o to, aby byly protokoly relé v novém formátu. Co můžete udělat:
Na slave spusťte STOP SLAVE;
Na Master běží tyto:
FLUSH TABLES WITH READ LOCK;
FLUSH LOGS;
SET GLOBAL binlog_format = 'MIXED';
FLUSH LOGS;
UNLOCK TABLES;
Na slave spusťte START SLAVE;
Běh STOP SLAVE;
a START SLAVE;
otočí protokoly relé a způsobí, že nové položky budou replikovány v libovolném formátu. Možná budete chtít také použít změnu binlog_format ve slave.
Chcete-li přepnout binlog_format za běhu, můžete:
set global binlog_format = 'MIXED';
Tím se nastaví, že všechny NOVÉ relace budou smíšené ve formátu binlog. Všechny existující relace budou, co bylo nastaveno dříve, dokud neskončí.
Můžete také udělat set session binlog_format = 'MIXED';
ručně vyřešit problémy s relací konkrétně.