MySQLのレプリケーション機能は非常に便利で、
なお、
enforce_gtid_consistency
こちらのオプションはMySQL5.
- OFF
- すべてのトランザクションにおいて、
GTID整合性に違反してもよい - ON
- GTID整合性に違反するトランザクションを禁止する
- WARN
- すべてのトランザクションはGTID整合性に違反してもよいが警告(WARN)が発生する
WARNを設定することでGTID整合性に違反するようなトランザクションを許可しつつ、
mysql> CREATE TEMPORARY TABLE tmp_table1(id int); Query OK, 0 rows affected, 1 warning (0.00 sec) mysql> show warnings\G *************************** 1. row *************************** Level: Warning Code: 3748 Message: Statement violates GTID consistency: CREATE TEMPORARY TABLE and DROP TEMPORARY TABLE are not allowed inside a transaction or inside a procedure in a transactional context when @@session.binlog_format=STATEMENT. 1 row in set (0.00 sec)
enforce_
GTID_
mysql> SET GLOBAL enforce_gtid_consistency = WARN; ERROR 1779 (HY000): GTID_MODE = ON requires ENFORCE_GTID_CONSISTENCY = ON.
また、
mysql> SET GLOBAL gtid_mode = 'ON'; ERROR 3111 (HY000): SET @@GLOBAL.GTID_MODE = ON is not allowed because ENFORCE_GTID_CONSISTENCY is not ON.
GTID整合性に違反するトランザクション
enforce_
- MySQLのバージョンが8.
0.21未満の場合でbinlog_ formatがROWベースのレプリケーションを利用している場合は、 CREATE TABLE as … SELECT構文は利用できません (8. 0.21以降のバージョンではアトミックDDLをサポートするストレージエンジンで利用可能になります)。 - CREATE/
DROP TEMPORARY TABLEにおいて、 binlog_ format がstatementベースの場合、 トランザクション、 プロシージャ、 関数、 トリガー内では利用できません (GTID_ MODEがONでautocommit=1である場合はトランザクション、 プロシージャ、 関数、 トリガーの外である場合は利用できます)。binlog_ formatがrow, mixedの場合、 バージョンが8. 0.13以降であれば、 トランザクション、 プロシージャ、 関数、 トリガー内でもあってもCREATE/ DROP TEMPORARY TABLEが利用できます。
このあたりの挙動については公式ドキュメントのGTID ベースレプリケーションの制約にも記述があるので、
mysql> begin; mysql> CREATE TEMPORARY TABLE tmp_table1(id int); ERROR 3748 (HY000): Statement violates GTID consistency: CREATE TEMPORARY TABLE and DROP TEMPORARY TABLE are not allowed inside a transaction or inside a procedure in a transactional context when @@session.binlog_format=STATEMENT.
その他
enforce-gtid-consistency は、
まとめ
今回は、