百科问答小站 logo
百科问答小站 font logo



你遇到过哪些MySQL的坑? 第1页

  

user avatar   ku-ge-78-98 网友的相关建议: 
      

MySQL 主备延迟的这些坑...

一、什么是主备延迟?

主库完成一个事务,写入binlog。binlog 中有一个时间字段,用于记录主库写入的时间【时刻 t1】;

  • binlog 同步给备库,备库接收并存储到中继日志 【时刻 t2】;
  • 备库SQL执行线程执行binlog,数据写入到备库表中 【时刻 t3】;

主备延迟时间计算公式:t3 - t1

有没有简单命令,直接查看。在备库执行 show slave status 命令

seconds_behind_master,表示当前备库延迟了多少秒。

心细的同学会有疑问了, t3 和 t1 分属于两台机器,如果时钟不一致怎么办?

初始化时,备库连接到主库,会执行 SELECT UNIX_TIMESTAMP() 来获得当前主库的系统时间。

如果发现主库的系统时间与备库不一致,备库在计算 seconds_behind_master 会自动减掉这个差值。

注意:

binlog 数据传输的时间(t2 - t1)非常短,可以忽略。主要延迟花费在备库执行binlog日志。

二、主备延迟常见原因

1.备库机器配置差

这个不难理解,“门当户对”、“志同道合”,如果主备机器的性能差别大,直接导致备库的同步速度跟不上主库的生产节奏。

就像跑步一样,落后差距会越来越大。

解决方案:升级备库的机器配置

2.备库干私活

备库除了服务于正常的读业务外,是否有被其他特殊业务征用,如:运营数据统计等,这类操作非常消耗系统资源,也会影响数据同步速度。

解决方案:可以借助大数据平台,数据异构,满足各种这些特殊的统计类查询。

3.大事务

我们知道 binglog 是在事务提交时才生成的。

如果是处理大事务,执行时间比较长(比如 5分钟)。虽然备库很快拿到 binlog,但是在备库回放执行也要花费差不多的时间,也要 5分钟 (备库中,只有这个事务执行完提交,备库才真正对外可见),从而导致主备延迟很大。

比如 delete 操作,慎用 delete from 表名,建议采用分批删除,减少大事务。

三、主库不可用,主备切换有哪些策略?

1.可靠优先

当主库A 发生故障不可用时,开始进入主备切换。

  • 首先,判断 B库 seconds_behind_master 是否小于设定的阈值(比如 4 秒),如果满足条件
  • 将 A库 改为只读状态,将 readonly 设置为 true。断掉 A 库的写入操作,保证不会有新的写流量进来
  • 判断 B库的 seconds_behind_master ,直到为 0
  • 修改 B库 为 读、写状态
  • 客户端的请求打到 B库

此时,主备切换完成。

优点:

数据不会丢失,所以我们称为可靠性高。

缺点:

中间有个阶段,A库和B库都是只读状态,此时系统对外不能提供写服务。

2.可用优先

当然我们也可以不用等主备数据同步完成,在一开始时就直接将流量切到备库。

这样备库的流量就可能有两个来源:

  • 主库之前的剩余流量 binlog;
  • 客户端新请求进来的流量。

两部分流量冲击,会对 数据一致性 造成一些影响。

3.结论

本着 "攘外必先安内" ,保证内部的数据的正确性是我们的首选。所以,一般建议大家选择 可靠优先。

但是可靠优先可能会导致一定时间内,数据库不可用。这个时间值取决于主备延迟的时间大小。

所以,我们应尽可能缩短主备库的延迟时间大小,这样一旦主库发生故障,备库才会更快的同步完数据,主备切换才能完成,服务才能更快恢复。




  

相关话题

  为什么几乎所有的开源数据库中间件都是国内公司开源的?并且几乎都停止了更新? 
  Cache 和 Buffer 都是缓存,主要区别是什么? 
  分布式情况下如何实现跨异构数据库互操作的一致性? 
  新浪微博「点赞功能」数据库如何设计的? 
  明明很多编程语言从对象数组中取数据比用SQL从表中取数据方便,为什么数据库还是使用SQL? 
  如何评价天津大学因经费大幅度缩减而暂停订购大量论文数据库? 
  为什么分布式数据库这么喜欢用kv store? 
  为什么新的分布式数据库又开始支持关系模型了? 
  如何快速了解数据库,有否推荐书籍? 
  MySQL已经可以干大部分事情了,还有必要使用商业数据库或者PostgreSQL吗? 

前一个讨论
如何挽回已分手的前女友?
下一个讨论
如何快速了解数据库,有否推荐书籍?





© 2024-12-18 - tinynew.org. All Rights Reserved.
© 2024-12-18 - tinynew.org. 保留所有权利