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主从复制的安装配置, MIXED复制是混合使用ROW(行)和STATEMENT(语句)复制。对于DDl语句会以STATEMENT格式记录;对于TABLE里的行操作记录为ROW格式 如果使用INNODB表,事务级别使用了READ COMMITTED or...
在异步或半同步的复制结构中,从库出现延迟是一件十分正常的事。 虽出现延迟正常,但是否需要关注,则一般是由业务来评估。 如:从库上有需要较高一致性的读业务,并且要求延迟小于某个值,那么则需要关注。 简单...
MySQL主从复制的延时一直是业界困扰已久的问题。延时的出现会降低主从读写分离的价值,不利于数据实时性较高的业务使用MySQL。 UDB是UCloud推出的云数据库服务,上线已达六年,运营了数以万计的UDB MySQL实例。除了...
一、什么是主从复制 将主数据库中的DDL和DML操作通过二进制日志(BINLOG)传输到从数据库上,然后将这些日志重新执行(重做);...第二步:salve开启一个I/O Thread,该线程在master打开一个普通连接,主要工作
1. MySQL数据库主从同步延迟原理。...DML和DDL的IO操作是随即的,不是顺序的,成本高很多,还可能可slave上的其他查询产生lock争用,由于Slave_SQL_Running也是单线程的,所以一个DDL卡主了,需要执行10分钟,那么
4.8 mysql5.5.19/20同步一个bug 124 4.9 恢复slave从机上的某几张表的简要方法 126 4.10 如何干净地清除slave同步信息 127 第5章 性能调优 129 5.1 表设计 129 5.2 字段类型的选取 133 5.2.1 数值类型 134 ...
复制过程中一个服务器充当主服务器(master),而一个或多个其它服务器充当从服务器(slaves)。主服务器将更新重新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环。这些日志可以记录发送到从服务器的更新...
mysql整理资料上传,包含了DDL(数据库定义语言)、DML(数据库操纵语言)的增删改查,还有DCL(数据库控制语句)以及事务隔离级别、数据库主从的原理和配置,以及一些sql调优的信息等等
MySQL可以从一台主库同时向多台从库进行复制,从库同时也可以作为其他从库的主库,实现链式复制。 MySQL复制的优点: 主库故障,可以快速切换至从库提供服务; 在从库执行查询操作,降低主库的访问压力; 在从库...
在日常工作或者学习中,操作数据库时候难免会因为“大意”而误操作,需要快速恢复的话通过备份来恢复是不太可能的,下面这篇文章主要给大家介绍关于Mysql误操作后利用binlog2sql快速回滚的方法,话不多说,来一起看...
MySQL的二进制日志binlog可以说是MySQL最重要的日志,它记录了所有的DDL和DML语句(除了数据查询语句select),以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二进制日志是事务安全型的。 ————————...
实际⼯作中,模式就等同于程序员创建⼀个具体的数据库的全部操作, 如:这是⼀个MySQL数据库,有2张表,每个表的名字,属性的名字、类型、取值范围,主键,外键,索引,其他完整性约束等等。 DBMS提供模式描述语⾔...
熟悉 MySQL 日常 DML\DDL\DQL 操作 能够使用 POI 进行报表的导入和导出 熟悉 Linux 常用命令,熟练搭建 Windows、Linux、mac 系统下的服务部署,并实现软件的上架部署 熟悉 SVN、Git、Maven 等项目管理和项目构建...
Percona Toolkit简称pt工具—PT-Tools,是Percona公司开发用于管理MySQL的工具,功能包括检查主从复制的数据一致性、检查重复索引、定位IO占用高的表文件、在线DDL等。