概述

现今大部分MySQL集群都是以主从复制为基础,如MHA、MGR、第三方中间件等,一旦主从复制出现异常,整体集群都会受到影响,主从复制出现异常分为两类:IO线程异常与SQL线程异常。

IO线程异常,常见有:

  • 复制用户或密码错误

  • 网络不稳定

  • 复制心跳时间大于slave_net_timeout参数,IO线程空闲被终断

SQL线程异常,常见有:

  • 复制点指定错误

  • 主键或唯一键冲突

  • 记录不存在

  • 表结构不一致

今天所讲案例便是SQL线程异常的最后一种情况:主从表结构不一致。

案例分析

查看异常

接到一生产主从复制异常告警,登陆数据库查看异常信息如下:

上述信息仅表示执行一事务失败,并不详细;因使用并行复制,查询以下表,了解更详细信息

错误信息表明,表中编号为3的字段不能进行类型转换。

查看表结构

上面的错误信息表明,很大可能是主从两边表结构不一致,登陆主从,查看两边该表表结构如下:

主库

从库

该表在主从两边共有4处不一致,复制报错信息中仅显示了一处:3号字段即“operate_method”字段。

分析

我们在做数据迁移的时候,如果碰到目标字段长度比源字段大且字符集相同,那迁移过程中就不会出现问题,但以Row格式为基础的MySQL主从复制却会出现意外。

在MySQL数据库中,表上字段的类型包括字段的数据类型、定义的数据类型长度两个因素。因此通常情况下,主从两边表结构必须保持一致,才能够保障主从复制的正常进行,进而保证主从数据的完全一致性。如果是上述情况仅字段类型不一致的话,MySQL会针对不同的binlog格式进行处理。

语句格式

如果事务SQL语句能够在从库正常执行,那主从复制就不会出现问题。

行格式

对于行格式而言,MySQL会针对不同的情况分别处理

  • 从库目标字段长度小于主库

MySQL采取有损数据类型转换,对数据进行类型内的截取操作。

  • 从库目标字段长度大于主库

MySQL采取无损数据类型转换,转换后数据不会丢失。

mix格式

上述两种情况的综合处理。

上述现象中从库存在目标字段长度大于、小于主库两种情况,主从复制即要进行无损数据类型转换,又要进行有损数据类型转换;而控制这一行为的是从的”slave_type_conversions”数据库参数,该参数默认情况下为空,即主从复制遇到这种情况不会进行任何操作。设置该参数为以下值,重启主从复制,主从复制恢复正常

该参数包括两个值,ALL_LOSSY有损转换、ALL_NON_LOSSY无损转换,对应上述两种目标字段长度情况。

异构表复制

在mysql数据库主从复制中,源表和目标表不必相同,源表可以具有比目标表更多或更少的列。此外,在一定条件下,源表与目标表的列可以拥有不同的数据类型。

在源表与目标表拥有不同定义的情况下,源表与目标表必须拥有相同的库名、表名,下面将讲述上面两种不同情况的操作要求。

源表、目标表拥有不同数量的列

在源表、目标表拥有不同数量列的情况下,保证主从复制正常进行,必须满足以下条件:

  • 共有的列在源表、目标表,必须拥有相同的定义顺序

  • 源表、目标表共有列必须在其它列前面定义

  • 源表、目标表额外的列必须定义默认值

  • 目标表列数多于源表时,共有列必须使用相同的数据类型

源表、目标表拥有不同数据类型的列

通常情况下,同一表在主库、从库上的列必须使用相同的数据类型,但是在符合某些条件下,这并不总是严格执行的,此时MySQL可以进行有损、无损数据类型转换,驱使主从复制顺利进行,但却不保证主从数据的完全一致性。

  • 来自源表列的数据类型在目标表上变为相同大小或更大的数据类型时,这称为属性上升,此时可以进行无损数据类型转换。

  • 来自源表列的数据类型在目标表上变为更小的数据类型时,这称为属性下降,此时可以进行有损数据类型转换。

MySQL支持以下不同但相似数据类型间的转换:

  • TINYINT, SMALLINT, MEDIUMINT, INT, and BIGINT间的整数类型转换

  • DECIMAL, FLOAT, DOUBLE, and NUMERIC间的类型转换

  • CHAR, VARCHAR, and TEXT间的类型转换

  • BINARY, VARBINARY, and BLOB间的类型转换

  • BIT间的类型转换

不允许上述以外的类型转换,当向小类型转换时,数据被截断后复制至从库,此时主从数据就产生了不一致。

总结

MySQL主从复制相对比较灵活,即可以单表复制,又可以部分表复制,更可以进行异构表复制,但对于已生产的主从复制,必须保证主从两边的数据结构一致性,从而保证主从两边的数据一致性;对于数据迁移或数据割接的场景,依据MySQL异构表复制规则进行操作,便可以正常的进行数据复制。

