2010-06-02 6 views
32

Ich möchte einen Import einer großen Datei in MySQL ausführen. Ich möchte jedoch nicht, dass es in das Binärlog geschrieben wird, da der Import sehr lange dauern wird und die Slaves weit zurückfallen. Ich würde es eher getrennt auf den Sklaven laufen lassen, nachdem es tatsächlich ist, weil es auf dem System viel einfacher sein wird. Die fragliche Tabelle ist eine neue und deshalb muss ich mich nicht wirklich darum sorgen, dass sie nicht mehr synchron ist, da der Master und alle Slaves am Ende dieselben Daten haben, weil sie alle dieselbe Datei importieren schließlich. Ich möchte auch keine der Optionen replicate-ignore-* oder binlog_ignore- * ändern, da sie einen Neustart der betroffenen Server erfordern. Gibt es eine Möglichkeit, eine einzelne Abfrage auszuführen, ohne sie in das Binärprotokoll zu schreiben?Wie führe ich eine Abfrage in MYSQL, ohne es in das Binärlog zu schreiben

Ich kenne bereits die Antwort, aber ich konnte es nicht sehr leicht im Netz finden, also lasse ich jemanden die Antwort posten, um einige Rep-Punkte zu bekommen. Wenn es keine Antworten in einem kleinen Weiß gibt, werde ich die Antwort posten, die ich gefunden habe.

Antwort

49

Sie können die Sitzungsvariable sql-log-bin verwenden, um die Protokollierung für die aktuelle Sitzung zu deaktivieren. Geben Sie einfach Folgendes ein:

SET sql_log_bin = 0; 

und alle Abfragen Ihrer aktuellen Sitzung werden nicht an das Binärprotokoll gesendet. Wenn Sie wieder auf Binärlogging aktivieren möchten, führen.

SET sql_log_bin = 1; 

Dies ist nur für die aktuell laufenden Sitzung, die Sie in alle anderen Anfragen von allen anderen Verbindungen werden weiterhin noch angemeldet sein. Außerdem müssen Sie SUPER-Berechtigungen haben, damit dies funktioniert.

+1

Würde dies funktionieren, wenn ich dies in der Befehlszeile tun würde? 'mysqldump mydb | mysql -h remote.host.com remote_db' – vinhboy

+0

Ja, der Hauptpunkt sollte es in einem mysql seession sein. Wenn Sie es erneut verbinden, ist es eine andere Sitzung. –

+0

Sie müssen den Befehl der Ausgabe von mysqldump voranstellen. Wie "echo" SET sql_log_bin = 0; "& mysqldump mydb | mysql -h remote.host.com remote_db' Ich bin mir nicht sicher, ob es die richtige Syntax ist, um einen Stich zu erzeugen, aber Sie können damit beginnen. –

17

Wenn Sie dies aus der cli tun wollen, versuchen Sie dies, es funktioniert für mich:

$ mysqldump old_DB | mysql --init-command="SET SQL_LOG_BIN = 0;" new_DB 

möglich, dass der „init-Befehl“ param wurde in einer neueren MySQL-Version hinzugefügt.

Verwandte Themen