服务器之家:专注于服务器技术及软件下载分享
分类导航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|数据库技术|

服务器之家 - 数据库 - Mysql - MySQL主从如何保证高可用

MySQL主从如何保证高可用

2022-02-28 23:09DifferentJava Mysql

通过主备同步我们能够保证数据的可靠性(最终一致性),MySQL的主备可用性主要依赖于主备切换的时间,越短越好,但前提是切换完成以后数据要一致。

MySQL主从如何保证高可用

什么时候是主备切换的最佳时机?

主从延迟越小越好。

如何查看备库的同步延迟?

-- 在slave上执行以下命令 show slave status\G

MySQL主从如何保证高可用

上图返回结果中包含一个seconds_behind_master字段,用于表示当前备库延迟了多少秒。

seconds_behind_master的计算逻辑

  • 每个事务的binlog里面都有一个时间字段,用于记录主库上的写入时间
  • 备库取出当前正在执行的事务的时间字段的值,计算它与当前系统时间的差值,得到seconds_behind_master
  • 备库在连接到主库时,会通过执行select unix_timestamp()函数获取主库的系统时间,如果发现主库和自己的时间不一致,备库在计算seconds_behind_master会自动扣掉这个差值

什么情况下会发生主备切换?

  • 主动运维操作
  • 主库意外宕机

主备延迟的原因?

  • 备库机器配置较低
  • 备库压力大(比如在备库上执行一些占用资源的运营报表分析)
  • 大事务
  • 备库的并行复制能力

主备切换策略由哪几种?

  • 可靠性优先策略
  • 可用性优先策略

什么是可靠性优先策略?

可靠性优先策略优先保证数据的可靠性,通常由专门HA系统实现。

可靠性优先策略下的主备切换逻辑

  1. 判断Slave B现在的seconds_behind_master,如果小于某个值(比如5s)继续下一步,否则重试这一步
  2. 把Master A修改为只读状态
  3. 判断Slave B的seconds_behind_master的值,直到这个值变为0为之
  4. 把Slave B改为可读写状态
  5. 把业务请求切到备库B,此时Slave B就正式晋升为主库

可靠性优先策略假设主从延迟很大,无法快速切换,主节点又不可用,这将会导致服务长时间的不可用。

可用性优先策略

可用性优先策略是不再等待主从同步完成,如果主节点一旦宕机,立马进行切换,但是此时可能会导致数据一致性问题。

尤其是当binlog模式是statement或者mixed模式下的时候,很容易造成数据不一致。如果binlog模式是ROW模式,由于记录的是某个行记录的全字段,在插入数据的时候可能会因为主键冲突,使得同步线程报错并停止。

在实际使用中,我更建议使用可靠性优先策略,毕竟对于数据服务来说,数据可靠性重要程度要高于可用性。

原文地址:https://www.toutiao.com/a7068928938910761483/

延伸 · 阅读

精彩推荐
  • Mysql浅谈mysql 树形结构表设计与优化

    浅谈mysql 树形结构表设计与优化

    在诸多的管理类,办公类等系统中,树形结构展示随处可见,本文主要介绍了mysql 树形结构表设计与优化,具有一定的参考价值,感兴趣的小伙伴们可以参...

    小码农叔叔5242021-11-16
  • MysqlMySQL锁的知识点总结

    MySQL锁的知识点总结

    在本篇文章里小编给大家整理了关于MySQL锁的知识点总结以及实例内容,需要的朋友们学习下。...

    别人放弃我坚持吖4362020-12-14
  • MysqlERROR: Error in Log_event::read_log_event()

    ERROR: Error in Log_event::read_log_event()

    ERROR: Error in Log_event::read_log_event(): read error, data_len: 438, event_type: 2 ...

    MYSQL教程网6412020-03-13
  • Mysqlmysql 不能插入中文问题

    mysql 不能插入中文问题

    当向mysql5.5插入中文时,会出现类似错误 ERROR 1366 (HY000): Incorrect string value: '\xD6\xD0\xCE\xC4' for column ...

    MYSQL教程网5722019-11-25
  • Mysql详解MySQL中的分组查询与连接查询语句

    详解MySQL中的分组查询与连接查询语句

    这篇文章主要介绍了MySQL中的分组查询与连接查询语句,同时还介绍了一些统计函数的用法,需要的朋友可以参考下 ...

    GALAXY_ZMY5442020-06-03
  • MysqlMySQL数据库varchar的限制规则说明

    MySQL数据库varchar的限制规则说明

    本文我们主要介绍了MySQL数据库中varchar的限制规则,并以一个实际的例子对限制规则进行了说明,希望能够对您有所帮助。 ...

    mysql技术网4192019-11-23
  • MysqlMySQL 数据备份与还原的示例代码

    MySQL 数据备份与还原的示例代码

    这篇文章主要介绍了MySQL 数据备份与还原的相关知识,本文通过示例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下...

    逆心2972019-06-23
  • Mysql解决MySQl查询不区分大小写的方法讲解

    解决MySQl查询不区分大小写的方法讲解

    今天小编就为大家分享一篇关于解决MySQl查询不区分大小写的方法讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起...

    Veir_dev5592019-06-25