首页 > 其他分享 >当使用create table ... as select建表时报错ERROR 1786

当使用create table ... as select建表时报错ERROR 1786

时间:2023-07-29 12:32:14浏览次数:36  
标签:... 建表 create consistency mysql table enforce gtid

问题描述:当使用create table ... as select建表时报错ERROR 1786.
数据库:mysql 5.7.21
1、异常重现
mysql> create table booksbak as select * from books;
ERROR 1786 (HY000): Statement violates GTID consistency: CREATE TABLE ... SELECT.

2、异常原因
ERROR 1786是由于开启enforce_gtid_consistency=true功能导致,MySQL官方解释当启用enforce_gtid_consistency功能时,MySQL只允许能够保障事务安全且能被日志记录的SQL语句被执行,
像create table ... select和create temporary table等同时更新事务表和非事务表的SQL语句或事务不允许执行.
--查enforce_gtid_consistency参数
mysql> show variables like 'enforce_gtid_consistency';
+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| enforce_gtid_consistency | ON    |
+--------------------------+-------+
1 row in set (0.01 sec)

3、解决方案
说明:以下提供两种解决方案.
3.1、拆分建表语句
--将建表语句拆分成两部分.
mysql> create table booksbak like books;
Query OK, 0 rows affected (0.01 sec)

mysql> insert into booksbak select * from books;
Query OK, 8 rows affected (0.01 sec)
Records: 8  Duplicates: 0  Warnings: 0
3.2、关闭GTID模式
3.2.1、修改配置文件
按如下修改my.cnf文件.
gtid_mode=off
enforce_gtid_consistency=off

3.2.2、重启mysql进程
mysql> shutdown
mysql> exit
$ mysqld_safe  --defaults-file=/home/mysql/etc/my.cnf &
3.2.3、检查参数生效情况
mysql> show variables like '%gtid_mode%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| gtid_mode   | OFF  |
+---------------+-------+
1 row in set (0.01 sec)
 
mysql> show variables like '%enforce_gtid_consistency%';
+--------------------------+-------+
| Variable_name      | Value |
+--------------------------+-------+
| enforce_gtid_consistency | OFF  |
+--------------------------+-------+
1 row in set (0.01 sec)

说明:修改参数后成功建表.

参考文档:https://www.jb51.net/article/51753.htm

标签:...,建表,create,consistency,mysql,table,enforce,gtid
From: https://blog.51cto.com/u_12991611/6891795

相关文章

  • windows下shellcode注入的例子(WriteProcessMemory+CreateRemoteThread)
    vs里x64编译如下代码:  #include<iostream>#include<Windows.h>//#include"common.h"intmain(){ //msfvenom-pwindows/x64/execCMD=notepad.exe-fc unsignedcharshellcode[]= "\xfc\x48\x83\xe4\xf0\xe8\xc0\x00\x0......
  • ORM对数据的增删改查,动静态网页,Django创建表关系,Django框架的请求生命周期流程图
    通过结合前端页面实现ORM对数据的增删改查#我让你写一个页面,就是把数据库中的数据以表格的形式展示出来,然后在每一行的后面加两个按钮,分别是修改、删除的按钮#表格的展示页面'''思考修改功能的逻辑:'''1、确定修改哪条记录,怎么确定?通过主键id确定唯一一条记录2、点击......
  • ClickHouse创建表
    创建本地表:CREATETABLEdefault.xxonclusterdefault(`id`Int64COMMENT'id',`plate_code`Nullable(String)COMMENT'板块编号',`plate_name`Nullable(String)COMMENT'板块名称',`date_time`Nullable(String)COMMENT�......
  • for...in 循环和 for...of 循环的区别
    JavaScript中的for...in循环和for...of循环是两种不同的迭代方式,用于遍历数据结构中的元素。它们具有一些区别:for...in循环:用于遍历对象的可枚举属性(包括原型链上的属性)。迭代的是键(属性名),而非值。不保证迭代顺序,因为对象的属性顺序在规范中并未定义。比较适合用于遍......
  • celery 启动显示警告信息“...whether broker connection retries are made during st
    博客地址:https://www.cnblogs.com/zylyehuo/在settings文件中设置broker_connection_retry_on_startup=True修改配置后运行效果如下......
  • pandoc: pdflatex: createProcess: posix_spawnp: illegal operation
    RuntimeError:Pandocdiedwithexitcode"1"duringconversion:pandoc:pdflatex:createProcess:posix_spawnp:illegaloperation(Inappropriateioctlfordevice)报错原因这个报错原因可能是由于Pandoc在进行转换时尝试调用pdflatex命令时出错。在某些PDF转换过......
  • 敲低这个基因就可以开怀大吃了!诺奖技术助力编辑蛋白质组!NGS可使临床治疗受益!...
    1壹1吃货的春天?Science子刊:科学家找到一种胡吃海塞也能健康的方法载脂蛋白CIII(ApoCIII)水平升高与代谢性疾病有关。在喂食高脂肪食物的同时采用反义寡核苷酸降低ApoCIII基因的表达可保护代谢系统不发生紊乱;因食用高脂肪而发生代谢紊乱的小鼠使用反义寡核苷酸治疗后,其血糖代谢、......
  • PHP if...else...elseif 语句
    条件语句用于基于不同条件执行不同的动作PHP条件语句在您编写代码时,经常会希望为不同的决定执行不同的动作。您可以在代码中使用条件语句来实现这一点。在PHP中,我们可以使用以下条件语句:if语句 -如果指定条件为真,则执行代码if...else语句 -如果条件为true,则执行代......
  • APP - Appium-Inspector连接报错Failed to create session, The requested resource c
    APP-Appium-Inspector连接报错Failedtocreatesession,Therequestedresourcecouldnotbefoundappium版本:Appium-Server-GUI-windows-1.22.3-4Appium-Inspector版本:Appium-Inspector-windows-2022.5.4填写好参数连接时报错: 错误信息:错误Failedtocreatesess......
  • kettle连接数据库报错:Error connecting to database: (using class org.gjt.mm.mysql.
    kettle连接MySQL报错但已经把相应的包放到kettle的lib目录下时,仍然报连接不上的错误,那可能是MySQL时区的问题。解决如下:登入MySQL修改为东八区的命令:方法一:mysql>setglobalmax_allowed_packet=1024*1024;mysql>setglobaltime_zone='+8:00';方法二:修改my.ini文件,在[mysql......