MySql报错:Statement violates GTID consistency: CREATE TABLE ... SELECT.解决

本文主要是介绍MySql报错:Statement violates GTID consistency: CREATE TABLE ... SELECT.解决,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一 解决Statement violates GTID consistency: CREATE TABLE ... SELECT

问题:

mysql在备份表时报错Statement violates GTID consistency: CREATE TABLE ... SELECT.

CREATE TABLE tmp_fix0219 AS 
SELECT trade_no,ctime FROM charge_data_log

执行后,如下图: 

原因:

这个错误是由于在启用 GTID 模式的情况下执行了 CREATE TABLE ... SELECT 语句导致的。

在 GTID 模式下,CREATE TABLE ... SELECT 语句会被视为两个独立的事务:

  • 一个 DDL 事务,用于创建新表。
  • 一个 DML 事务,用于将数据插入新表。

这两个事务必须在一个 GTID 事务中执行,才能保证数据一致性。

如果在 GTID 模式下执行了 CREATE TABLE ... SELECT 语句,MySQL 会将该语句拆分为两个独立的事务,并为每个事务分配一个 GTID。但是,由于这两个事务不是在一个 GTID 事务中执行的,因此会导致数据不一致。

解决:

把上面sql语句修改如下:

CREATE TABLE tmp_fix0219 LIKE charge_data_log;
INSERT INTO  tmp_fix0219  
SELECT * FROM `charge_data_log` ;

1创建表结构

2执行插入数据 

关于 MySql GTID

GTID(全局事务标识符)是一种用于 MySQL 复制的新型事务标识机制。它可以确保在主从复制环境中,所有事务都以一致的顺序执行。开启 GTID 可以提高复制的可靠性和安全性,并简化复制的配置和管理。

MySQL 5.7 开启与关闭 GTID

开启 GTID

1,确保所有服务器的 MySQL 版本都不低于 5.7.6

2,在所有服务器上编辑配置文件 my.cnf,添加以下参数:

log-bin=mysql-bin
binlog_format=ROW
gtid_mode=ON
enforce_gtid_consistency=ON

3,重启所有服务器。

关闭 GTID

1,确保所有服务器都处于停止状态。

2,在所有服务器上编辑配置文件 my.cnf,将 gtid_mode 参数修改为 OFF

gtid_mode=OFF

3,重启所有服务器。

查看GTID 状态

SELECT @@GLOBAL.gtid_mode;

注意事项

  • 开启 GTID 之前,需要确保所有服务器的 MySQL 版本都不低于 5.7.6
  • 开启 GTID 之后,不能再使用基于 binlog 位置的复制。
  • 关闭 GTID 之后,必须将所有服务器的 gtid_mode 参数修改为 OFF

这篇关于MySql报错:Statement violates GTID consistency: CREATE TABLE ... SELECT.解决的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/725175

相关文章

C++右移运算符的一个小坑及解决

《C++右移运算符的一个小坑及解决》文章指出右移运算符处理负数时左侧补1导致死循环,与除法行为不同,强调需注意补码机制以正确统计二进制1的个数... 目录我遇到了这么一个www.chinasem.cn函数由此可以看到也很好理解总结我遇到了这么一个函数template<typename T>unsigned

MySQL的JDBC编程详解

《MySQL的JDBC编程详解》:本文主要介绍MySQL的JDBC编程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、前置知识1. 引入依赖2. 认识 url二、JDBC 操作流程1. JDBC 的写操作2. JDBC 的读操作总结前言本文介绍了mysq

java.sql.SQLTransientConnectionException连接超时异常原因及解决方案

《java.sql.SQLTransientConnectionException连接超时异常原因及解决方案》:本文主要介绍java.sql.SQLTransientConnectionExcep... 目录一、引言二、异常信息分析三、可能的原因3.1 连接池配置不合理3.2 数据库负载过高3.3 连接泄漏

Linux下MySQL数据库定时备份脚本与Crontab配置教学

《Linux下MySQL数据库定时备份脚本与Crontab配置教学》在生产环境中,数据库是核心资产之一,定期备份数据库可以有效防止意外数据丢失,本文将分享一份MySQL定时备份脚本,并讲解如何通过cr... 目录备份脚本详解脚本功能说明授权与可执行权限使用 Crontab 定时执行编辑 Crontab添加定

MySQL中On duplicate key update的实现示例

《MySQL中Onduplicatekeyupdate的实现示例》ONDUPLICATEKEYUPDATE是一种MySQL的语法,它在插入新数据时,如果遇到唯一键冲突,则会执行更新操作,而不是抛... 目录1/ ON DUPLICATE KEY UPDATE的简介2/ ON DUPLICATE KEY UP

MySQL分库分表的实践示例

《MySQL分库分表的实践示例》MySQL分库分表适用于数据量大或并发压力高的场景,核心技术包括水平/垂直分片和分库,需应对分布式事务、跨库查询等挑战,通过中间件和解决方案实现,最佳实践为合理策略、备... 目录一、分库分表的触发条件1.1 数据量阈值1.2 并发压力二、分库分表的核心技术模块2.1 水平分

Python与MySQL实现数据库实时同步的详细步骤

《Python与MySQL实现数据库实时同步的详细步骤》在日常开发中,数据同步是一项常见的需求,本篇文章将使用Python和MySQL来实现数据库实时同步,我们将围绕数据变更捕获、数据处理和数据写入这... 目录前言摘要概述:数据同步方案1. 基本思路2. mysql Binlog 简介实现步骤与代码示例1

504 Gateway Timeout网关超时的根源及完美解决方法

《504GatewayTimeout网关超时的根源及完美解决方法》在日常开发和运维过程中,504GatewayTimeout错误是常见的网络问题之一,尤其是在使用反向代理(如Nginx)或... 目录引言为什么会出现 504 错误?1. 探索 504 Gateway Timeout 错误的根源 1.1 后端

解决升级JDK报错:module java.base does not“opens java.lang.reflect“to unnamed module问题

《解决升级JDK报错:modulejava.basedoesnot“opensjava.lang.reflect“tounnamedmodule问题》SpringBoot启动错误源于Jav... 目录问题描述原因分析解决方案总结问题描述启动sprintboot时报以下错误原因分析编程异js常是由Ja

使用shardingsphere实现mysql数据库分片方式

《使用shardingsphere实现mysql数据库分片方式》本文介绍如何使用ShardingSphere-JDBC在SpringBoot中实现MySQL水平分库,涵盖分片策略、路由算法及零侵入配置... 目录一、ShardingSphere 简介1.1 对比1.2 核心概念1.3 Sharding-Sp