2016-11-01 5 views
2

私は以下の動作を確認したいと思っていました。私は、MySQLの行ベースのレプリケーションに気付きました。構成。行ベースのレプリケーションをオン、及びペット名前次の表に与えられると:デフォルトでヌル以外の列が追加された場合、行レベルのbinlogエントリが記録される

| id | name | species | 
|----|-----------|--------------| 
| 1 | max  | canine | 
| 2 | spike | canine | 
| 3 | bell | feline | 

任意の更新、削除、または挿入をバイナリログに記録されています。ただし、null以外の列にデフォルト値を追加するとします(例:

ALTER TABLE `pets` 
ADD COLUMN `sex` varchar(7) NOT NULL DEFAULT "unknown" AFTER `species`; 

のでようにレコードが更新される:私は最初に予想

| id | name | species | sex 
|----|-----------|--------------|-------- 
| 1 | max  | canine | unknown 
| 2 | spike | canine | unknown 
| 3 | bell | feline | unknown 

挙動は(各行が変化するため)更新が行ごとに記録される、及びこれらの更新はに現れるということでしたbinlog。しかし、実際には、新しい列とデフォルト値が追加されたときに、行レベルイベントがbinlogにまったく書き込まれていないように見えます。

とにかく、私が持っている質問は以下のとおりです。

  1. は、この動作が期待されている、または当社のセットアップ(または私の観察スキル)と、いくつかの問題を、この指標ですか?
  2. この動作はどのような方法でも設定できますか?

すべての情報、リンク、リソースなどを高く評価します。

おかげで、binlog format setting上のMySQLのドキュメントとして

+0

このステートメントを複製するときに、mysqlが一連の更新ステートメントを発行することは期待していません。これは、フィールドにデフォルト値を割り当てることは、内容の更新ではないからです。さらに、デフォルト値としてnullを持つフィールドに対して一連の更新が生成されることを期待していないため、ロジックが矛盾しています。 Nullは、他のデフォルト値と同様に値です。 – Shadow

+0

ありがとう@シャドウ、ええ、あなたは値がされているヌルについても正しいです。それはまだ私の更新のようですが、私はあなたのポイントを理解しています。高レベルでは、新しいデフォルト値が行レプリケーションがオンになっているbinlogに反映されない理由がわかりません(つまり、行がある意味で変更されているので、 binlog内の何か)。とにかく、それはちょうど私の経験不足かもしれません - しかし、なぜこれが事実になるかについてのさらなる議論のためのドキュメンテーションリンクは間違いなく歓迎です – foxygen

+0

まあ、ドキュメント内の参照を見つけました。 – Shadow

答えて

1

は(強調は私です)言う:行に設定バイナリログ形式の

は、多くの変更が行ベースを使用してバイナリログに書き込まれフォーマット。 しかし、いくつかの変更は依然としてステートメントベースの形式を使用しています。例には、CREATE TABLE、、ALTER TABLE、またはDROP TABLEなどのすべてのDDL(データ定義言語)文が含まれます。

あなたの思考の列車は私にとって論理的ではないようでした。そのような操作を更新によって複製することは、まったく効率が悪いようでした。いくつかの複雑なddl-dmlステートメントは、一連の挿入/更新によって部分的に複製される可能性がありますが、ここでは適用されません。

+0

最初のALTERテーブルは文ベースのフォーマットで書かれていましたが、ステートメントはデータ自体にさまざまな副作用があります。そのため、行ベースの変更は、__rowベースのレプリケーションをオンにしてbinlogに反映されていると仮定しました。 binlogの下流のコンシューマが別のMySQLインスタンス(MySQLはDDL文を実行する方法を知っているので、それは問題ありません)であれば、効率的ではないというあなたの指摘を見ますが、他のタイプの下流システムでは、有用。いずれにしても、お返事ありがとう – foxygen

+0

mysqlでは、すべてのデフォルトのフィールド値が確定的(固定値または現在のタイムスタンプ)なので、これらのステートメントに対して完全な行ベースのレプリケーションを行うにはあまり意味がありません。 – Shadow

関連する問題