GTIDが設定されたMySQLのマスタースレーブセットアップがあります。マスターのデータのバックアップを取り、個々のテストサーバーにインポートしました。インポートに失敗しています
24行目のエラー1839(HY000):@@ GLOBAL.GTID_PURGEDは、@@ GLOBAL.GTID_MODE = ONの場合にのみ設定できます--set-gtid-purged = OFFおよびAUTOを使用しようとしましたが、うまくいきませんでした。
あなたが実行する場合
SHOW MASTER STATUS\G
次のようなものが表示されます。
mysql> show master status\G
*************************** 1. row ***************************
File: mysql-bin.000299
Position: 780437462
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set: 075d81d6-8d7f-11e3-9d88-b4b52f517ce4:1-616637650,
e907792a-8417-11e3-a037-b4b52f51dbf8:1-25385296642
1 row in set (0.00 sec)
GTIDを有効にすると、すべてのサーバーが独自のUUIDを取得し、トランザクションが発生するためです。 mysqldumpでダンプを作成したとしましょう。そのファイルの先頭を見ると、次のような類似のものが見つかります。
--
-- GTID state at the beginning of the backup
--
SET @@GLOBAL.GTID_PURGED='075d81d6-8d7f-11e3-9d88-b4b52f517ce4:1-616648986,
e907792a-8417-11e3-a037-b4b52f51dbf8:1-25385296642';
実行できないコマンドです。
次のオプションがあります。
このコマンドをmysqlダンプファイルから削除します。削除するだけです。すべての挿入はローカルトランザクションであるため、スレーブに表示されます
これを防止したい場合は、スレーブのマスターをリセットすることもできます
mysql> RESET MASTER;
このコマンドは、スレーブの「Executed_Gtid_Set」変数をクリーンアップするため、ダンプファイルを直接インポートでき、前述のset_global_gtid_purged変数がアクションを実行します
Mysqldumpを作成するときに、mysqldumpの--set-gtid-purged=OFF
パラメータを追加することで、GTID設定部分をスキップできます。
注意:
マスターとスレーブでGTIDサブセットが異なる場合(これをレプリケーション設定で使用する場合)、レプリケーションは機能しません。スレーブのGTIDをマスターに正確に設定するため、バイナリダンプと復元をお勧めします。
GTIDを使用すると、多くの新しい問題が発生しますが、レプリカの設定はより一貫したものになります。それで作業する価値があります。
あなたが私のようなものであり、非常に長い操作だったのでダンプを再実行したくない場合は、事後にこれらの行を削除できます。
find . -name '*.sql' -type f -exec Perl -0 -i.bak -pe 's/SET \@\@GLOBAL\.GTID_PURGED=\x27.*?\x27;//gs' {} +
これを.sqlファイルのあるフォルダーで実行します。古いバージョンを.bakとして保存します。
これでうまくいきました。