25

select ステートメントからテーブルを作成しようとしていますが、GTID の一貫性違反が発生します。[HY000][1786] Statement violates GTID consistency: CREATE TABLE ... SELECT.

create TABLE tags_mentions as
    select t.*, st.ts, m.user_id_from, m.user_id_to from Tags as t join Mentions as m
        on t.status_id = m.status_id AND m.user_id_from != m.user_id_to
        left join Statuses as st on t.status_id = st.status_id;

GTID の一貫性とは何ですか? また、SQL ステートメントを修正して違反を回避するにはどうすればよいですか?

4

4 に答える 4

34

別の方法でエラーを修正したい場合は、テーブルを簡潔に作成し、次のように個別に挿入できます。

CREATE TABLE new_table LIKE old_table; 
INSERT new_table SELECT * FROM old_table;
于 2019-05-09T23:06:20.617 に答える
9

ここからhttps://dev.mysql.com/doc/refman/5.6/en/replication-options-gtids.html

が有効になっている場合は、トランザクション的に安全なステートメントのみをログに記録できるため--enforce-gtid-consistency、ここにリストされている操作はこのオプションでは使用できません。

  • CREATE TABLE ... SELECTステートメント
  • CREATE TEMPORARY TABLEトランザクション内のステートメント
  • トランザクション テーブルと非トランザクション テーブルの両方を更新するトランザクションまたはステートメント

GTID セットを強制しているようです。したがって、このステートメントは許可されません。

于 2016-11-21T19:31:45.023 に答える