web-dev-qa-db-ja.com

MySQLデータのインポートはエラー1839で失敗しました

GTIDが設定されたMySQLのマスタースレーブセットアップがあります。マスターのデータのバックアップを取り、個々のテストサーバーにインポートしました。インポートに失敗しています

24行目のエラー1839(HY000):@@ GLOBAL.GTID_PURGEDは、@@ GLOBAL.GTID_MODE = ONの場合にのみ設定できます--set-gtid-purged = OFFおよびAUTOを使用しようとしましたが、うまくいきませんでした。

12
JAVAC

あなたが実行する場合

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を使用すると、多くの新しい問題が発生しますが、レプリカの設定はより一貫したものになります。それで作業する価値があります。

26
banyek

あなたが私のようなものであり、非常に長い操作だったのでダンプを再実行したくない場合は、事後にこれらの行を削除できます。

find . -name '*.sql' -type f -exec Perl -0 -i.bak -pe 's/SET \@\@GLOBAL\.GTID_PURGED=\x27.*?\x27;//gs' {} +

これを.sqlファイルのあるフォルダーで実行します。古いバージョンを.bakとして保存します。

これでうまくいきました。

2
Goddard