首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >MySQL复制中使用的线程

MySQL复制中使用的线程

作者头像
MySQLSE
发布于 2024-04-15 07:29:23
发布于 2024-04-15 07:29:23
22000
代码可运行
举报
运行总次数:0
代码可运行

MySQL的主从复制是一项重要功能,可以利用其实现读写分离、高可用,及备份等目的。众所周知,MySQL是一个单进程、多线程的数据库,在各项工作中调用了不同的线程,本篇将介绍在主从复制中所使用的线程。

主从复制的工作原理

  1. 主库的更新事件(update、insert、delete)被写入二进制日志(binlog)。
  2. 从库发起连接,连接到主库。
  3. 主库创建一个“binlog dump” 线程,将二进制日志的内容发送到从库。
  4. 从库启动后,创建一个I/O线程,读取主库传过来的二进制日志内容,并写入到中继日志(relay log)。
  5. 从库还会创建一个SQL线程,从中继日志读取内容,从“Exec_Master_Log_Pos”位置开始执行读取到的更新事件,将更新内容写入到从库。

注意:SQL线程写入从库时,采取单线程模式,或多线程模式。多线程模式下,需要将中继日志分发到多个工作线程。

Binlog Dump线程

“binlog dump” 是一个主服务器线程,用于将主库的二进制日志传输到从库。在 MySQL 主从复制过程中,主服务器会为每一个连接成功的从服务器创建一个“binlog dump”线程。从服务器也会为每一个连接成功的主服务器创建自己的I/O线程和SQL线程,以实现主从之间的数据同步。下面是其详细工作过程:

  1. 二进制日志文件加锁。
  2. 读取更新的操作。
  3. 读取完毕后将锁释放。
  4. 将读取的记录发送给从服务器。

单线程从服务器

从服务器默认使用单线程处理中继日志,其优点是在一个数据库内的数据可以通过单线程保证其一致性。由于使用单线程,从服务器上可能会产生延迟,数据同步落后于主服务器。产生的原因是由于当多个客户端连接主服务器进行数据更新时,主服务器并行处理这些更新,但会将其在二进制日志中进行序列化,从服务器采用单线程处理这些更新时按序处理,极容易造成瓶颈。

多线程从服务器

使用多线程的从服务器可以减少从库延迟。开启多线程的方法为将变量“replica_parallel_workers”设置为0以外的值,该值即为并行的工作线程数量。当开启多线程从服务器时,从服务器的SQL线程不再直接应用中继日志中的更新事件,而是由工作线程替代其进行应用。

通过配置变量“replica_parallel_type”的值,指定并行处理的策略。

  • DATABASE:不同数据库执行的事务可以并行更新。
  • LOGICAL_CLOCK:事务是基于主服务器写入二进制日志的时间戳在从服务器上并行应用。事务之间的依赖关系基于对它们的时间戳进行跟踪,在可能的情况下提供并行化。

控制从服务器的线程

启动或停止I/O和SQL线程

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
START REPLICASTOP REPLICA

单独控制线程

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
START REPLICA IO_THREAD;
STOP REPLICA SQL_THREAD;

满足条件启动线程

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
START REPLICA UNTIL SQL_AFTER_MET_GAPSSTART REPLICA SQL_THREAD UNTIL SQL_BEFORE_GTIDS = '3E11FA47-71CA-11E1-9E33-C80AA9429562:23';

断开主从连接

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
RESET REPLICA;

重置从服务器

用户可以通过“RESET REPLICA”命令重置从服务器的连接,该命令可以清除复制元数据存储库,删除所有中继日志文件,并启动一个新的中继日志文件。对于正在使用GTID的服务器,该命令对GTID执行历史没有影响,不会改变“gtid_executed”或“gtid_purged”的值,也不会改变mysql. gtid_executed表。

