リモートサーバー上で非常に大きいmysqlデータベースの毎日のバックアップを作成する必要があり、最後のバックアップ以降の差分のみを取得したい。一部のテーブルをバックアップから除外する必要もあります。 MySQLサーバーをマスターとして設定しました。変更したmy.cnfの重要な部分は次のとおりです。
_log_bin = /var/log/mysql/mysql-bin.log expire_logs_days = 10 max_binlog_size = 100M binlog_do_db = my_database
_
次に、バックアップサーバーでmysql my.cnfを次のように設定しました。
_replicate-ignore-table = my_db_name.my_table_name
_
すべてが問題ないことをテストするために、私は次のことを行います。
マスター:
$ mysql -u root -p MariaDB [my_database]> insert into my_table (param1, param2, ...) values(1, 1, ...) MariaDB [my_database]> exit $ scp /var/log/mysql/mysql-bin.00000X vagrant@backupserver:/tmp/
スレーブ:
_$ mysqlbinlog mysql-bin.00000X | mysql -u root -p
_
スレーブデータベースをチェックすると、常にテーブルに新しいエントリが表示されますが、それは予期した結果ではありません。
私は何か、何かアイデアを逃さなければなりませんか?
replicate-ignore-table
フィルターは、レプリケーションプロトコルを介したストリーミングのみを適用します(特にこの場合SQLスレッドスレーブ)。ログの変更を手動で適用した場合は影響を受けませんあなたがしているように。 レプリケーションフィルタリング に関する詳細情報は、レプリケーションフィルタリングのメカニズムを完全に理解したい場合、 レプリケーションルールアプリケーション で補完できます。
非常に簡単な ステップバイステップチュートリアル を使用すると、公式ディストリビューションに含まれているツール以外のツールを使用せずに標準レプリカをセットアップできます。
テーブルを複製する必要はありませんが、テーブル構造を作成することをお勧めしますが、いくつかのシナリオの問題を回避するためにBLACKHOLEエンジンを使用します。