写点什么

MYSQL 主从复制如何保证数据一致性

  • 2023-04-20
    湖南
  • 本文字数:881 字

    阅读完需:约 3 分钟

引言: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 数据强一致性解决方案并且支持多主多从哦,缺点是需要向老板申请性能差别不大的机器做集群。


作者:IT 枫斗者

链接:https://juejin.cn/post/7223662295867637818

来源:稀土掘金

用户头像

还未添加个人签名 2021-07-28 加入

公众号:该用户快成仙了

评论

发布
暂无评论
MYSQL 主从复制如何保证数据一致性_Java_做梦都在改BUG_InfoQ写作社区