以上内容是关于主从复制中线程的介绍,感谢关注“MySQL解决方案工程师”!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-04-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 MySQL解决方案工程师 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
mysql复制系列5-多线程复制
mysql复制中最常见的问题就是主从复制延迟问题,mysql从一开始不支持并行复制,到一步一步的优化改进多线程复制,下面介绍一下mysql复制单线程到多线程复制的历程
wangwei-dba
2021/05/14
1.3K0
MySQL 8 复制(六)——拓扑与性能
可以在任意个主从库之间建立复杂的复制拓扑结构,如普通的一主一(多)从、双(多)主复制、级联复制,MySQL 5.7.2后新增的多源复制,特殊场景下使用的Blackhole引擎与日志服务器等等。复制中的MySQL服务器须要遵循以下基本原则:
用户1148526
2019/07/11
1.9K0
MySQL 8 复制(六)——拓扑与性能
MySQL复制相关技术初步小结
MySQL有很多种复制,至少从概念上来看,传统的主从复制,半同步复制,GTID复制,多线程复制,以及组复制(MGR)。 咋一看起来很多,各种各样的复制,其实从原理上看,各种复制的原理并无太大的异同。 每一种复制的出现都是有其原因的,是解决(或者说是弥补)前一种的复制方案的潜在的问题的。 新的复制方式的出现,是基于对原复制某一方面增强或者是优化的结果,而不是全新的一种方案或者技术,所以就不难理解为什么有这么多中复制。 其实搞出来这么多概念,个人觉得是源于开源的原因吧,不同复制版本的出现,因为是一个不断发现问题就解决问题的过程。 如果是闭源的数据库,你只管打补丁就行了,SP1,SP2,SP3……,应该不会出现这么多概念上的东西。
星哥玩云
2022/08/16
3060
MySQL复制相关技术初步小结
企业实战(9)Mysql数据库实现主从同步,看这一篇就够了!
当master服务器上的数据发生改变时(增、删、改),则将其改变写入二进制binlog日志中;slave服务器会在一定时间间隔内对master二进制日志进行探测其是否发生改变,如果发生改变,则开启一个I/O 线程请求master二进制事件,同时主节点为每个I/O线程启动一个dump线程,用于向其发送二进制事件,并保存至从库本地的中继日志中,从库(从节点)将启动SQL线程从中继日志中读取二进制日志,在本地重放,使得其数据和主节点的保持一致,最后IO线程和SQL线程将进入睡眠状态,等待下一次被唤醒。
非著名运维
2022/06/22
1.5K0
企业实战(9)Mysql数据库实现主从同步,看这一篇就够了!
MySql主从复制
在MySql的生产环境中,由于单台MySql不能满足高可用性需求,一般通过主从复制(Master-Slave)方式同步数据,再通过读写分离(MySql-Proxy)来提升数据库并发负载能力。
春哥大魔王
2020/07/14
2.3K0
mysql主从同步(2)-问题梳理
之前部署了Mysql主从复制环境(Mysql主从同步(1)-主从/主主环境部署梳理),在mysql同步过程中会出现很多问题,导致数据同步异常。 以下梳理了几种主从同步中可能存在的问题: 1)slave运行过慢不能与master同步,也就是MySQL数据库主从同步延迟 MySQL数据库slave服务器延迟的现象是非常普遍的,MySQL复制允许从机进行SELECT操作,但是在实际线上环境下,由于从机延迟的关系,很难将读取操作转向到从机。这就导致了有了以下一些潜规则:“实时性要求不高的读取操作可以放到slave服
洗尽了浮华
2018/01/23
2.4K0
MySQL 主从复制原理
在实际生产环境中,如果对MySQL数据库的读和写都在一台数据库服务器中操作,无论是在安全性、高可用性,还是高并发等各个方面都是不能满足实际需求的,一般要通过数据库集群的主从复制机制来同步数据,再通过读写分离来提升数据库的并发负载能力
终有救赎
2023/11/11
2610
MySQL 主从复制原理
Mysql主从复制
Mysql主从复制也可以称为Mysql主从同步,它是构建数据库高可用集群架构的基础。它通过将一台主机的数据复制到其他一台或者多台主机上,并重新应用日志(realy log)中的SQL语句来实现复制功能。Mysql支持单向,双向,链式级联,异步复制,复制过程中一台服务器充当主库(master),而一个或者多个服务器充当从库(slave)
mikelLam
2022/10/31
1.4K0
MySQL复制性能优化和常见问题分析
二进制日志文件并不是每次写的时候都会同步到磁盘,当发生宕机的时候,可能会有最后一部分数据没有写入到binlog中,这给恢复和复制带来了问题。当sync_binlog=1表示每写缓冲一次就同步到磁盘,表示同步写磁盘的方式来写binlog。也就是说每当向MySQL提交一次事务,MySQL将进行一次fsync之类的磁盘同步命令来将binlog_cache的数据强制刷到磁盘中sync_binlog的值默认为0,sync_binlog=0时表示采用操作系统机制进行缓冲数据同步。采用sync_binlog=1时,会增加磁盘IO的次数,会影响写入性能。sync_binlog=1时,并不是100%安全,会存在相应的问题。比如说使用Innodb引擎时,在一个事务发出commit前,会将binlog立即刷到磁盘中。如果这时候已经写入到binlog中,但是还没有提交就已经挂了,那么MySQL重启时,会将通过Redo log、Undo log将这个事务回滚掉,但是binlog已经记入了该事务信息,不能回滚掉。所以我们需要设置innodb_support_xa=1确保MySQL服务层的binlog和MySQL存储引擎层的Redo log、Undo log之间的数据一致性。
用户2032165
2018/12/07
1.2K0
MySQL复制性能优化和常见问题分析
数据库MySQL-读写分离
数据库读写分离对于大型系统或者访问量很高的互联网应用来说,是必不可少的一个重要功能。
cwl_java
2021/08/30
1.4K0
数据库MySQL-读写分离
面试官:咱们来聊一聊mysql主从延迟
前段时间遇到一个线上问题,后来排查好久发现是因为主从同步延迟导致的,所以今天写一篇文章总结一下这个问题希望对你有用。如果觉得还不错,记得加个关注点个赞哦
程序员小饭
2022/03/03
5050
面试官:咱们来聊一聊mysql主从延迟
MySQL主从复制虽好,能完美解决数据库单点问题吗?
2、从库的IO线程在指定位置读取主库binlog内容存储到本地的中继日志(Relay Log)中
lyb-geek
2019/03/07
2.3K0
MySQL主从复制虽好,能完美解决数据库单点问题吗?
MySQL 8 复制(四)——GTID与复制
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wzy0623/article/details/91047395
用户1148526
2019/07/02
4.2K0
数据库MySQL-读写分离
数据库读写分离对于大型系统或者访问量很高的互联网应用来说,是必不可少的一个重要功能。
cwl_java
2021/12/30
1.7K0
数据库MySQL-读写分离
CentOs7.3 搭建 MySQL 5.7.19 主从复制,以及复制实现细节分析
CentOs7.3 搭建 MySQL 5.7.19 主从复制,以及复制实现细节分析 概念 主从复制可以使MySQL数据库主服务器的主数据库,复制到一个或多个MySQL从服务器从数据库,默认情况下,复制异步; 根据配置,可以复制数据库中的所有数据库,选定的数据库或甚至选定的表。 MySQL中主从复制的优点 横向扩展解决方案 在多个从库之间扩展负载以提高性能。在这种环境中,所有写入和更新在主库上进行。但是,读取可能发生在一个或多个从库上。该模型可以提高写入的性能(由于主库专用于更新),同时在多个从库上读取,可以
程序员鹏磊
2018/02/09
1.9K0
MySQL 5.7基于GTID及多线程主从复制
MySQL主从同步是在MySQL主从复制(Master-Slave Replication)基础上实现的,通过设置在Master MySQL上的binlog(使其处于打开状态),Slave MySQL上通过一个I/O线程从Master MySQL上读取binlog,然后传输到Slave MySQL的中继日志中,然后Slave MySQL的SQL线程从中继日志中读取中继日志,然后应用到Slave MySQL的数据库中。这样实现了主从数据同步功能。
小小科
2020/06/23
2.5K0
mysql读写分离原理详解(主从复制和读写分离)
主库记录二进制日志。在每次准备提交事务完成数据更新前,主库将数据更新的事件记录到二进制日志中。MySQL会按事务提交的顺序而非每条语句的执行顺序来记录二进制日志。在记录二进制日志后,主库会告诉存储引擎可以提交事务了。下一步,备库将主库的二进制日志复制到其本地的中继日志中。首先,备库会启动一个工作线程,称为I/O线程,I/O线程跟主库建立一个普通的客户端连接,然后在主库启动一个特殊的二进制转储线程,这个二进制转储线程会读取主库上二进制日志中的事件。他不会对事件进行轮询。如果该线程追赶上了主库,他将进入睡眠状态,直到主库发送信号量通知其有新的事件产生时才会被唤醒,备库I/O线程会将接收到的事件记录到中继日志中。
全栈程序员站长
2022/07/25
6400
MySQL 主从复制的问题及解决方案
MySQL 主从复制的问题及解决方案
Java架构师必看
2021/05/06
5180
MySQL 主从复制的问题及解决方案
MySQL 8 复制(三)——延迟复制与部分复制
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wzy0623/article/details/90642712
用户1148526
2019/07/02
4.1K0
MySQL 8 复制(三)——延迟复制与部分复制
mysql复制
一、复制的意义 mysql的复制功能是构建基于MySql大规模,高性能应用的基础,我们可以通过为服务器配置一个或多个备库来进行数据同步;复制功能不仅有利于构建高性能的应用,同时也是高可用性,可扩展行,灾难恢复,备份以及数据仓库等工作的基础 二、复制的方式 Mysql支持3种方式:基于语句的复制、基于行的复制、混合复制。对应的binlog的格式也有三种:STATEMENT,ROW,MIXED (1)基于语句的复制(SBR) 每一条会修改数据的sql语句会记录到binlog中。优点是不需要记录每一条sql语句和
magicsoar
2018/02/06
2.9K0
相关推荐
mysql复制系列5-多线程复制
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验