web-dev-qa-db-ja.com

このエラーを修正するにはGTIDをオフにする必要がありますか?

最近、クエリが失敗し始めました。これは、カタログ検索のインデックスを再作成するMagentoソフトウェアコア(モジュールではない)のクエリです。次のエラーを受け取りました。

カタログ検索インデックスインデックスプロセスの不明なエラー:例外「PDOException」とメッセージ「SQLSTATE [HY000]:一般的なエラー:1785 @@ GLOBAL.ENFORCE_GTID_CONSISTENCY = 1の場合、非トランザクションテーブルの更新は、自動コミットされたステートメントまたは単一コミットステートメントでのみ実行できますステートメントトランザクション。トランザクションテーブルの更新と同じステートメントに含まれることはありません。 /var/www/magento-20171012/mage-webroot/lib/Zend/Db/Statement/Pdo.php:228内

MySQL 5.6.35をSELECT VERSION();に従って実行しています。

このドキュメント クレーム_はMySQL 5.6.9で導入されました。

このMySQLドキュメント は、「トポロジ内のすべてのサーバーはMySQL 5.7.6以降を使用する必要があります。トポロジ内のすべてのサーバーがこのバージョンを使用している場合を除き、単一のサーバーでオンラインでGTIDトランザクションを無効にすることはできません。」

My.cnfにgtid_modeが表示されず、SELECT @@GLOBAL.GTID_MODE;ONを返します。

私は確信がありません ドキュメントに基づいて GTIDが正確に何であるか。レプリケーションやマスター/スレーブのセットアップに使用されているようです。マスター/スレーブを設定しておらず、レプリケーションで意味しているとは思わないsqlファイルへのバックアップ以外はレプリケーションしません。

SELECT @@GLOBAL.GTID_MODE;を実行すると、ONが得られます。 GTIDを無効にしてこの問題を修正するために実行する必要があるのは、SET @@GLOBAL.GTID_MODE = OFF;だけですか?私は自分の開発者(これは問題を示していない)でこれを実行しましたが、問題はありませんが、結果を理解せずにこれを本番環境に適用する前にアドバイスを受けたいです。

GTIDを無効にするとはどういう意味ですか?データベースから受け取っているこのエラーは解決しますか?

1
Goose

短い回答:はい、そのサーバーから複製していない場合、リスクなしにGTIDを無効にできます。

長い答え:

GTIDは、「作成され、Origin(マスター)のサーバーでコミットされた各トランザクションに関連付けられた一意の識別子です。」これは、いくつかのスレーブがある場合に役立ちます。したがって、常にスレーブの状態(どのステートメントがどのサーバーから複製されたか、およびその他の情報)を追跡できます。ただし、サーバーをスタンドアロンとして使用している場合は、問題がなければ、バイナリログは使用しません。

デフォルトでは無効になっているので、すべてのcnfファイルを検索する必要があります(おそらく/ usr ...にあります)。構成gtidが1つあるはずです( https://dev.mysql.com/doc/refman/ 5.6/en/replication-options-gtids.html#sysvar_enforce_gtid_consistency );いつかDBが再起動しても問題が発生しないように、それを見つけることが重要です。それ以外の場合は、再びオンになります。

無効にするには、再起動する必要があります。再起動せずに無効にするために見つけたリンクは、MySQL 5.7以降に適用されます。

最後に、それを無効にすることの意味は、明確な「識別子」のないバイナリログですが、必要な場合に備えてバイナリログは保持されます。

1
Mauricio Cacho

サーバーでも同じ問題に直面しています。

GTIDは常にオンのサーバーです。下のMySQLコマンドを使用してGTIDを無効にしてください。

SET @@GLOBAL.ENFORCE_GTID_CONSISTENCY = OFF; 
SET @@GLOBAL.GTID_MODE = OFF_PERMISSIVE;
0
Vijay Raut