mysql 主从_mysql主从复制异常中断分析处理相关推荐

  1. hibernate mysql 主从_MYSQL主从复制和写分离

    基础篇https://edu.51cto.com/course/19845.html https://edu.51cto.com/course/19845.html https://edu.51cto ...

  2. mysql replicate-rewrite-db,mysql主从,_mysql 主从复制 replicate-rewrite-db 无效,mysql主从 - phpStudy...

    mysql 主从复制 replicate-rewrite-db 无效 主库配置: log-bin=mysql-bin server-id = 66 从库配置: server-id = 67 repli ...

  3. MYSQL主从不同步延迟原理分析及解决方案

    MYSQL主从不同步延迟原理分析及解决方案 参考文章: (1)MYSQL主从不同步延迟原理分析及解决方案 (2)https://www.cnblogs.com/shishanyu/p/7977835. ...

  4. 运维派 企业面试题1 监控MySQL主从同步是否异常

    Linux运维必会的实战编程笔试题(19题) 企业面试题1:(生产实战案例):监控MySQL主从同步是否异常,如果异常,则发送短信或者邮件给管理员.提示:如果没主从同步环境,可以用下面文本放到文件里读 ...

  5. percona mysql 主从_mysql之percona-toolkit安装与主从复制

    percona-toolkit是一组高级命令行工具的集合,用来执行各种通过手工执行非常复杂和麻烦的mysql和系统任务,这些任务包括: 1).检查master和slave数据的一致性 2).有效地对记 ...

  6. 动力节点老杜mysql文件_mysql主从复制+mysql主从复制延迟解决方案

    ### 1. 为什么需要mysql主从复制 1. 数据热备 在复杂的业务场景中, 可能因为某一条sql造成了锁表, 这样就会影响正常的业务运行.在复杂的业务场景中, 我们可以使用mysql主从复制, ...

  7. 1主5从mysql数据库_MySQL主从复制虽好,能完美解决数据库单点问题吗?

    一.单个数据库服务器的缺点 数据库服务器存在单点问题: 数据库服务器资源无法满足增长的读写请求: 高峰时数据库连接数经常超过上限. 二.如何解决单点问题 增加额外的数据库服务器,组建数据库集群: 同一 ...

  8. mysql主从_MySQL主从原理及配置详解

    MySQL主从配置及原理,供大家参考,具体内容如下 一.环境选择: 1.Centos 6.5 2.MySQL 5.7 二.什么是MySQL主从复制 MySQL主从复制是其最重要的功能之一.主从复制是指 ...

  9. 高可用Mysql架构_Mysql主从复制、Mysql双主热备、Mysql双主双从、Mysql读写分离(Mycat中间件)、Mysql分库分表架构(Mycat中间件)的演变...

    [Mysql主从复制] 解决的问题 数据分布:比如一共150台机器,分别往电信.网通.移动各放50台,这样无论在哪个网络访问都很快.其次按照地域,比如国内国外,北方南方,这样地域性访问解决了. 负载均 ...

  10. mysql异常处理_MySQL定义异常和异常处理方法

    在MySQL中,特定异常需要特定处理.这些异常可以联系到错误,以及子程序中的一般流程控制.定义异常是事先定义程序执行过程中遇到的问题,异常处理定义了在遇到问题时对应当采取的处理方式,并且保证存储过程或 ...

最新文章

  1. 告别“臃肿”,选择微服务(文末福利)
  2. cvid matlab,WAKE-WIN10-SOFT-软件-Matlab配置及工具箱
  3. 【Python基础】Python 炫技操作:五种 Python 转义表示法
  4. wxWidgets:wxFocusEvent类用法
  5. MVC架构中的Repository模式 个人理解
  6. python调用oracle过程 权限不足_Python连接Oracle的一些坑以及出现原因和解决方法...
  7. docker下centos7 systemctl启动报错 docker Failed to get D-Bus connection 报错
  8. linux awk 时间范围,如何用awk从日志文件中找到时间范围的记录
  9. spring cloud微服务分布式云架构-Gateway入门 1
  10. ORACLE 视图的 with check option
  11. 未来公务员都会是数据分析高手了,你还要当个只会Excel的小白吗?
  12. C# 回调函数的实现和应用场景
  13. 【深度学习】《动手学深度学习》环境配置
  14. rtl8139 群晖_黑群辉里的虚拟机安装XP系统,没有网卡怎么传入文件?
  15. 如何备份android10,安卓手机系统怎么备份
  16. 网站采集器-免费任意网页数据采集器
  17. 国内智能硬件和物联网行业研发人员的城市分布图
  18. 超酷的HTML5 Canvas网络画板教程
  19. 纵观计算机简史ppt,纵观计算机简史初中信息技术新课本中国地图出社..ppt
  20. 基于飞桨实现高精度岩相自动分析,助力油气田勘探开发设计

热门文章

  1. JavaScript备忘录
  2. 报表软件FineReport如何连接SAP HANA
  3. linux以命令行下配置连接wlan无线网卡
  4. Android 3.2 联机测试adb驱动如何安装和配置?
  5. SQL Server 2005高可用性之镜像功能
  6. ORA-12638 凭证检索失败
  7. Python动态页面抓取超级指南
  8. c语言 冒泡排序算法
  9. 2020-11-30 OpenCV人工智能图像处理学习笔记 第3章 计算机视觉加强之几何变换 warpAffine
  10. jupyter notebook 中文乱码问题解决