首页 > 数据库 >MySQL高级11-后台进程

MySQL高级11-后台进程

时间:2023-09-20 09:34:24浏览次数:41  
标签:11 Thread 二进制 复制 MySQL 后台 日志 从库

一、前言

  MySQL的服务实现通过后台多个线程、内存池、文件交互来实现对外服务的,不同线程实现不同的资源操作,各个线程相互协助,共同来完成数据库的服务。MySQL常用的后台线程概括如下,分为Master Thread,IO Thread,Purge Thread,Page Cleaner Thread

二、Master Thread

  在MySQL中,Master Thread(主线程)是一个重要的后台线程,负责处理复制和恢复相关的任务。它是MySQL Replication(MySQL复制)架构中的核心组件之一。   Master Thread主要的责任包括:
  • 复制事件的写入:当有新的事务被提交到主数据库时,Master Thread负责将复制事件写入到二进制日志(Binary Log)中。这些复制事件是描述对主数据库进行的数据修改操作的逻辑记录。
  • 二进制日志文件的轮询:Master Thread负责轮询二进制日志文件,以确定是否有新的复制事件添加到日志中。它会定期检查是否需要创建新的二进制日志文件,以限制单个日志文件的大小。
  • 与从数据库进行通信:Master Thread与从数据库进行网络通信,将复制事件传输给从库。它将复制事件以事件流的形式发送给从数据库,确保从数据库可以获取到主库上所有的数据更改操作。
  • 复制相关的线程管理:Master Thread管理其他复制相关的线程,如IO Thread和SQL Thread。IO Thread负责从从库读取和处理复制请求,SQL Thread负责执行复制事件。
  • Master Thread在MySQL启动时启动,并一直运行在后台,直到MySQL关闭。它是MySQL复制架构中非常重要的一部分,保证了数据的可靠复制和同步
  对于复制环境中的故障排除和监控,理解和了解Master Thread的运行和行为非常重要。例如,可以通过检查Master Thread的状态和错误日志,来了解复制是否正常工作,以及是否存在任何问题或延迟。   总结:Master Thread是MySQL中负责处理复制和恢复任务的重要后台线程,它负责将复制事件写入到二进制日志中,并与从数据库进行通信,确保数据的可靠复制和同步。了解Master Thread的运行和行为对于复制环境的故障排除和监控非常重要。

三、IO Thread    

  在MySQL中,IO Thread(输入/输出线程)是复制架构中的一个核心组件。它是负责与复制的从库进行通信的后台线程,负责从从库读取并处理复制请求。在InnoDB存储引擎中大量使用了AIO异步非阻塞来处理IO请求。   IO Thread的主要任务包括:  
  • 与从库建立连接:IO Thread负责与一个或多个从库建立连接,并保持与从库的持久连接。通过这些连接,从库可以向主库发送复制请求,请求复制主库中的数据。
  • 从从库读取复制事件:一旦与从库建立了连接,IO Thread会定期从从库读取复制事件。这些复制事件是由Master Thread将主库上的数据更改操作以二进制格式写入到二进制日志中,并通过IO Thread传输给从库的。
  • 处理复制事件:IO Thread读取复制事件后,会将这些事件发送给SQL Thread处理。SQL Thread将复制事件解析并执行相应的数据更改操作,保证从库中的数据与主库保持同步。

  IO Thread是在MySQL启动时启动的,并一直运行在后台,直到MySQL关闭。它与Master Thread紧密合作,共同完成复制架构中主从之间的数据传输和同步。通过IO Thread,从库能够从主库获取数据更改并进行复制,确保从库和主库之间的数据保持一致性。

  IO Thread 主要负责下面IO请求的回调

  

  使用指令: show engine innodb status; 可以查看

  

  总结:IO Thread是MySQL复制架构中的核心组件,负责与从库建立连接,并处理从库的复制请求。它从主库读取复制事件,并将这些事件发送给SQL Thread进行处理。IO Thread在MySQL启动时启动,与Master Thread紧密合作,实现主从数据库之间的数据传输和同步。了解IO Thread的运行和行为对于复制环境的监控和故障排除非常重要。

四、Purge Thread

  在MySQL中,Purge Thread(清理线程)是复制架构中的一个重要组件。它负责删除不再需要的二进制日志文件,以释放磁盘空间并维护二进制日志的大小。

  Purge Thread的主要任务包括:

  • 删除过期的二进制日志:当从库成功复制了主库上的数据更改后,它会通知主库上的Purge Thread,以删除已经不再需要的二进制日志。这些已经复制到从库并且不再需要的二进制日志会占用宝贵的磁盘空间。Purge Thread会根据从库的状态信息,删除这些过期的二进制日志,并释放磁盘空间。
  • 维护二进制日志的大小:Purge Thread还负责维护和管理二进制日志的大小。它会检查当前的二进制日志文件是否已经达到了指定的大小限制。如果已经达到了限制,Purge Thread会关闭当前的二进制日志文件,并开始写入新的日志文件。旧的日志文件将被重命名和压缩,以节省磁盘空间。

   Purge Thread是在MySQL启动时启动的,并一直运行在后台,直到MySQL关闭。它会定期检查并删除不再需要的二进制日志文件,以及维护二进制日志的大小。通过这些操作,在复制过程中保持磁盘空间的有效利用,并防止二进制日志文件无限增长。

  总结:Purge Thread是MySQL复制架构中的一个组件,负责删除不再需要的二进制日志文件,并维护二进制日志的大小。它会根据从库的状态信息,删除已经复制到从库并且不再需要的二进制日志,并释放磁盘空间。此外,Purge Thread还会检查并维护二进制日志的大小,以防止它们无限增长。了解Purge Thread的运行和行为对于复制环境的监控和故障排除非常重要。

