热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

MYSQL主从备份相关(别人的经验之谈)

一、binlog的三种格式对比【statement】由于statement格式下,记录到binlog里的是语句原文,因此可能会出现这样一种情况:插入的自增主键id,在数据不同步

一、binlog 的三种格式对比
【statement】

  由于 statement 格式下,记录到 binlog 里的是语句原文,因此可能会出现这样一种情况:插入的自增主键 id,在数据不同步时使用相同语句,会导致插入的数据不一致。因此,MySQL 认为这样写是有风险的。

【row】

  当 binlog_format 使用 row 格式的时候,binlog 里面记录了真实删除行的主键 id,这样 binlog 传到备库去的时候,就肯定会删除 id=4 的行,不会有主备删除不同行的问题。

【mixed】

  因为有些 statement 格式的 binlog 可能会导致主备不一致,所以要使用 row 格式。

  但 row 格式的缺点是,很占空间。比如用 delete 语句删掉 10 万行数据,用 statement 的话就是一个 SQL 语句被记录到 binlog 中,占用几十个字节的空间。但如果用 row 格式的 binlog,就要把这 10 万条记录都写到 binlog 中。这样做,不仅会占用更大的空间,同时写 binlog 也要耗费 IO 资源,影响执行速度。

  所以,MySQL 就取了个折中方案,也就是有了 mixed 格式的 binlog。mixed 格式的意思是,MySQL 自己会判断这条 SQL 语句是否可能引起主备不一致,如果有可能,就用 row 格式,否则就用 statement 格式。

现在越来越多的场景要求把 MySQL 的 binlog 格式设置成 row。这么做的理由有很多,举一个可以直接看出来的好处:恢复数据。

 

二、解决双M结构的循环复制问题:

建议把参数 log_slave_updates 设置为 on,表示备库执行 relay log 后生成 binlog。

规定两个库的 server id 必须不同,每个库在收到从自己的主库发过来的日志后,先判断 server id,如果跟自己的相同,表示这个日志是自己生成的,就直接丢弃这个日志。

三、主备延迟

1、主备延迟的来源

第一种:备库所在机器的性能要比主库所在的机器性能差。——对称部署

第二种常见的可能:备库的压力大。

一主多从。除了备库外,可以多接几个从库,让这些从库来分担读的压力。

通过 binlog 输出到外部系统,比如 Hadoop 这类系统,让外部系统提供统计类查询的能力。

第三种可能:大事务。

控制每个事务删除的数据量,分成多次删除。

第四种:备库的并行复制能力。

 

2、备份策略:【可靠性优先策略】

在图双 M 结构下,从状态 1 到状态 2 切换的详细过程是这样的:



  1. 判断备库 B 现在的 seconds_behind_master,如果小于某个值(比如 5 秒)继续下一步,否则持续重试这一步;

  2. 把主库 A 改成只读状态,即把 readonly 设置为 true;

  3. 判断备库 B 的 seconds_behind_master 的值,直到这个值变成 0 为止;

  4. 把备库 B 改成可读写状态,也就是把 readonly 设置为 false;

  5. 把业务请求切到备库 B。

  切换期间存在:系统的不可用时间。如果系统的不可用时间太长,对业务太说是不可接受的。

所以有了【可用性优先策略】

  不等主备数据同步,直接把连接切到备库 B,并且让备库 B 可以读写。代价是可能出现数据不一致的情况。

  同步时,binlog_format使用 row 格式的 binlog 时,数据不一致的问题更容易被发现。而使用 mixed 或者 statement 格式的 binlog 时,数据很可能悄悄地就不一致了。如果过了很久才发现数据不一致的问题,很可能这时的数据不一致已经不可查,或者连带造成了更多的数据逻辑不一致。

 

【可用性优先策略】会导致数据不一致,所以建议使用【可靠性优先策略】,对数据服务来说的话,数据的可靠性一般还是要优于可用性的。

 

 

 

参考资料:

https://blog.csdn.net/weixin_41605937/article/details/122262362  MYSQL——数据库主从备份原理

 



