Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 27.1Mb
PDF (A4) - 27.1Mb
HTML Download (TGZ) - 7.2Mb
HTML Download (Zip) - 7.2Mb


17.1.3.4 GTID ベースレプリケーションの制約

GTID ベースレプリケーションはトランザクションに依存しているため、そうでなければ MySQL で使用できるいくつかの機能が、それを使用するときにサポートされません。このセクションでは、GTID ベースレプリケーションの制約と制限についての情報を提供します。

非トランザクションストレージエンジンに関係する更新  GTID を使用する場合、MyISAM などの非トランザクションストレージエンジンを使用するテーブルへの更新は、InnoDB などのトランザクションストレージエンジンを使用するテーブルへの更新と同じステートメントまたはトランザクションで実行できません。

この制約は、非トランザクションストレージエンジンを使用するテーブルへの更新とトランザクションストレージエンジンを使用するテーブルへの更新が、同じトランザクション内に混在していると、複数の GTID が同じトランザクションに割り当てられる可能性があるためです。

このような問題は、マスターとスレーブが異なるストレージエンジンをそれぞれのバージョンの同じテーブルに使用するときにも発生する可能性があります (一方のストレージエンジンはトランザクション、他方はそうではない)。

今挙げたいずれの場合も、トランザクションと GTID との間の 1 対 1 対応が壊れていて、GTID ベースレプリケーションは正しく機能できません。

CREATE TABLE ... SELECT ステートメント  CREATE TABLE ... SELECT はステートメントベースレプリケーションには安全ではありません。行ベースレプリケーションを使用する場合、このステートメントのログは実際には 2 つの異なるイベントとして記録されます。1 つはテーブルを作成するためのもの、他方はソーステーブルから作成されたばかりの新しいテーブルに行を挿入するためのものです。このステートメントがトランザクション内で実行されると、同じトランザクション識別子を受け取るこれらの 2 つのイベントにいくつかのケースが可能であり、これは挿入を含むトランザクションがスレーブによってスキップされることを意味します。このため、GTID ベースレプリケーションを使用する場合は、CREATE TABLE ... SELECT はサポートされません。

一時テーブル  CREATE TEMPORARY TABLE および DROP TEMPORARY TABLE ステートメントは、GTID を使用するとき (つまり、サーバーが --enforce-gtid-consistency オプションで起動されたとき) に、トランザクション内でサポートされません。GTID を有効にした状態でこれらのステートメントを使用することは可能です (ただし、トランザクションの外側のみ、および autocommit=1 のときのみ)。

サポートされないステートメントの実行の回避  GTID ベースレプリケーションが失敗するステートメントの実行を回避するために、GTID を有効にするときは、すべてのサーバーが --enforce-gtid-consistency オプションで起動される必要があります。これにより、このセクションですでに説明したタイプのステートメントはエラーで失敗します。

GTID を有効にするときに必要なほかの起動オプションについては、セクション17.1.3.2「GTID を使用したレプリケーションのセットアップ」を参照してください。

GTID を使用するときに、sql_slave_skip_counter はサポートされません。トランザクションをスキップする必要がある場合は、代わりにマスターの gtid_executed 変数を使用してください。詳細については、空のトランザクションの注入を参照してください。

GTID モードと mysqldump  MySQL 5.6.9 以降では、ターゲットサーバーのバイナリログに GTID がないこと場合に、mysqldump を使用して作成されたダンプを GTID モードが有効な状態で動作する MySQL Server にインポートできます。

MySQL 5.6.9 より前では、mysqldump はグローバルトランザクション ID を記録せず、GTID をリストアするためにバイナリログと mysqlbinlog を使用する必要がありました。(Bug #14797808、Bug #14832472)

GTID モードと mysql_upgrade  MySQL 5.6.7 より前では、mysql_upgrade--write-binlog=OFF で実行されないかぎり、mysql_upgrade--gtid-mode=ON で動作する MySQL Server に接続できませんでした。(そうでない場合は、mysqld は、mysql_upgrade を実行する前に --gtid-mode=OFF で再起動されてから、あとで --gtid_mode=ON で再起動される必要がありました。)これは MySQL 5.6.7 以降では問題ではなく、mysql_upgrade はデフォルトで --write-binlog=OFF で動作します。(Bug #13833710) ただし、そのようにすることは推奨されません。mysql_upgradeMyISAM ストレージエンジン (非トランザクション) を使用するシステムテーブルに変更を加えることができるためです。


User Comments
Sign Up Login You must be logged in to post a comment.