五、Page cleaner thread

  在MySQL中,Page Cleaner Thread是InnoDB存储引擎的一个重要后台线程,用于管理和维护脏页(已被修改但尚未写入磁盘的页)的刷新工作。它在InnoDB存储引擎启动时自动启动,并持续运行以处理脏页的刷新需求。

  Page cleaner thread的主要职责包括:

  • 扫描脏页:Page Cleaner Thread周期性地扫描InnoDB缓冲池,检查其中的脏页。脏页是指已被修改的页面,它们的内容需要被刷新到磁盘上的数据文件中,以确保数据的持久性。
  • 脏页刷新:当找到脏页时,Page Cleaner Thread会将这些脏页的数据写回到对应的数据文件中,使其变成干净页。这个过程称为脏页刷新。
  • 决定刷新速率:根据系统的负载情况和磁盘IO能力,Page Cleaner Thread会根据需要自动调整脏页刷新的速率,以避免对系统性能造成过大的负担。

  Page Cleaner Thread的存在和正常运行对于保证数据库的数据持久性和性能起着重要作用。如果Page Cleaner Thread无法及时刷新脏页,会导致脏页积压在内存中,可能导致缓冲池不足,影响数据库性能。因此,在监控和优化MySQL性能时,需要关注Page Cleaner Thread的运行状况以及相关配置参数的调整。

标签:11,Thread,二进制,复制,MySQL,后台,日志,从库
From: https://www.cnblogs.com/Se7eN-HOU/p/17715597.html

相关文章

  • Vue+Node连接MySql搭建项目
    https://haoying.blog.csdn.net/article/details/123660641?spm=1001.2014.3001.5506https://www.jb51.net/article/277499.htm ......
  • mysql数据脱敏
    MySQL数据脱敏是一种技术手段,用于将敏感数据转换为非敏感形式,以保护数据隐私和安全。以下是一些常见的MySQL数据脱敏方法:替换:将敏感数据中的特定字段或字符串替换为非敏感的字符串。例如,将姓名中的姓氏和/或名字替换为星号(*)。扰动:在敏感数据中添加噪声或扰动,使其难以识别。这种方......
  • 探索 WPF 的 ITabletManager.GetTabletCount 在 Win11 系统的底层实现
    本文将和大家介绍专为WPF触摸模块提供的ITabletManager的GetTabletCount方法在Windows11系统的底层实现本文属于WPF触摸相关系列博客,偏系统底层介绍,更多触摸博客请看WPF触摸相关大家都知道在Windows7系统,有专门的笔和触摸服务提供触摸消息的支持。而WPF是从V......
  • MySQL 表分区使用实践
    在使用MySQL8.0表分区时,需要注意以下一些关键事项和最佳实践:支持的存储引擎:MySQL8.0表分区仅支持一些特定的存储引擎,如InnoDB和NDB(NDB是MySQLCluster存储引擎)。因此,在选择分区时,请确保你的表使用的是支持分区的存储引擎。分区键的选择:选择适当的分区键非常重要。......
  • 洛谷 P1143. 进制转换
    进制转换题目描述请你编一程序实现两种不同进制之间的数据转换。输入格式共三行,第一行是一个正整数,表示需要转换的数的进制$n\(2\len\le16)$,第二行是一个$n$进制数,若$n>10$则用大写字母$\verb!A!\sim\verb!F!$表示数码$10\sim15$,并且该$n$进制数对应的十进制的......
  • 【面试题精讲】Mysql如何实现乐观锁
    有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准https://blog.zysicyj.top首发博客地址文章更新计划系列文章地址在MySQL中,可以通过使用乐观锁来实现并发控制,以避免数据冲突和并发更新问题。乐观锁是一种乐观的思想,它假设并发操作不会导致冲突,只......
  • MySQL学习03
    一、自动增加字段设置了自动步长字段,可以不用手动插入值,由系统提供的默认值和默认的步长自动增加,例如学号字段要求:1、只有主键才能设置2、只有数值型字段3、一张表最多只能设置一个设置方法:createtable表名(字段类型primarykeyauto_increment);设置初始值:1、......
  • centos 7 彻底删除mysql5.7 与 mysql5.7 rpm安装
    准备工作1.下载msyql5.7的安装包,mysql-5.7.36-1.el7.x86_64.rpm-bundle.tarsystemctlstopmysqld//关闭msyql服务2.查看是否有安装的mysql,删除安装的mysqlrpm-qa|grep-imysql//查看使用rpm安装了哪些包3.卸载安装的包,逐个删除查到了rpm包rpm-e--nodeps......
  • 深入解析 MySQL 中的字符串处理函数:RIGHT()、LEFT() 和 CHAR_LENGTH
    在MySQL数据库中,字符串处理是一个常见的任务,特别是当你需要从字符串中提取特定部分或者计算字符串的长度时。我们在之前的博文中已经介绍过SUBSTRING_INDEX()、SUBSTRING_INDEX()、SUBSTRING_INDEX(),感兴趣的朋友了可以翻一下我们之前的博文;在本文中,我们将深入探讨三个重要的字......
  • 102102110饶雯捷
    软工第一次作业;102102110;我是饶雯捷;我的爱好是睡觉;推荐你福大食堂中最喜欢的一道菜:玫瑰园二楼客家牛肉面!!!;推荐你目前最喜欢的一首歌:lettinggo;一句想说的话:祝大家都成为代码高手。......