Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 26.8Mb
PDF (A4) - 26.9Mb
HTML Download (TGZ) - 7.1Mb
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
User comments in this section are, as the name implies, provided by MySQL users. The MySQL documentation team is not responsible for, nor do they endorse, any of the information provided here.
Sign Up Login You must be logged in to post a comment.