MySQL主从模式是指数据可以从一个MySQL数据库服务器主节点复制到一个或多个从节点 。MySQL 默 认采用异步复制方式 , 这样从节点不用一直访问主服务器来更新自己的数据 , 从节点可以复制主数据库 中的所有数据库 , 或者特定的数据库 , 或者特定的表 。阿粉在前面的几篇文章中 , 说了索引的分析 , 索引的原理 , 以及慢查询应该怎么去做合理的优化 , 接下来阿粉也给大家说说这个 MySQL 的组从复制到底是个怎么回事 。
主从模式MySQL主从模式是指数据可以从一个MySQL数据库服务器主节点复制到一个或多个从节点 。MySQL 默 认采用异步复制方式 , 这样从节点不用一直访问主服务器来更新自己的数据 , 从节点可以复制主数据库 中的所有数据库 , 或者特定的数据库 , 或者特定的表 。
文章插图
【一文讲解MySQL的主从复制】mysql主从复制用途:
- 实时灾备 , 用于故障切换(高可用)
- 读写分离 , 提供查询服务(读扩展)
- 数据备份 , 避免影响业务(高可用)
- 从库服务器能连通主库
- 主库开启binlog日志(设置log-bin参数)
- 主从server-id不
主从复制的步骤主从复制整体分为以下三个步骤:
第一步:主库将数据库的变更操作记录到Binlog日志文件中
第二步:从库读取主库中的Binlog日志文件信息写入到从库的Relay Log中继日志中
第三步:从库读取中继日志信息在从库中进行Replay,更新从库数据信息
上面的是文字描述 ,
我们再来一张原理图看看:
文章插图
在上述三个过程中 , 涉及了Master的BinlogDump Thread和Slave的I/O Thread、SQL Thread , 它们的作用如下:
- Master服务器对数据库更改操作记录在Binlog中 , BinlogDump Thread接到写入请求后 , 读取 Binlog信息推送给Slave的I/O Thread 。
- Slave的I/O Thread将读取到的Binlog信息写入到本地Relay Log中 。
- Slave的SQL Thread检测到Relay Log的变更请求 , 解析relay log中内容在从库上执行 。上述过程都是异步操作 , 俗称异步复制 , 存在数据延迟现象 。
MySQL主从复制的问题:
- 主库宕机后 , 数据可能丢失
- 从库只有一个SQL Thread , 主库写压力大 , 复制很可能延时
- 半同步复制---解决数据丢失的问题
- 并行复制----解决从库复制延迟的问题
半同步复制为了提升数据安全 , MySQL让Master在某一个时间点等待Slave节点的 ACK(Acknowledge character)消息 , 接收到ACK消息后才进行事务提交 , 这也是半同步复制的基础 。
- 当Master不需要关注Slave是否接受到Binlog Event时 , 即为传统的主从复制 。
- 当Master需要在第三步等待Slave返回ACK时 , 即为 after-commit , 半同步复制(MySQL 5.5引入) 。
- 当Master需要在第二步等待 Slave 返回 ACK 时 , 即为 after-sync , 增强半同步(MySQL 5.7引入) 。
推荐阅读
- MySQL中如何优化LIMIT分页
- 一篇打通微服务架构,Nacos + Gateway + Redis + MySQL + Docker
- 一文弄清混合云架构模式
- 汽车仪表盘的trip含义讲解 车上的trip是什么意思
- 不锈钢膨胀螺栓规格讲解 膨胀螺栓的标准规格
- 讲解360盈利模式 通过360怎么赚钱
- 讲解动车和高铁是不是一样 火车高铁动车区别
- 讲解鸡公碗的寓意 鸡公碗的历史由来
- 讲解橄榄球各个位置的名称 橄榄球的规则是什么
- 电脑台式机功率详情讲解 台式机的功率一般是多少