[MySQL5.6 新特性] 并行复制代码结构(1)

本文涉及的产品
RDS Agent(兼容OpenClaw),2核4GB
RDS Agent(兼容Hermes Agent),2核4GB
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
简介:

相关文件:

rpl_slave.cc  rpl_slave.h rpl_rli_pdb.cc rpl_rli_pdb.h

1.启动slave.

init_slave
   |—>start_slave_threads  
                       |—>handle_slave_io(IO thread) 启动IO线程
                       |—>handle_slave_sql(SQL thread) 启动SQL线程(作为协调者)
                                 |—>slave_start_workers(Worker thread)
                                         |—->handle_slave_worker 启动worker线程


2.
handle_slave_worker
   |—>while (!error)
   |—>{
   |—>   error= slave_worker_exec_job(w, rli);
                        |—>job_item= pop_jobs_item()
                               |—>读取worker->jobs队列的头部(head_queue),没有的话则等待(worker->jobs_cond)
                        |—>error= ev->do_apply_event_worker(worker);
   |—>}
   |—>while(de_queue(&w->jobs, job_item)) 清理队列中的事件
   |—>必要的清理后退出


worker线程在pop_jobs_item的检查点:
  while (!job_item->data && !thd->killed &&
         worker->running_status == Slave_worker::RUNNING)
因此当线程被kill或者 worker->running_status被置为NOT_RUNNING时被中断。


3.
handle_slave_sql
  |—> slave_start_workers  开启worker线程
  |—> rli->init_relay_log_pos  初始化relay log pos
  |—>while (!sql_slave_killed(thd,rli)){
  |—>exec_relay_log_event(thd,rli)
           |—>ev = next_event(rli)  读取事件
           |—>exec_res= apply_event_and_update_pos(ptr_ev, thd, rli);
                    |—>ev->apply_event 
                            调用Log_event::apply_event,在以下情况下,SQL线程会直接执行事件
                            1.处于recovery状态
                            2.worker线程数为0
                            3.执行某些特定事件需要串行化时,由SQL线程来执行,会先调用
                             当需要串行化时,会调用wait_for_workers_to_finish等待worker线程完成
                             以上情况直接调用do_apply_event(),否则就将事件指定给某个worker线程
                             (Log_event::get_slave_worker)                             
                                         
                     |—>更新position,这里要考虑到crash-safe
                             
  |—->slave被kill或出现错误,slave_stop_workers(rli, &mts_inited)
             对每个sql线程,先设置w->running_status= Slave_worker::KILLED再等待其变成Slave_worker::NOT_RUNNING

每个Worker线程有一个slave_worker结构体,其作用类似于之前的relay_log_info


以上简单的描述了并行复制部分的代码架构,写的很简单,可能会有些小的错误,后续在深入了解时,会进行校正。接着关注的内容是:如何安全的进行safe-recovery且保证数据不丢失
下回分解……….

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
10月前
|
SQL 监控 关系型数据库
MySQL事务处理:ACID特性与实战应用
本文深入解析了MySQL事务处理机制及ACID特性,通过银行转账、批量操作等实际案例展示了事务的应用技巧,并提供了性能优化方案。内容涵盖事务操作、一致性保障、并发控制、持久性机制、分布式事务及最佳实践,助力开发者构建高可靠数据库系统。
|
负载均衡 算法 关系型数据库
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
|
消息中间件 缓存 弹性计算
纯PHP+MySQL手搓高性能论坛系统!代码精简,拒绝臃肿
本内容分享了一套经实战验证的社交系统架构设计,支撑从1到100万用户的发展,并历经6次流量洪峰考验。架构涵盖客户端层(App、小程序、公众号)、接入层(API网关、负载均衡、CDN)、业务服务层(用户、内容、关系、消息等服务)、数据层(MySQL、Redis、MongoDB等)及运维监控层(日志、监控、告警)。核心设计包括数据库分库分表、多级缓存体系、消息队列削峰填谷、CQRS模式与热点数据动态缓存。同时提供应对流量洪峰的弹性伸缩方案及降级熔断机制,并通过Prometheus实现全链路监控。开源建议结构清晰,适合大型社交平台构建与优化。
530 11
|
10月前
|
存储 关系型数据库 MySQL
介绍MySQL的InnoDB引擎特性
总结而言 , Inno DB 引搞 是 MySQL 中 高 性 能 , 高 可靠 的 存 储选项 , 宽泛 应用于要求强 复杂交易处理场景 。
399 15
|
存储 关系型数据库 MySQL
阿里面试:为什么要索引?什么是MySQL索引?底层结构是什么?
尼恩是一位资深架构师,他在自己的读者交流群中分享了关于MySQL索引的重要知识点。索引是帮助MySQL高效获取数据的数据结构,主要作用包括显著提升查询速度、降低磁盘I/O次数、优化排序与分组操作以及提升复杂查询的性能。MySQL支持多种索引类型,如主键索引、唯一索引、普通索引、全文索引和空间数据索引。索引的底层数据结构主要是B+树,它能够有效支持范围查询和顺序遍历,同时保持高效的插入、删除和查找性能。尼恩还强调了索引的优缺点,并提供了多个面试题及其解答,帮助读者在面试中脱颖而出。相关资料可在公众号【技术自由圈】获取。
|
10月前
|
关系型数据库 MySQL 数据库
MySql事务以及事务的四大特性
事务是数据库操作的基本单元,具有ACID四大特性:原子性、一致性、隔离性、持久性。它确保数据的正确性与完整性。并发事务可能引发脏读、不可重复读、幻读等问题,数据库通过不同隔离级别(如读未提交、读已提交、可重复读、串行化)加以解决。MySQL默认使用可重复读级别。高隔离级别虽能更好处理并发问题,但会降低性能。
314 0
|
存储 SQL 关系型数据库
Mysql学习笔记(二):数据库命令行代码总结
这篇文章是关于MySQL数据库命令行操作的总结,包括登录、退出、查看时间与版本、数据库和数据表的基本操作(如创建、删除、查看)、数据的增删改查等。它还涉及了如何通过SQL语句进行条件查询、模糊查询、范围查询和限制查询,以及如何进行表结构的修改。这些内容对于初学者来说非常实用,是学习MySQL数据库管理的基础。
436 6
|
SQL 安全 关系型数据库
【MySQL基础篇】事务(事务操作、事务四大特性、并发事务问题、事务隔离级别)
事务是MySQL中一组不可分割的操作集合,确保所有操作要么全部成功,要么全部失败。本文利用SQL演示并总结了事务操作、事务四大特性、并发事务问题、事务隔离级别。
5919 56
【MySQL基础篇】事务(事务操作、事务四大特性、并发事务问题、事务隔离级别)
|
数据管理 关系型数据库 MySQL
数据管理服务DMS支持MySQL数据库的无锁结构变更
本文介绍了使用Sysbench准备2000万数据并进行全表字段更新的操作。通过DMS的无锁变更功能,可在不锁定表的情况下完成结构修改,避免了传统方法中可能产生的锁等待问题。具体步骤包括:准备数据、提交审批、执行变更及检查表结构,确保变更过程高效且不影响业务运行。
2360 2
|
存储 Oracle 关系型数据库
Oracle和MySQL有哪些区别?从基本特性、技术选型、字段类型、事务、语句等角度详细对比Oracle和MySQL
从基本特性、技术选型、字段类型、事务提交方式、SQL语句、分页方法等方面对比Oracle和MySQL的区别。
3799 18
Oracle和MySQL有哪些区别?从基本特性、技术选型、字段类型、事务、语句等角度详细对比Oracle和MySQL

推荐镜像

更多