推荐阅读
  • Spring Cloud Config 使用 Vault 作为配置存储
    本文探讨了如何在Spring Cloud Config中集成HashiCorp Vault作为配置存储解决方案,基于Spring Cloud Hoxton.RELEASE及Spring Boot 2.2.1.RELEASE版本。文章还提供了详细的配置示例和实践建议。 ... [详细]
  • 前言无论是对于刚入行工作还是已经工作几年的java开发者来说,面试求职始终是你需要直面的一件事情。首先梳理自己的知识体系,针对性准备,会有事半功倍的效果。我们往往会把重点放在技术上 ... [详细]
  • 本文将详细介绍如何在ThinkPHP6框架中实现多数据库的部署,包括读写分离的策略,以及如何通过负载均衡和MySQL同步技术优化数据库性能。 ... [详细]
  • python开发mysql:单表查询&多表查询
    一单表查询,以下是表内容二多表查询,一下是表内容三总结&表创建过程单 ... [详细]
  • 深入解析MySQL查询优化:特定类型查询的高级策略
    本文详细探讨了MySQL中特定类型查询的优化方法,包括COUNT()查询、关联查询、LIMIT分页及UNION查询的优化技巧,旨在提高数据库查询效率。 ... [详细]
  • 掌握Spring MVC中自定义类型转换与格式化的技巧
    近期,在开发一款小程序的过程中遇到了几个Spring MVC接口需要传递时间参数的问题。本文将详细介绍如何利用Java 8 Time API在Spring MVC中实现时间参数的自定义类型转换和格式化。 ... [详细]
  • MySQL 进阶:避免误用 update 影响行数进行业务逻辑判断
    在日常的业务开发中,使用 SQL 的 update 语句来更新数据是一项常见的操作。然而,直接依赖于 update 语句返回的影响行数来进行业务逻辑判断可能会遇到一些意想不到的问题。本文将深入探讨这一问题,并提供解决方案。 ... [详细]
  • MySQL性能测试标准倡议:老叶提出的压测基准
    进行MySQL的压力测试通常是为了评估新旧版本之间的性能差异、验证硬件升级的效果、测试参数调整的影响以及评估新业务的负载承受能力。老叶提出了一个MySQL压力测试基准值倡议,旨在促进行业内的标准化和成果共享。 ... [详细]
  • APM(Application Performance Management,应用性能管理)对于提供互联网服务的企业至关重要。本文将深入探讨APM如何帮助识别和解决导致用户流失的技术问题,以及它在提升整体用户体验方面的作用。 ... [详细]
  • 迎接云数据库新时代:程序员如何应对变革?
    在数据无处不在的时代,数据库成为了管理和处理数据的核心工具。从早期的信息记录方式到现代的云数据库,数据库技术经历了巨大的变革。本文将探讨云数据库的特点及其对程序员的影响。 ... [详细]
  • 本文将指导如何在JFinal框架中快速搭建一个简易的登录系统,包括环境配置、数据库设计、项目结构规划及核心代码实现等环节。 ... [详细]
  • 本文介绍了Java语言开发的远程教学系统,包括源代码、MySQL数据库配置以及相关文档,适用于计算机专业的毕业设计。系统支持远程调试,采用B/S架构,适合现代教育需求。 ... [详细]
  • MySQL学习指南:从基础到高级
    本文档提供了MySQL的全面学习指南,涵盖从数据库的基本概念到高级特性的详细解析,包括SQL基础命令、数据完整性约束、查询技术、内置函数、存储过程、视图管理、事务处理和索引优化等内容。 ... [详细]
  • 全能终端工具推荐:高效、免费、易用
    介绍一款备受好评的全能型终端工具——MobaXterm,它不仅功能强大,而且完全免费,适合各类用户使用。 ... [详细]
  • 本文将详细探讨 Linux 系统中的 netstat 命令,该命令用于查看网络状态和连接情况。通过了解 IP 地址和端口的基本概念,我们将更好地理解如何利用 netstat 命令来监控和管理网络服务。 ... [详细]
author-avatar
聂依依mma
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有