mysql的高可用性

前言

mysql的高可用性

mysql的两个日志系统 binglog和redo-log的

mysql是如何保证主从一致的

msyql是这么保证高可用的?


mysql的高可用性

一、mysql的高可用性

说到高可用性 其实就是通过binlog和redo-log两个日志系统和一主多从来实现的。

mysql的两个日志系统 binglog和redo-log的

binlog的写入机制

binlog写入的时候有一个自增id,比如要写入一个新的事务,那么就会在这个id上加上这个事务的长度。由于binlog的写入过程是需要保证一致的,因此无论事务多大都要一次写入。

如果在chche中写入不了就会先写入到磁盘中暂时存储。然后提交到文件系统的page,然后在sync到磁盘中,

binlog中有一个同步的参数 sync-binlog = 0时 每次事务不会sync到磁盘

sync-binlog = 1 时 每次都会写入到磁盘

sync-binlog = N时, N次事务之后会一起写入磁盘

redo-log的写入机制

redo-log的写入机制是会先写入到redo-log的buffer中,然后写入到 文件系统的page cache中 然后再写入到磁盘

同理也有参数可以控制

innodb-fluse** = 0 时只保留在redo-log buffer中,

= 1 时每次都写入到磁盘

= 2 时只保留在 文件系统的page cache

一般情况下都会设置成双1

那么你可以会问 这样不就导致写磁盘的次数多了吗 为什么还会提高效率

  1. 采用组提交的方式,对于redo-log ,会延迟提交,在binlog写入到buffer之后再提交,如果这时有多个事务 就会一起提交
  2. 顺序写比随机写要提高很多效率。
  3. binlog也可以通过参数设置 大于多少条|| 大于多长时间后提交

redo-log还有一个提交机制就是等到

1 如果buffer中的内存即将达到一半 就会触发写入磁盘

2 如果有其它事务写入磁盘,会顺带把准备好的数据写入到磁盘

二、mysql是如何保证主从一致的

主要是使用了binlog,binlog是mysql高可用中非常重要的一环。

从库通过读取binlog,然后写入到从库中,保证了数据的一致性。

binlog的日记有三种格式

  1. statement 这种格式会原封不动的记录sql文件,但是会有问题,比如delete from t where c >4 limit 1,在从库执行的时候可能会因为原则的索引不一样,导致排序之后的数据不一样,导致删除的数据不一致。
  2. row会详细的记录每一行的结果,定位到具体的表 具体的操作,以及操作哪一行。所以不会出现上面的问题,但是有一个缺点就是记录非常详细,会导致内存压力和性能压力,比如我要删除10w行数据,如果用sql记录就一行命令,但是如果使用row就会有不止是10w的binlog日志了。
  3. mixed mixed是statement和row的混合,就是为了解决row的缺点,mysql会自己判断使用statement还是row来存储

循环写入问题:

A,B互为备库即 mm型。那么是否会出现A写入B之后,B又重新写入A呢?

不会,mysql是通过binlog中的server id来确定每条数据的唯一性的。

A生成的binlog文件的server id,如果是读的B的那么生成的server id还是原来的,这样A读完之后生成的binlog给B,B发现是自己的server id就不写入了

三、 msyql是这么保证高可用的?

一般保证高可用的方式就是主从切换,一主多从等。

主备延迟:主备延迟是指,备库同步主库的延迟时间。

造成主备延迟的原因有

  1. 大事物
  2. 把大量的查询统计类功能放到了备库上导致压力过大。

主从切换的过程是 主库先变成可读状态,然后备库追上主库,之后备库变成可读写状态,

也可以不等同步完成就切换,但是会导致数据库不一致,如果binlog是row的情况下,会直接报错停止同步。不推荐

主库掉电 可不可以直接切从库?

不可以,因为切从库会导致数据不一致,并且有些事务还没有返回,连接从库之后会以为没有成功,但是在主库已经执行成功了

相关推荐
企业数字化笔记1 分钟前
AI写的系统出现504怎么办?接口超时和数据库慢查询排查
数据库·后端
2601_9622186144 分钟前
万象生鲜系统订单全生命周期状态同步技术实现业务可视
大数据·数据库·人工智能·python·算法
Wang's Blog1 小时前
Java框架快速入门:Spring Security+OAuth2之用户注册与唯一性校验实现
java·数据库·spring
跨境生态圈1 小时前
2026谷歌SEO快速排名深度解析:合规起量、避坑指南与实战落地策略
数据库·人工智能·爬虫·搜索引擎·chatgpt
JavaPub-rodert2 小时前
Docker 安装 MySQL 完整教程:从零部署数据库,到生产环境持久化配置
数据库·mysql·docker
隔窗听雨眠2 小时前
MySQL整库迁移至KaiwuDB完全指南:从数据类型映射到生产切换的系统性实践
数据库·mysql
xhbh6662 小时前
中小企业 Redis 运维,如何安全归档 RDB、AOF 备份文件?
运维·数据库·缓存·数据备份·文件备份·同步备份·号码备份
2301_32241428043 小时前
活力孕康复APP 47737- 原创(免费领源码+部署教程+开发环境)
java·vue.js·spring boot·mysql·微信小程序·idea·微信开发者工具
勤奋的树懒3 小时前
从手写 SQL 到 Windows 工具:致远 OA 文件清理实践
数据库·sql·windows server·致远oa
笃行3503 小时前
OceanBaseVS金仓:一条 SQL 的两条路——KingbaseES 的性能竞争力从哪来
数据库