MYSQL 主从复制如何保证数据一致性【IT枫斗者怎么样】
引言:MySQL主从复制原理直白一点来说,就是master写入数据时会留下写入日志,slave根据master留下的日志模仿其数据执行过程进行数据写入。了解了MySQL主从复制的原理,可以清楚的了解到,有两个步骤可能导致主从不一致:
今天我们从两个方面去解决主从一致的问题。
一、保证MYSQL(MASTER端)日志和数据的统一性,处理掉电、宕机等异常情况。
1、MySQL作为一个可插拔的数据库系统,支持插件式的存储引擎,在设计上分为Server层和Storage Engine层。
2、在Server层,MySQL以events的形式记录数据库各种操作的Binlog二进制日志,其基本核心作用有:复制和备份。除此之外,我们结合多样化的业务场景需求,基于Binlog的特性构建了强大的MySQL生态,如:DTS、单元化、异构系统之间实时同步等等,Binlog早已成为MySQL生态中不可缺少的模块。
3、在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%公司的业务场景)
1、通过以上两点的分析和配置,我们发现MySQL自身的Repliaction已经无法满足我们爱钻牛角尖同学的欲望了(后端的程序员思维都会过于缜密),怎么办?为了保证主从的数据绝对一致性,下面我来提供两个思路(今天有点累,仅仅是思路,具体解决方案请听下回分解)。 2、阿里云自己研发的数据订正平台。 3、PXC数据强一致性解决方案并且支持多主多从哦,缺点是需要向老板申请性能差别不大的机器做集群。
转载自:https://juejin.cn/post/7223662295867637818