web-dev-qa-db-ja.com

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

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

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

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

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

9
David Parks

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

テーブルを別のデータベースに移動できる場合は、 binlog-ignore-db オプションを使用できますが、これには gotchas があります。 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;

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

9
redguy

--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 を参照してください。

3
user41362