FAQ系列 | 列类型被自动修改导致复制失败

简介: FAQ系列 | 列类型被自动修改导致复制失败

0、导读

在复制环境中,有个表的列类型总是被修改,导致复制进程报错停止

1、问题描述

问题发生在朋友的数据库上,做了主从复制,其中某表有一列类型是INT,但是该表上的INSERT事件在BINLOG中却总被记录为MEDIUMINT类型,导致这个事件在SLAVE上执行失败。

相关现场信息见下:

MySQL版本:官方5.5.版本。

表DDL定义:

CREATE TABLE `t` (

 `userid` int(10) unsigned NOT NULL DEFAULT 0,


这个表上的INSERT事件在BINLOG中的记录:

### INSERT INTO `imysql`.`t`

### SET

###   @1=207 /* MEDIUMINT meta=0 nullable=0 is_null=0 */


我们看到BINLOG中,这个列类型显示为MEDIUMINT,这个事件在SLAVE上就会报告下面的错误,导致SLAVE无法继续复制:

Column 0 of table 'imysql.t' cannot be converted from type 'mediumint' to type 'int(10) unsigned

又是一个看起来很奇葩的案例。

2、原因分析

经过沟通排查,了解到他们的业务模式有点特殊,是从一个旧的空表中复制表结构生成每天日志表,然后再将当天的日志写入该表。也就是大概做法是:

1、创建每天日志表

CREATE TABLE t SELECT t_orig;


2、写入日志

INSERT INTO t SELECT * FROM t_orig;


其实问题就出在每天创建新表的过程中,源表结构像是这样的:

CREATE TABLE `t_orig` (

 `userid` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,


从源表复制到新表之后,又执行了ALTER TABLE,把 userid 列类型从 MEDIUMINT 改为 INT,创建存储过程等其他工作。

生成新表后,再写入生成的日志。但是呢,写入日志却又是采用INSERT...SELECT的用法。一般情况下当然没问题,但这个例子中,源表、目标表的 userid 列类型恰好不一样(源是MEDIUMINT,目标是INT),结果导致在 binglog 中记录event时,将 userid 列类型强制转换为 MEDIUMINT 了。这个 INSERT 在 MASTER 端可以正常执行完毕,但却引发了 SLAVE 检测到二者数据类型不一致,写入失败,复制异常中断。

3、问题建议

遇到这种案例也真的是醉了,从源表每天克隆一个新表做法没问题,采用INSERT...SELECT也没问题,但为啥要源表和新表使用不同数据类型呢,直接把源表的也改成INT不就行了吗,只能说某些人懒得不像样了。

4、类似案例

FAQ系列 | 写新数据时某列值总是被自动修改

相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
相关文章
|
运维 负载均衡 监控
OceanBase数据库认证专家OBCP发布啦!首发期报名培训和认证考试特大优惠!
OBCP 首发期在官网申购考试券并参加考试,享受 5 折优惠!
OceanBase数据库认证专家OBCP发布啦!首发期报名培训和认证考试特大优惠!
|
API 对象存储 Java
实现从oss(阿里云)服务器以附件形式下载文件(含批量下载)
实现从oss(阿里云)服务器以附件形式下载文件(含批量下载) 笔者在项目中写一个从阿里云服务器上面以附件形式下载文件的接口时,遇到了问题,网上搜索无任何相关的解决方案,最后通过通过自己查阅API文档,再结合自己的经验,实现了下载功能。
7099 0
|
机器学习/深度学习 人工智能 自然语言处理
360Zhinao2-7B:360推出自研360智脑大模型的升级版
360Zhinao2-7B是360自研的AI大模型360智脑7B参数升级版,涵盖基础模型及多种上下文长度的聊天模型。该模型在语言理解与生成、聊天能力、数学逻辑推理等方面表现出色,支持多语言和多上下文长度,适用于多种商业应用场景。
497 23
360Zhinao2-7B:360推出自研360智脑大模型的升级版
|
NoSQL 测试技术 PHP
新手从事直播软件源码开发搭建经验与技巧
新手技术从事直播软件源码开发,从需求调研、技术架构、功能逻辑、技术语言、压力测试等全面剖析。
|
存储 域名解析 安全
如何快速建设一个网站?
本文介绍了如何快速创建一个网站,首先需要确定网站的核心内容和建站目的,然后需要选择合适的服务器和搭建网站的工具,最后可以使用成熟的CMS网站管理系统来快速创建网站。
682 3
|
机器学习/深度学习 数据采集 DataWorks
DataWorks使用感受
DataWorks是功能全面的数据处理平台,涵盖数据清洗、特征工程、数据可视化等,性能优越,适合大规模数据处理。其界面简洁,便于任务开发与管理。但产品开通流程繁琐,价格体系不透明,部分高级功能文档不足,新版Notebook版本管理和Copilot智能助手有待优化。总体而言,DataWorks表现优秀,期待未来改进。
|
机器学习/深度学习 人工智能 算法
【AI系统】LLVM 后端代码生成
本文介绍 LLVM 后端的代码生成过程,包括将优化后的 LLVM IR 转换为目标代码的关键步骤,如指令选择、寄存器分配、指令调度等,以及后端如何支持不同硬件平台的代码生成。
203 6
|
人工智能 开发者
中国CRM市场竞争格局分析:谁能与Salesforce比肩?
在全球CRM市场,Salesforce始终占据领导地位,但中国本土CRM厂商正迅速崛起。销售易在技术创新和产品深度上接近Salesforce,纷享销客聚焦中小企业市场,明源云在房地产行业表现出色。尽管与Salesforce存在技术架构、产品功能和生态系统等方面的差距,但本土厂商在本地化和响应速度上具备优势,未来有望在特定领域逐步缩小差距。
|
Kubernetes Cloud Native 持续交付
云原生架构下的微服务设计原则与最佳实践##
在数字化转型的浪潮中,云原生技术以其高效、灵活和可扩展的特性成为企业IT架构转型的首选。本文深入探讨了云原生架构的核心理念,聚焦于微服务设计的关键原则与实施策略,旨在为开发者提供一套系统性的方法论,以应对复杂多变的业务需求和技术挑战。通过分析真实案例,揭示了如何有效利用容器化、持续集成/持续部署(CI/CD)、服务网格等关键技术,构建高性能、易维护的云原生应用。文章还强调了文化与组织变革在云原生转型过程中的重要性,为企业顺利过渡到云原生时代提供了宝贵的见解。 ##
|
存储 前端开发 Java
谷粒商城笔记+踩坑(19)——订单模块构建、登录拦截器
首先搭建页面环境,然后介绍整合Spring Session的相关内容,并将用户信息放到session里,多线程优化,完成订单模块的功能、登录拦截等功能的实现
谷粒商城笔记+踩坑(19)——订单模块构建、登录拦截器