mysql复制表问题处理Statement violates GTID consistency: CREATE TABLE ... SELECT.

有个新功能需要处理:定时按月份备份某个表,然后将旧的表重置保存新的数据。

在备份数据时首先用的是:


CREATE TABLE 新表 SELECT * FROM 旧表 ;


这种方式,这是仅备份数据的,不需要结构一致。报错如下:


Statement violates GTID consistency: CREATE TABLE ... SELECT.


这是因为【MySQL5.6及以上的版本,开启了 enforce_gtid_consistency=true 功能导致的,MySQL官方解释说当启用 enforce_gtid_consistency 功能的时候,

MySQL只允许能够保障事务安全,并且能够被日志记录的SQL语句被执行,像create table … select 和 create temporarytable语句,

以及同时更新事务表和非事务表的SQL语句或事务都不允许执行。】,


所以需要修改新配置获取改用新的方式,当然我是修改新的方式:


CREATE TABLE 新表 LIKE 旧表 ;#先创建一张新表(结构也一样)

INSERT INTO 新表 SELECT * FROM 旧表;#然后进行数据的复制


这样就非常方便了,只是多了一步,速度也是非常快的。


数据表复制常用记录(个人笔记):


返回某表是否存在 SHOW TABLES LIKE 'you_tableName';


mysql中用命令行复制表结构的方法主要有一下几种: 

1.只复制表结构到新表

1 CREATE TABLE 新表 SELECT * FROM 旧表 WHERE 1=2;

1 CREATE TABLE 新表 LIKE 旧表 ;

注意上面两种方式,前一种方式是不会复制时的主键类型和自增方式是不会复制过去的,而后一种方式是把旧表的所有字段类型都复制到新表。

2.复制表结构及数据到新表

1 CREATE TABLE 新表 SELECT * FROM 旧表

3.复制旧表的数据到新表(假设两个表结构一样) 

1 INSERT INTO 新表 SELECT * FROM 旧表

4.复制旧表的数据到新表(假设两个表结构不一样)

1 INSERT INTO 新表(字段1,字段2,.......) SELECT 字段1,字段2,...... FROM 旧表


//删除表

DROP TABLE 表名;

判断数据表存在, 则删除:

drop table if exists table_name;


#创建数据库

CREATE DATABASE test1 DEFAULT CHARACTER SET UTF8 COLLATE UTF8_GENERAL_CI;

删除数据库

drop database <数据库名>;



评论/留言