DBA同学报一个bug,线上一个DDL语句导致主从停止,问题简化描述如下。
描述:
简化的操作步骤如下:
Create table tb(c varchar(1000))engine=innodb;
Create table tc as select cast(c as signed integer) from tb;
Show create table tc;
CREATE TABLE `tc`
( `cast(c as signed integer)` bigint(1000) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=gbk
从上面的结果看出,tc表中的这个字段定义为bigint(1000)。这个操作在主库上没有问题,但是当binlog在从库上apply时,就会发现同步停止,errno 1439.
分析
其实我们发现,在Master中单独执行这个语句
CREATE TABLE `tc` (
`cast(c as signed integer)` bigint(1000) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=gbk,
是执行不了的, 原因就是MySQL中定义bigint和int的显示宽度不能超过255.但是这个限制是在解析时判断的。
而例子中的情况,tc这个表并没有明确表示bigint的显示宽度,只是在内部转换的时候,算出来这么长。而binlog记录的是这个算出来后的结果,导致从库直接执行这个语句时,就报错了。
简单解决
实际上显示宽度也确实没有必要用到1000这么多,所以MySQL做这个限制并无不妥。因此我们只需要在真正执行语句的时候(而不只是解析的时候)多做一个判断,当整型字段的显示宽度超过255时,统一设置为255即可。
这样从库上执行的语句中就是bigint(255)了,这个语句能够被正确执行。
当然这个错误信息我们提示在warning中。
patch 下载 (基于Percona 5.5.18)
注:此问题只在Row based的binlog 时存在,多谢 @Mr_Mablevi 提醒
分享到:
相关推荐
### MySQL主从同步原理、问题、解决方案与应用详解 #### 一、MySQL主从同步基本流程 MySQL的主从同步机制是一种数据复制技术,用于在多个数据库服务器间保持数据的一致性。它允许数据从主服务器(Master)自动复制...
MySQL主从同步过程中可能会遇到“延迟”问题,即从服务器未能及时跟上主服务器的更新速度,导致数据不一致。主要原因包括: 1. **主库更新多线程:** 主服务器可能同时执行多个写操作,而从服务器默认情况下只使用...
综上所述,通过理解MySQL主从同步的基本原理、识别潜在的问题,并采取相应的解决方案,可以有效提升系统的稳定性和性能。无论是采用多线程更新还是引入Transfer这样的工具,都能够显著改善主从同步的效率。
MySQL主从复制是一种常见的数据库高可用性和负载均衡技术,它允许数据从一个主数据库(Master)实时同步到一个或多个从数据库(Slave)。这个过程基于MySQL的二进制日志(Binary Log)和中继日志(Relay Log),使得...
介绍MySQL主从复制的安装配置, MIXED复制是混合使用ROW(行)和STATEMENT(语句)复制。对于DDl语句会以STATEMENT格式记录;对于TABLE里的行操作记录为ROW格式 如果使用INNODB表,事务级别使用了READ COMMITTED or...
MySQL主从复制是一种数据库高可用性和数据冗余的技术,它允许数据从一个服务器(主服务器)同步到一个或多个其他服务器(从服务器)。在Windows环境下,这个过程涉及到一系列的配置步骤,下面将详细介绍如何实现...
通过这种机制,可以从主服务器(Master)自动地将所有数据库操作(包括DDL和DML语句)复制到一个或多个从服务器(Slave)。这种方式不仅能够提高数据的可用性和容错性,还能有效地分散查询负载,提高系统的整体性能...
MySQL的主从复制是一种数据同步机制,通过将一个MySQL服务器(主服务器)的数据变更操作记录下来并传输到另一个或多个MySQL服务器(从服务器),使得从服务器上的数据与主服务器保持一致。这种方式主要用于实现数据...
在主从复制架构中,一个或多个MySQL服务器(从服务器)会从一个中心MySQL服务器(主服务器)那里复制数据变化。 #### 二、主从复制原理 MySQL支持单向、异步复制,具体过程如下: - **主服务器**:负责记录数据...
MySQL主从复制是一种数据库备份方案,通过该机制可以将一个MySQL服务器(主服务器)的数据变动同步到一个或多个MySQL服务器(从服务器)上。这不仅可以用于数据备份,还能用于读写分离,提高系统的读取性能和数据...
根据MySQL官方文档的描述,MySQL主从复制依赖于三个主要线程:在主服务器(master)上有一个线程(Binlog dump thread),在从服务器(slave)上则有两个线程(I/O thread和SQL thread)。这三个线程协同工作,确保...
MySQL复制是一种常用的数据同步机制,其核心在于将主数据库(Master)的DDL(数据定义语言)和DML(数据操纵语言)操作通过二进制日志(Binlog)传送到复制服务器(也称为从服务器/Slave),并在从服务器上重新执行...
总结,MySQL主从复制是一个涉及多个步骤和组件的复杂过程,它对于提升数据库系统的可靠性和性能至关重要。正确配置和维护主从复制能够为企业数据安全和业务连续性提供强大保障。在实际操作中,需要注意细节,如版本...
每个数据库可以有一个或多个表空间,而每个表空间可以包含一个或多个表。 - **视图**:视图是基于一个或多个表的结果集的虚拟表,它可以简化复杂查询,同时提高数据的安全性。 - **触发器**:触发器是一种特殊类型的...
在配置MySQL主从服务实现实例中,我们首先需要了解MySQL复制的基本概念。MySQL复制是一种数据同步机制,其中一个数据库服务器作为主服务器(Master),将数据变更操作记录到二进制日志(Binary Log)中。而一个或多...
MySQL 8.4.0 LTS 是 MySQL 社区服务器的一个长期支持版本,为开发者和企业提供了稳定、可靠的数据库服务。这个版本的发布旨在提供一系列增强的功能和改进,以提升性能、安全性和易用性。在“mysql-8.4.0.zip”压缩包...
MySQL Replication是MySQL数据库系统中的一个重要特性,它允许数据从一个主服务器(master)自动同步到一个或多个从服务器(slaves)。这种技术主要用于数据备份、负载均衡和高可用性设置,确保即使在主服务器出现...
该故障是指在MySQL主从复制架构中,从库出现延迟故障,导致查询操作延迟。该故障对数据的查询操作产生了不利的影响。 知识点1: MySQL主从复制架构 MySQL主从复制架构是一种常见的数据库架构,主库执行数据的写入...