黑洞
ストレジエンジンは,デタを受け取るけれども破棄して格納しない「ブラックホル」として機能します。検索は,常に空の結果を返します。
mysql> CREATE TABLE test(i INT, c CHAR(10))查询OK, 0行影响(0.03秒)mysql> INSERT INTO test VALUES(1,'record one'),(2,'record two');查询OK, 2 rows affected (0.00 sec) Records: 2 duplicate: 0 warning: 0 mysql> SELECT * FROM test;空集(0.00秒)
ソスからMySQLを構築する場合に黑洞
ストレジエンジンを有効にするには,CMakeを-DWITH_BLACKHOLE_STORAGE_ENGINE
オプションで呼び出します。
黑洞
エンジンのソスを調べるには,MySQLソス配布のsql
ディレクトリを検索します。
黑洞
テーブルを作成するときに,サーバーはデータベースディレクトリ上にテーブルフォーマットファイルを作成します。ファ邮箱ルはテ邮箱ブル名から始まり.frm
拡張子が付きます。テブルに関連するファ。
黑洞
ストレジエンジンはすべての種類のトしています。すなわ,テンデックス宣言を含めることができます。
黑洞
ストレジエンジンが显示引擎
ステトメントで使用できるかどうかを確認できます。
黑洞
テーブルへの挿入はデータを格納しませんが,ステートメントベースバイナリロギングが有効になっている場合は,SQLステートメントはログが記録されてスレーブサーバーに複製されます。これは,繰り返しまたはフィルタメカニズムとして役立場合があります。
バ邮箱ナリログに行ベ邮箱スフォ邮箱マットを使用すると,邮箱更新と削除はスキップされ,邮箱ログも適用されません。このため,バイナリロギングフォーマットには行や混合ではなく声明を使用してください。
アプリケーションがスレーブ側フィルタリングルールを要求するけれども,すべてのバイナリログデータを最初にスレーブに転送するとトラフィックが多すぎるとします。そのような場合は,次に示すようにマスタ,ホスト上に,デフォルトストレ,ジエンジンが黑洞
である「假」スレブプロセスをセットアップできます。
マスタはそのバ。「假」mysqldプロセスはスレブとして機能し,replicate-do - *
およびreplicate-ignore - *
ルルの適切な組み合わせを適用し,それ自体のフィルタリングされた新しいバナリログを書き込みます。セクション17.1.4 "レプリケションおよびバナリロギングのオプションと変数"を参照してください。フィルタリングされたこのログはスレブに提供されます。
ダミプロセスは実際にはデタを保存しないため,レプリケションマスタホスト上で追加mysqldプロセスを実行することによる処理オバヘッドはほとんどありません。この種類のセットアップは,ほかのレプリケションスレブで繰り返すことができます。
黑洞
テブルの插入
トリガは期待どおりに機能します。しかし,実際には黑洞
テブルはデタを格納しないため,更新
および删除
トリガは有効ではありません。トリガ定義の为每一行
句は,行がないために適用されません。
黑洞
ストレジエンジンのその他の利用方法は,次のとおりです。
ダンプファ邮箱ル構文の検証。
バイナリロギングのオーバーヘッドを測定(バイナリロギングが有効である場合と有効でない場合のパフォーマンスを
黑洞
を利用して比較することで)。黑洞
は本質的には「无操作」ストレージエンジンであるため,ストレージエンジン自体には関係ないパフォーマンスボトルネックの検出に使用される場合があります。
コミットされたトランザクションはバイナリログに書き込まれ,ロールバックされたトランザクションは書き込まれないという意味で,黑洞
エンジンはトランザクション対応です。
黑洞エンジンと自動ンクリメントカラム
黑洞エンジンはno-opエンジンです。黑洞を使用してテブルで実行される操作は効果がありません。このことは,自動的に増分する主キカラムの動作を考慮するときに念頭におくようにしてください。このエンジンはフィルド値を自動的に増分せず,自動ルドの状態を保持しません。これは,レプリケションで重要な意味を持ます。
次の3の条件がすべて適用される次のレプリケションシナリオを検討します。
マスターサーバーには,主キーである自動インクリメントフィールドを持つブラックホールテーブルがあります。
スレブには同じテブルが存在しますが,MyISAMエンジンを使用します。
插入
ステトメント自身で自動,设置INSERT_ID
ステトメントを使用して,マスタブルへの挿入が実行されます。
このシナリオでは,レプリケションは主キカラムでの重複エントリエラで失敗します。
ステトメントベスのレプリケションでは,コンテキストINSERT_ID
の値は常に同じになります。このため,主キカラムで重複値を持行を挿入しようとすると,レプリケ。
行ベスのレプリケションでは,エンジンが戻す行の値は,各挿入で常に同じです。このため,スレーブは主キーカラムで同じ値を使用する2つの挿入ログエントリーを再生しようとして,レプリケーションは失敗します。
カラムのフィルタリング
行ベスのレプリケション(binlog_format =行
)を使用すると,セクション17.4.1.9 "テブル定義が異なるマスタとスレブでのレプリケション"セクションで説明されたように,最後のカラムがテブルから失われたスレブがサポトされます。
このフィルタリングはスレブ側で機能します。すなわ,カラムはフィルタリングされる前にスレブにコピされます。スレブにカラムをコピすることが望ましくないケスが少なくとも2。
デタが機密の場合,スレ。
マスターが多くのスレーブを持つ場合,スレーブに送る前にフィルタリングすると,ネットワークトラフィックが削減される可能性があります。
マスタカラムのフィルタリングは,黑洞
エンジンを使用して実現できます。これは,マスタテブルフィルタリングの実現方法(黑洞
エンジンと——replicate-do-table
または——replicate-ignore-table
オプションを使用)に類似した方法で実行されます。
マスタのセットアップは次のとおりです。
创建表t1 (public_col_1,…), public_col_N, secret_col_1,…, secret_col_M) = MyISAM引擎;
信頼されたスレブのセットアップは次のとおりです。
创建表t1 (public_col_1,…)public_col_N)引擎=黑洞;
信頼されないスレブのセットアップは次のとおりです。
创建表t1 (public_col_1,…), public_col_N) = MyISAM引擎;