MySQLバイナリログ-テーブルをスキップ


9

バイナリログの特定のテーブルをスキップする方法はありますか?

毎晩のバックアップ間の増分バックアップ戦略としてバイナリログを構成しています。しかし、バッチプロセスから毎晩更新する1つの巨大な参照テーブルがあります(70GBテーブル)。このテーブルは読み取り専用で、を使用して毎晩更新されmysqlimportます。

この参照専用テーブルの更新プロセス中に、バイナリログによってかなり深刻な遅延が発生しています(特に、70 GBの完全更新を実行した場合)。基本的に70GBを2回やる必要があります。うん。

参照テーブルは現在MyISAMを使用しています(InnoDBがそれをロードしようとしたため、MyISAMを試しました)。


このDBサーバーはスタンドアロンDBサーバーですか?このDBサーバーはマスターですか、スレーブですか?
RolandoMySQLDBA

回答:


9

バイナリログのテーブルを無視するmysqlオプションはありません。

テーブルを別のデータベースに移動できる場合は、binlog-ignore-dbオプションを使用できますが、これには問題があります。MySQLがレプリケーションルールを評価する方法を理解する必要があります

mysqlimportの代わりにデータをロードするラッパースクリプトを作成でき(マンページでは、それがLOAD DATA INFILEのコマンドラインインターフェイスであると記載されています)、データをインポートするユーザーがSUPER権限を持つことができる場合、sql_log_binセッション変数を使用できます。お気に入り:

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

これにより、現在のセッションのバイナリログが無効になり、データが読み込まれて、バイナリログが再び有効になります。


ロードプロセス中にバイナリログを無効にします。これは、私が探していたものとまったく同じです。これは非常に実用的なソリューションです。
David Parks、

3

あなたは使うことができます --replicate-ignore-table=db_name.tbl_name

詳細については、http://dev.mysql.com/doc/refman/5.1/en/replication-options-slave.html#option_mysqld_replicate-ignore-tableを参照してください。


6
これの問題は、replicate-ignore-tableがスレーブ設定であるため、マスターがbinlogエントリのロードを作成し、それらがスレーブに転送され(プロセスの帯域幅/スペースを食べる)、その後無視されるだけです。そもそもこれらのエントリを生成しない方がはるかに効率的です。
SVD 2014年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.