この記事は最終更新日から1年以上が経過しています。

“@@GLOBAL.GTID_PURGED can only be set when @@GLOBAL.GTID_EXECUTED is empty.”というエラーが出たら

GTIDを使用したレプリケーションを組もうとして、マスターのダンプデータをスレーブに流し込もうとした時に表示されました。
ダンプデータの中のSET @@GLOBAL.GTID_PURGEDがうまくいかなかったようです。

RESET MASTERすればいい

GTID_EXECUTEDが空じゃないとGTID_PURGED出来ないよって言っているようなので、確認してみます。

mysql> SHOW GLOBAL VARIABLES LIKE '%GTID%';
+--------------------------+---------------------------------------------+
| Variable_name            | Value                                       |
+--------------------------+---------------------------------------------+
| enforce_gtid_consistency | ON                                          |
| gtid_executed            | cabe8ba1-efc3-11e3-9e53-525405003375:1-4426 |
| gtid_mode                | ON                                          |
| gtid_owned               |                                             |
| gtid_purged              |                                             |
+--------------------------+---------------------------------------------+

SHOW MASTER STATUSコマンドでも確認できます。

mysql> SHOW MASTER STATUS\G
*************************** 1. row ***************************
             File: mysql-bin.000003
         Position: 503
     Binlog_Do_DB: wordpress
 Binlog_Ignore_DB: 
Executed_Gtid_Set: cabe8ba1-efc3-11e3-9e53-525405003375:1-4426
1 row in set (0.00 sec)

スレーブサーバーですし、こういう時はまるっとRESET MASTERコマンドを実行してやります。

mysql> RESET MASTER;
Query OK, 0 rows affected (0.01 sec)

mysql> SHOW MASTER STATUS\G
*************************** 1. row ***************************
             File: mysql-bin.000001
         Position: 151
     Binlog_Do_DB: wordpress
 Binlog_Ignore_DB: 
Executed_Gtid_Set: 
1 row in set (0.00 sec)

これでうまくダンプデータが流し込めるはずです。

RESET MASTERはログファイルを削除してポジションを初期化するコマンドですが、MySQL5.6.5からGTIDが使用できるようになったので、gtid_purgedとgtid_executedもクリアされる様になっています。
http://dev.mysql.com/doc/refman/5.6/en/reset-master.html

コメントを残す