在现代数据库系统中,MySQL的全局事务标识符(GTID)为多主复制环境提供了便捷的事务跟踪机制。然而,在某些情况下,我们可能会面临“mysql GTID 双写”的问题,导致数据一致性受到影响。本文将详细探讨这个问题的背景、技术原理、架构分析、源码分析、应用场景及案例分析。
### 背景描述
2019年,我们团队在升级MySQL版本时首次遇到了GTID双写问题。以下是我们经历此问题的时间轴:            
                
         
            
            
            
            一。数据库设计方面1)遵循数据库设计三大范式 ,适当的进行反范式设计第一范式:1NF 原子性 字段不能再拆分第二范式: 2NF 先满足第一范式 主键之外的要完全依赖于主键,消除了部分依赖第三范式 :3NF 先满足第二范式 完全消除传递依赖反范式设计:允许部分冗余字段,目的为了避免多表查询,提高查询速度优点:查询速度快      缺点:冗余字段多维护起来成本高范式优点:            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-11-07 16:42:41
                            
                                42阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            一 序      本文属于《MYSQL运维内参》第九章读书笔记,因为INNODB的三大特性:插入缓存,两次写,自适应hash,还是觉得作者先介绍插入缓存会更有助于理解。      为啥会有两次写?必要了解partial page write 问题 :         InnoDB 的Pag            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-08-10 06:28:22
                            
                                88阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            MySQL5.7配置GTID双主            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2020-06-02 11:59:12
                            
                                2618阅读
                            
                                                                             
                 
                
                             
         
            
            
            
             MySQL作为目前世界上使用最广泛的免费数据库,在实际的生产环境中,由单台 MySQL 作为独立的数据库是完全不能满足实际需求的,无论是在安全性、高可用性及高并发等各个方面。因此,一般来说都是通过主从复制(Master-Slave)的方式来同步数据,再通过读写分离(MySQL-Proxy)来提升数据库的并发负载能力,这样的方案来进行部署与实施。复制功能数据分布负载均衡,针对数据读取数据            
                
         
            
            
            
            操作系统:CentOS Linux release 7.8.2003 (Core) master-1:192.168.200.50 master-2:192.168.200.51 ## 基本操作 **注: 所有节点都需要执行** ```bash // 关闭防火墙 systemctl stop fir ...            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2021-09-06 20:05:00
                            
                                220阅读
                            
                                                                                    
                                2评论
                            
                                                 
                 
                
                             
         
            
            
            
            将主数据库中的DDL和DML操作通过二进制日志传输到从数据库上,然后将这些日志重新执行(重做)一遍;从而使得从数据库的数据与主数据库保持一致。1、MySQL 主从复制的基本介绍 MySQL支持单向、异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。 MySQL复制是基于主服务器在二进制日志中跟踪所有对数据库的更改。因此,要进行复制,必须在主服务器上            
                
         
            
            
            
            主从复制:数据库接收到请求后, 由主节点的内置客户端执行sql语句,包括"增删改查”,其中"查”是读操作,不涉及主从复制.在主节点中有一个二进制日志文件bin.log, 当用户执行写操作(增删改)的sql语句时, 这些语句会被记录到二进制文件bin.log中, 这个二进制文件携带一个指针标识position,默认是120,当二进制日志文件的内容发送改变后,指针标识position也会改变。从节点中            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-10-10 10:04:32
                            
                                52阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            二、迁移类测试策略1、概述随着业务需求或数据量增长到一定程度,往往需要进行数据库切换,这里就伴随这数据迁移。关键字: 全量数据迁移,增量数据迁移,分库分表,数据双写,oracle、mysql、hbase…,新老数据兼容,数据订正2、发布方案(迁移方案)两大类:正常发布、停机发布正常发布:可以实现线上业务无缝切换,不影响用户使用,需要保证新老数据兼容,发布过程中的数据写入等。停机发布 : 优点在于可            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-04-15 20:09:11
                            
                                53阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            在学习MySQL双写特性的时候一直有个问题萦绕在我的心头:我们都知道MySQL在进行脏页刷新的时候会先将【内存中的doublewrite buffer】中的数据刷新到【磁盘中共享表空间的doublewrite buffer】中,然后再将脏页数据刷新到【磁盘数据文件.idb】中。当系统发生故障后MySQL可以利用undo log和来完成故障恢复工作。那么如果当系统在刷新脏页数据到【磁盘中共享表空间的            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-08-29 17:00:35
                            
                                75阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            参考文章:基于Redo Log和Undo Log的MySQL崩溃恢复流程MySQL的Double Write并不难理解 答疑文章(一):日志和索引相关问题《MySQL技术内幕:InnoDB存储引擎》作用double write(两次写)使数据页更可靠。当InnoDB存储引擎正在向磁盘写入数据页时(16KB的数据页只写入了前4KB),这时发生宕机,这种情况称为部分写失效(partial p            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-09-06 20:19:59
                            
                                309阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            问题最近公司想把原Oracle数据库都迁移到Mysql,这个切换需要一段时间过渡,所以存在Oracle、Mysql在项目中同时使用的情况。这样就需要使用多数据源的技术。多数据源配置本身比较简单,但有一个场景出现了问题。考虑如下代码:// 通过try-catch实现insertOrUpdate
Data data = new Data(); 
try{
    dataMapper.insert(d            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-12-21 13:38:30
                            
                                262阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            目录一、Mysql主主、主从复制主要思路:1、mysql复制实质:2、Mysql主从复制:3、Mysql主主复制:二、Mysql主主复制操作步骤:1、在主库中创建从库登录的账号、密码,并对账号进行授权:2、修改mysql配置文件:A库配置文件增加以下配置信息:B库配置文件增加的配置信息:3、设置编码格式(否则中文容易出现乱码):4、重新启动mysql数据库:5、查看相对应的主库的二进制文件名及其位            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-01-28 00:50:23
                            
                                154阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            # 实现MySQL双主双写的流程
## 1. 概述
MySQL双主双写是一种数据库架构模式,它允许多个主节点同时读写数据,从而提高系统的可用性和性能。在实际使用中,可以使用MySQL的GTID(全局事务标识)和主从复制的功能来实现双主双写。
## 2. 流程图
```mermaid
flowchart TD
    A(配置主节点1) --> B(配置主节点2)
    B --> C(配            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2023-09-18 18:37:57
                            
                                144阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            ## MySQL 双写
### 什么是MySQL双写?
MySQL双写是指将MySQL数据库的数据同时写入两个地方,通常是主库和从库。这样做的目的是为了确保数据的一致性和可靠性。在主从复制的情况下,主库负责写入数据,从库负责读取数据,如果仅仅依赖主从复制可能会存在数据不一致的情况,因此引入了双写机制。
### 如何实现MySQL双写?
在MySQL中,可以通过配置binlog和relay            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2024-05-15 07:57:47
                            
                                216阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            文章目录读写分离读写分离引入时机主从同步延迟读写分离落地读写分离配置双主模式适用场景MMM架构MHA架构主备切换配置双主模式MHA搭建服务器环境搭建三台机器ssh互通MHA下载安装MHA下载MHA node安装MHA manager安装MHA 配置文件MHA 配置检测MHA Manager启动测试MHA故障转移 读写分离读写分离引入时机  大多数互联网业务中,往往读多写少,这时候数据库的读会首先            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-10-05 17:52:20
                            
                                75阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            一 前言首先,缓存由于其高并发和高性能的特性,已经在项目中被广泛使用。在读取缓存方面,大家没啥疑问,都是按照下图的流程来进行业务操作但是在更新缓存方面,对于更新完数据库,是更新缓存呢,还是删除缓存。又或者是先删除缓存,再更新数据库,其实大家存在很大的争议本文由以下三个部分组成 1、讲解缓存更新策略 2、对每种策略进行缺点分析 3、针对缺点给出改进方案二 一致性方案先做一个说明,从理论上来说,给缓存            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-08-30 12:08:43
                            
                                210阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            缓存由于其高并发和高性能的特性,已经在项目中被广泛使用,在缓存的使用中,通常会面临一个更新的问题,当数据源产生变化,如何去更新到数据库与缓存之中,并且尽量保证安全与性能。更新缓存的的Design Pattern有四种:Cache aside, Read through, Write through, Write behind caching,我们下面一一来看一下这四种Pattern。一:Cache            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-09-23 15:24:09
                            
                                144阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            内容简介 所谓「双主复制」,其实就是“互做主从复制”。即每台master主机,既是master角色,又是slave角色。这样,任何一方所做的变更,都会通过主从复制到另一台主机的数据库中,以实现数据的一致性。这就是「双主复制」。 数据库复制有两种方式:基于GTID的复制;基于二进制日志位置的复制。本文            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2021-07-20 09:53:58
                            
                                224阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            目录结构:神马是半同步,同步,异步。查看系统是否支持半同步。加载半同步插件。启动半同步。查看半同步状态与测试。多个slave,半同步。半同步主从切换。更换slave到新的master节点。原Master恢复,加入新master节点。GTID双主半同步构建。Mysql在5.5版本引入了半同步的概念,在这里也普及一些基础知识。一:神马是半同步,同步,异步。1:Mysql的复制过程就是slave去mas            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                            精选
                                                        
                            2015-04-17 16:11:14
                            
                                4157阅读
                            
                                                        
                                点赞