MYSQL 主从复制如何保证数据一致性
引言:MySQL 主从复制原理直白一点来说,就是 master 写入数据时会留下写入日志,slave 根据 master 留下的日志模仿其数据执行过程进行数据写入。了解了 MySQL 主从复制的原理,可以清楚的了解到,有两个步骤可能导致主从不一致:
今天我们从两个方面去解决主从一致的问题。
一、保证 MYSQL(MASTER 端)日志和数据的统一性,处理掉电、宕机等异常情况。
MySQL 作为一个可插拔的数据库系统,支持插件式的存储引擎,在设计上分为 Server 层和 Storage Engine 层。
在 Server 层,MySQL 以 events 的形式记录数据库各种操作的 Binlog 二进制日志,其基本核心作用有:复制和备份。除此之外,我们结合多样化的业务场景需求,基于 Binlog 的特性构建了强大的 MySQL 生态,如:DTS、单元化、异构系统之间实时同步等等,Binlog 早已成为 MySQL 生态中不可缺少的模块。
在 Storage Engine 层,InnoDB 作为比较通用的存储引擎,其在高可用和高性能两方面作了较好的平衡,早已经成为使用 MySQL 的首选(PS:官方从 MySQL 5.5.5 开始,将 InnoDB 作为了 MySQL 的默认存储引擎 )。和大多数关系型数据库一样,InnoDB 采用 WAL 技术,即 InnoDB Redo Log 记录了对数据文件的物理更改,并保证总是日志先行,在持久化数据文件前,保证之前的 redo 日志已经写到磁盘。Binlog 和 InnoDB Redo Log 是否落盘将直接影响实例在异常宕机后数据能恢复到什么程度。InnoDB 提供了相应的参数来控制事务提交时,写日志的方式和策略,例如:
我们得出以下配置:
二、保证 MYSQL(SLAVE 端)同步时和 MASTER 端保持一致。
1、异步复制
2、半同步复制
3、全同步复制
三、备注 &解决方案(以上解决思路可以满足 99.8%公司的业务场景)
通过以上两点的分析和配置,我们发现 MySQL 自身的 Repliaction 已经无法满足我们爱钻牛角尖同学的欲望了(后端的程序员思维都会过于缜密),怎么办?为了保证主从的数据绝对一致性,下面我来提供两个思路(今天有点累,仅仅是思路,具体解决方案请听下回分解)。
阿里云自己研发的数据订正平台。
PXC 数据强一致性解决方案并且支持多主多从哦,缺点是需要向老板申请性能差别不大的机器做集群。
作者:IT 枫斗者
链接:https://juejin.cn/post/7223662295867637818
来源:稀土掘金
评论