花十分钟了解一下MySql主从复制策略

1: 为什么需要高可用

MySql单机是可以使用,但是如果有一天MySql突然挂了,那么整个服务就都不可用了,这是不能接受的,总得有个兜底的方案

2:MySql高可用

MySql高可用也就是要保证即使有一台服务器挂了,也要保证服务能正常运行,所以在生产环境下至少也要保证有 一主一从 的架构,既然涉及到了主从,那么就会有数据同步的问题,MySql提供了几种数据同步策略

3:MySql主从复制原理

在主从进行同步过程中会涉及到三个线程:

  • 从库的I/O线程:主要是获取主库的binlog日志,获取到日志之后将日志写到relay log日志文件中
  • 从库的sql线程:读取relay log日志内容,解析成sql执行,其实就是执行主库的sql
  • 主库的log dump线程:读取主库的新增的binlog日志文件内容,发送给从库

4: 主从同步策略

4.1:全同步复制

客户端执行SQL时候,必须等到所有从库主库都提交成功之后才能返回响应给客户端

  • 优点:可以保证数据不丢失

  • 缺点:效率很低,随着机器的增加,执行的效率会越来越低,因为要同步的机器有很多,只有等所有机 器都提交之后才能返回响应给客户端

4.2:异步复制

客户端执行SQL之后,只会通知线程将binlog日志发送给从库,主库直接提交,不会等从库的响应,效率很高

  • 优点:效率高
  • 缺点:数据会丢失,如果这同步的时候,主库提交了,但是由于一些原因导致从库并没有获取到主库发送过来的binlog日志,这时候主库挂了,那么这条数据在从库就找不到了
  • 适用场景:数据安全性不高,效率很高的场景

4.3:半同步复制

客户端执行SQL之后,至少要有一个从库同步成功才能返回响应给客户端,也就是说即使现在主库挂了,那么从库还是有这条数据

在全同步与异步取了折中的方案

5:传统复制

在传统主从复制过程中,当主库执行行了一个事务,那么在binlog文件中就会记录该事务开始的position和结束的position,这也是为什么在配置传统主从复制中,从库要配置主库文件的position,也就是从哪个位置开始进行同步。接下来只要binglog有变化就会将binlong日志同步给从节点

5:GTID复制

在MySql5.6之后提供了GTID复制。 GTID全程是 Global Trancation ID,是由MySql机器的唯一id+TID组成的,TID是当前MySql实例已经提交的事务数量,是逐渐递增的。

Matser在更新数据之前就会生成一个GTID,一同记录到binlog中,再将binlog同步给Slave之后,Slave会先拿到GTID,然后判断这个GTID是否已经被处理过,如果被处理过就忽略,如果没有就执行

5.1:GTID的优势:

  • 不需要再去找position进行同步了
  • 比传统复制简单

8:多源复制

多源复制可以将多个MySql实例的数据合并到一个MySql实例上,但是多源复制不会解决冲突问题,比如数据库名重名等等,需要在程序中自行解决

 

全部评论

相关推荐

认真搞学习:这么良心的老板真少见
点赞 评论 收藏
分享
Twilight_m...:表格简历有点难绷。说说个人看法: 1.个人基本情况里好多无意义信息,什么婚姻状况、健康状况、兴趣爱好、户口所在地、身份证号码、邮政编码,不知道的以为你填什么申请表呢。 2.校内实践个人认为对找工作几乎没帮助,建议换成和测开有关的项目,实在没得写留着也行。 3.工作经历完全看不出来是干什么的,起码看着和计算机没啥关系,建议加强描述,写点你在工作期间的实际产出、解决了什么问题。 4.个人简述大而空,看着像AI生成,感觉问题最大。“Python,C,C++成为我打造高效稳定服务的得力工具”、“我渴望凭借自身技术知识与创新能力,推动人工智能技术的应用发展,助力社会实现智能化转型”有种小学作文的美感。而且你确定你个人简述里写的你都会嘛?你AI这块写的什么“深入研究”,发几篇顶会的硕博生都不一定敢这么写。而且你AI这块的能力和软测也完全无关啊。个人简述建议写你对哪些技术栈、哪些语言、哪些生产工具的掌握,写的有条理些,而且最好是和测开强相关的。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务