概述

现今大部分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. 推荐并简要分析一个silverlight的相册DEMO--ImageSnipper(V2)
  2. 糗事百科的网络爬虫(v0.2)源码及解析 .
  3. 在linux中安装Qt4.8,在linux 如何安装qt 4.8.1
  4. 组策略之统一修改域中计算机的本地管理员账户和密码和受限制组
  5. 今天来谈一谈环境对我们的习惯有什么影响
  6. android控件触摸事件传递,Android事件传递处理
  7. 解决办法:debian中没有ifconfig命令
  8. 服装CAD计算机试衣的好处,浅议服装CAD三维试衣探究及创新.doc
  9. java 中文文件路径乱码 解决方法
  10. JS实现自动填写问卷【JS小工具】
  11. 如何实现Iframe透明
  12. Python案例1—人民币与美元的汇率兑换V_6.0
  13. 小计一次监听器的报错之--ORA-12170
  14. 90%的android开发者都会遇到的问题,当sjk_daemon遇见ADB server didn't ACK
  15. MarkdownPad2注册码——亲测有效
  16. 前端学习第八弹:制作一个精美书签
  17. 【Win10 UWP】微信SDK基本使用方法和基本原理
  18. 深度学习之选择GPU或CPU方法
  19. 计算机系统的组成一般不包括,计算机系统的基本组成,一般应包括哪些
  20. 基于MATLAB的图像压缩感知 算法的实现

热门文章

  1. shell脚本 空格
  2. Ubuntu 汉化及kate汉化和使用自带终端的解决方式
  3. 黑马程序员-Java基础,Java集合Collection和Iterator接口
  4. wzplayerEx for android(真正硬解接口,支持加密的 player)
  5. (DevExpress2011控件教程)ASPxGridView 范例3 :ASPxGridView 排序和分组、过滤行、统计功能等功能实现...
  6. 妙用javascript
  7. 20191127每日一句
  8. unity有用资源的导出未package便于在其他工程用的问题解决
  9. C++ 输入多行以空格分隔的数将其变为数组,动态申请二维数组
  10. Atitit vm os内存管理 目录 1. 冯诺依曼结构、哈佛结构、改进型哈佛结构 1 1.1. 冯·诺依曼结构 1 1.2. 哈佛结构 2 1.3. 改进型的哈佛结构与哈佛体系结构差别 3 2.