java ClickHouse 进程 vim Vue全家桶 graph browser vue前端开发 npm安装vue jquery获取元素宽度 js获取数组第一个元素 datetimepicker赋值 oracle自增长 python中的index python中文教程 java编程学习 java环境配置 java获取当前月份 java地址 linuxls命令 网页游戏代码 subprocess 修改tomcat端口 苹果手机老是自动重启 ipad锁屏 msdev c语言表白代码 自动回复机器人 jq改变css样式 autocad2004迷你版 geartrax 女圣骑 键盘打字手指口诀 mysql数据库恢复 淘宝店铺会员 情头污系 豌豆代理 画吧教程 只狼二段跳 php教程下载
当前位置: 首页 > 学习教程  > 编程语言

MySQL系列:mysql主备复制实现 、读写分离原理

2020/9/19 16:17:17 文章标签: 测试文章如有侵权请发送至邮箱809451989@qq.com投诉后文章立即删除

目录

mysql主备复制实现

读写分离原理

canal的工作原理

查看binlog文件、大小


mysql主备复制实现

 

从上层来看,复制分成三步:

第一步:master在每次准备提交事务完成数据更新前,将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log event,简称event)

第二步:slave启动一个I/O线程来读取主库上binary log中的事件(master会给每个连接上来的slave一份完整的binlog拷贝),并记录到slave自己的中继日志(relay log)中。

第三步:slave还会起动一个SQL线程,该线程从relay log中读取事件并在备库执行,从而实现备库数据的更新。

 

 

读写分离原理

最典型的场景就是通过Mysql主从之间通过binlog复制来实现横向扩展,来实现读写分离。如下图所示:

 

  • 有一个主库Master,所有的更新操作都在master上进行
  • 同时会有多个Slave,每个Slave都连接到Master上,获取binlog在本地回放,实现数据复制。
  • 在应用层面,需要对执行的sql进行判断。所有的更新操作都通过Master(Insert、Update、Delete等),而查询操作(Select等)都在Slave上进行。由于存在多个slave,所以我们可以在slave之间做负载均衡。通常业务都会借助一些数据库中间件,如tddl、sharding-jdbc等来完成读写分离功能。

binlog同步组件已经有很多开源的实现,例如linkedin的databus,阿里巴巴的canal,美团点评的puma等

 

 

 

canal的工作原理

 

  1. canal模拟mysql slave的交互协议,伪装自己为mysql slave,向mysql master发送dump协议
  2. mysql master收到dump请求,开始推送binary log给slave(也就是canal)
  3. canal解析binary log对象(原始为byte流),把需要的日志过滤出来。

canal模拟了数据库主从复制机制,伪装为一个从库,当数据库(为不影响主库生产,我们监听的是从库)binlog有变化时,canal监听到,通过解析服务解析过滤binlog,把需要的日志过滤出来。

 

 

查看binlog文件、大小

通过"show binary logs"语句,来查看当前有多少个binlog文件,以及每个binlog文件的大小

 

 

 


本文链接: http://www.dtmao.cc/news_show_200387.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?