MySQL-Binärprotokolle - Überspringen Sie eine Tabelle


9

Gibt es eine Möglichkeit, eine bestimmte Tabelle in den Binärprotokollen zu überspringen?

Ich habe Binärprotokolle als meine inkrementelle Sicherungsstrategie zwischen nächtlichen Sicherungen konfiguriert. Wir haben jedoch eine große Referenztabelle, die wir jeden Abend aus einem Stapelprozess aktualisieren werden (70-GB-Tabelle). Diese Tabelle wird nur gelesen und jede Nacht mit aktualisiert mysqlimport.

Während des Aktualisierungsprozesses für diese Nur-Referenz-Tabelle verursachen die Binärprotokolle eine ziemlich schwerwiegende Verzögerung (insbesondere, wenn ich ein vollständiges 70-GB-Update durchführe). Grundsätzlich müssen 70 GB zweimal ausgeführt werden. igitt.

Die Referenztabelle verwendet derzeit MyISAM (ich habe InnoDB beim Versuch, es zu laden, blockiert, also MyISAM ausprobiert).


Ist dieser DB Server ein eigenständiger DB Server? Ist dieser DB Server ein Master oder Slave?
RolandoMySQLDBA

Antworten:


9

Es gibt keine MySQL-Option, um eine Tabelle im Binärprotokoll zu ignorieren.

Wenn Sie die Tabelle in eine separate Datenbank verschieben könnten, könnten Sie die Option binlog-ignore-db verwenden , dies hat jedoch seine Fallstricke . Sie sollten verstehen, wie MySQL Replikationsregeln auswertet .

Wenn Sie ein Wrapper-Skript schreiben können, um die Daten anstelle von mysqlimport zu laden (die Manpage gibt an, dass es sich um eine Befehlszeilenschnittstelle zum LADEN VON DATENINFILE handelt), und der Benutzer, mit dem Sie die Daten importieren, die Berechtigung SUPER haben kann, können Sie die Sitzungsvariable sql_log_bin verwenden mögen:

    SET @@session.sql_log_bin=0;
    LOAD DATA INFILE 'file_name' 
      -- other LOAD DATA INFILE options ;
    SET @@session.sql_log_bin=1;

Dadurch wird die binäre Protokollierung für die aktuelle Sitzung deaktiviert, die Daten werden geladen und die binäre Protokollierung erneut aktiviert.


Deaktivieren Sie die binäre Protokollierung während des Ladevorgangs. Genial, genau das, wonach ich gesucht habe. Dies ist eine sehr praktikable Lösung!
David Parks

3

Sie können verwenden --replicate-ignore-table=db_name.tbl_name

Weitere Informationen finden Sie unter http://dev.mysql.com/doc/refman/5.1/en/replication-options-slave.html#option_mysqld_replicate-ignore-table .


6
Das Problem dabei ist, dass die Replicate-Ignore-Tabelle eine Slave- Einstellung ist, sodass der Master eine Menge Binlog-Einträge erstellt, diese an den Slave übertragen werden (dabei Bandbreite / Speicherplatz verbrauchen) und erst dann ignoriert werden. Es wäre viel effizienter, diese Einträge überhaupt nicht zu generieren.
SVD
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.