当前位置: 首页 > article >正文

73 mysql replication 集群的交互

前言

新建两个数据库, 分别为 192.168.220.132:3001, 192.168.220.132:3002

设置 192.168.220.132:3001 为 master, 192.168.220.132:3002 为 slave 

 

配置文件如下

9d885a196006e67a4fc79b880ce46377.png

 

然后使用 mysqld --initialize 来初始化 data 目录, 以及相关基础数据库 

这里会为 root 账户创建一个随机的密码, 用于后面的登录 

444b8eaf15735ff021b97d826c013cb1.png

 

然后是修改 root 的密码信息, 可访问客户端的信息 

612d9ba4be242edd816503f3a7762383.png

 

master 和 slave 启动好了之后, 在 slave 上面执行如下命令, 配置 master 的相关信息 

change master to master_host='192.168.220.132', master_port=3301, master_user='root', master_password='root', master_log_file='mysql-master.000006', master_log_pos=154;
start slave;
show slave status;

 

假设我们这里测试数据表如下 

CREATE TABLE `tz_test_02` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `field1` varchar(128) DEFAULT NULL,
  `field2` varchar(128) DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE,
  KEY `field_1` (`field1`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8

 

基础数据如下 

391d1634f6d0973216aa6cdb6fc87e1b.png

 

 

master 这边 binlog 的处理

我们这里测试执行 sql 如下, 我们这里 着重关注第二条 insert 语句的相关处理 

delete from tz_test_02 where id = 11;
INSERT INTO `tz_test_02`(`id`, `field1`, `field2`) VALUES (11, 'field11', '11');

 

在提交事务的时候, 会唤醒 BinlogSender 这边的相关逻辑处理 

909bcd9196cedbb2d7d8289125c58435.png

 

然后 Binlog_sener 这边被唤醒, 开始处理发送 binlog 的相关处理 

901217f849ffa5b024c010b07c043f49.png

 

然后这里会遍历新增的 event, 将需要传递的 event 传输到 slave 

这里会依次遍历几个 event, 类型分别为 Anonymous_Gtid, Query, Table_map, Write_rows, Xid

这里的 WRITE_ROWS_EVENT 对应的 position 为 8889

3f1ac8a95e614dd9bbd8532ab13a72dc.png

 

然后 master 的 binlog 中信息如下, 可以看到 8889 对应的 event 为 WRITE_ROWS_EVENT

98bfdfaee959f3a62aabbcb31cf5cffe.png

 

 

slave 这边 binlog 的处理

然后 slave 这边会收到相关的几个 event, Anonymous_Gtid, Query, Table_map, Write_rows, Xid 这里我们主要关心 WRITE_ROWS_EVENT

这里将接收过来的 WRITE_ROWS_EVENT 添加到 Relay_log_info 中, 其是对应于一段带缓冲的文件映射

6fd2045c7a3037a0269e993dbd7963c0.png

 

slave 这边的 relay_log 的 apply 的处理如下, 相当于拿到对应的 binlog 之后, 处理相关的业务处理, 对于我们这里的 WRITE_ROWS_EVENT 就是根据目标语句, 或者Write_rows 新增业务记录 

f52f861246d8cf8013e7e4934f029961.png

 

 

slave 这边 handleSlaveSql 的线程

slave reapply relay_log 的线程如下, 只负责处理该部分的业务 

04d9ae9dbb6ef057d569c81fe3d2c881.png

 

该线程是在 “start slave” 命令的处理中执行的, 新建了 handleSlaveSql 的线程 

377a82e544ddbbcd39b5eee45dd5b814.png

 

 

另外可以看出 这个 replication 过程时候近乎实时的 

中间空隙是 master 这边遍历发送 binlog, slave 这边接受 binlog, 并执行 

 

 

 

 

 


http://www.kler.cn/a/467798.html

相关文章:

  • unity学习11:地图相关的一些基础
  • 学英语学压测:02jmeter组件-测试计划和线程组ramp-up参数的作用
  • Vue2中使用Echarts
  • 【大模型】7 天 AI 大模型学习
  • Vue3实现PDF在线预览功能
  • 急需升级,D-Link 路由器漏洞被僵尸网络广泛用于 DDoS 攻击
  • Python 数据结构揭秘:栈与队列
  • HDFS块预留导致的存储空间异常的问题探究
  • python.exe无法找到程序入口 无法定位程序输入点(Anaconda Prompt报错)
  • 基于JAVA+SpringBoot+Vue的校园外卖服务系统
  • 无刷电机驱动板原理图解析
  • LinuxC高级day2
  • 模型训练二三事:参数个数、小批量、学习率衰减、输入形状
  • 044_Standalone App in Matlab中发布独立应用
  • [网络安全]sqli-labs Less-3 解题详析
  • vue elementUI Plus实现拖拽流程图,不引入插件,纯手写实现。
  • Vue的data和methods
  • 面试题解,Java中的“字节码”剖析
  • HP 电脑开机黑屏 | 故障判断 | BIOS 恢复 | BIOS 升级
  • 改善 Kibana 中的 ES|QL 编辑器体验
  • 智能工厂的设计软件 应用场景的一个例子: 为AI聊天工具添加一个知识系统 之20 再次重建 之5 项目文件三大部 整“拼”项目文档总述
  • vs 2022 中xml 粘贴为Class 中,序列化出来的xml 的使用
  • 九进制转10进制
  • Git 如何在IDEA中进行使用
  • SAP系统中的标准价、移动平均价是什么?有何区别?物料分类账的优点
  • 基于开发/发布/缺陷分离模型的 Git 分支管理实践20250103