我试图从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;
Run Code Online (Sandbox Code Playgroud)
什么是GTID一致性,如何修复SQL语句以避免违规?
CREATE TABLE ... SELECT
基于语句的复制不安全。使用基于行的复制时,该语句实际上记录为两个单独的事件-一个用于创建表,另一个用于将源表中的行插入到刚刚创建的新表中。
当在事务中执行该语句时,在某些情况下,这两个事件可能会接收到相同的事务标识符,这意味着从服务器会跳过包含插入内容的事务。因此,CREATE TABLE ... SELECT
使用基于GTID的复制时不支持。
从这里https://dev.mysql.com/doc/refman/5.6/en/replication-options-gtids.html
由于
--enforce-gtid-consistency
启用时只能记录事务安全语句,因此此处列出的操作不能与此选项一起使用:
CREATE TABLE ... SELECT
声明CREATE TEMPORARY TABLE
交易中的陈述- 更新事务和非事务表的事务或语句
你似乎已经强制执行GTID了.所以这个陈述是不允许的.
如果要以其他方式解决该错误,则可以简洁地创建表并使用以下命令分别插入:
CREATE TABLE new_table LIKE old_table;
INSERT new_table SELECT * FROM old_table;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
13257 次 |
最近记录: |