MySQL binlog 三个典型的业务应用场景
程序员的成长之路
共 2092字,需浏览 5分钟
·
2023-09-29 14:12
![eab61d17278acd43cb3a60c08a1b3899.webp](https://filescdn.proginn.com/9126e6223f37db4543442cb9f948f7bc/eab61d17278acd43cb3a60c08a1b3899.webp)
阅读本文大概需要 2.8 分钟。
来自: cnblogs.com/kingszelda/p/8362612.html
什么是binlog
binlog是MySQL的一种二进制日志文件,用来记录数据的变化。MySQL使用binlog进行主从复制,如图:![8905d02b3477e9b80021239945e2a141.webp](https://filescdn.proginn.com/86e6bb9434eb6874bf92cad9b3e44edc/8905d02b3477e9b80021239945e2a141.webp)
-
客户端向master的mysql sever写入数据
-
当数据发生变化时,master将变更的数据记录写入到二进制文件中,即binlog。
-
slave订阅了master的binlog,所以会通过一个I/O THREAD与master的DUMP THREAD进行通信,同步binlog
-
I/O THREAD读取到binlog后会吸入到relay log中,准备重放。
-
slave会通过SQL THREAD读取relay log,重放数据的改动并执行相应的改动。
-
主从复制不是强一致性,只能保证最终一致
-
master配合binlog复制会影响性能,所以尽量不要在master上挂太多的slave,如果对时间要求不高,可以在slave上挂slave
2. binlog的业务应用
上面介绍了mysql中应用binlog的场景,而我们的业务可以伪装成master的slave节点,感知数据的变化,这就给了我们很多的业务运用空间。2.1 数据异构
经常有这样一个场景:原来业务是一个很单一的系统,所以表也在一起。随着业务的发展,系统开始拆分,总有一些表是各个业务都关注的表,但是对相关的字段的运用场景不同,所以这样一份元数据怎样更好的为各个系统服务就成了问题。当然,多写或者读写分离可以从物理节点上减少对数据服务器的压力,但是对业务并没有做到足够的支持,因为这些表都是一样的。因此我们可以通过binlog进行数据异构。![1d82703868190061ee22b72e09cef637.webp](https://filescdn.proginn.com/9e0f2d31411a06a722454939d66f0c96/1d82703868190061ee22b72e09cef637.webp)
2.2 缓存数据的补充
对于高并发的系统,数据库往往是系统性能的瓶颈,毕竟IO响应速度是远远小于电子的运算速度的。因此,很多查询类服务都会在CPU与数据库之间加上一层缓存。即现从缓存获取,命中后直接返回,否则从DB中获取并存入缓存后返回。而如果原始数据变化了但缓存尚未超时,则缓存中的数据就是过时的数据了。当数据有变更的时候主动修改缓存数据。![126d615af098aaa95ea33c0581e7ff1b.webp](https://filescdn.proginn.com/59566dfd92bbf2a8a7221c668e80c52a/126d615af098aaa95ea33c0581e7ff1b.webp)
2.3 基于数据的任务分发
有这样一个场景:很多系统依赖同一块重要数据,当这些数据发生变化的时候,需要调用其他相关系统的通知接口同步数据变化,或者mq消息告知变化并等待其主动同步。这两种情况都对原始系统造成了侵入,原始系统改一块数据,并不想做这么多其他的事情。所以这时候可以通过binlog进行任务分发。![fa7c65395fb9f322d2ea590daeac871f.webp](https://filescdn.proginn.com/4150c858fdfa957a0dffc472176fb8ce/fa7c65395fb9f322d2ea590daeac871f.webp)
3. 总结
binlog是mysql提供的数据同步机制,很好的解决了主从分离、读写库分离等业务。而我们可以构建一个中间件系统,“伪造”成master的一个slave。当读取了binlog中的数据变化后,根据相应的业务场景做各种业务处理。而目前我接触到的最常见的就是第一个场景——数据异构,可以异构到其他表中,也可以异构到其他数据引擎中,比如Elastic Search。<END> 推荐阅读:
答应我, 不要再用 if (obj != null) 判空了
互联网初中高级大厂面试题(9个G)
内容包含Java基础、JavaWeb、MySQL性能优化、JVM、锁、百万并发、消息队列、高性能缓存、反射、Spring全家桶原理、微服务、Zookeeper......等技术栈!
⬇戳阅读原文领取! 朕已阅
评论