`
丁林.tb
  • 浏览: 789953 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

一个DDL导致MySQL主从停止问题及解决

阅读更多

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中定义bigintint的显示宽度不能超过255.但是这个限制是在解析时判断的。

         而例子中的情况,tc这个表并没有明确表示bigint的显示宽度,只是在内部转换的时候,算出来这么长。而binlog记录的是这个算出来后的结果,导致从库直接执行这个语句时,就报错了。

 

简单解决

         实际上显示宽度也确实没有必要用到1000这么多,所以MySQL做这个限制并无不妥。因此我们只需要在真正执行语句的时候(而不只是解析的时候)多做一个判断,当整型字段的显示宽度超过255时,统一设置为255即可。

         这样从库上执行的语句中就是bigint(255)了,这个语句能够被正确执行。

         当然这个错误信息我们提示在warning中。

 

patch 下载 (基于Percona 5.5.18)

 

注:此问题只在Row based的binlog 时存在,多谢 @Mr_Mablevi 提醒

0
0
分享到:
评论
1 楼 nofreezou 2012-09-18  
5.1.54 木有这个bug

相关推荐

    安装MySQL主从复制

    介绍MySQL主从复制的安装配置, MIXED复制是混合使用ROW(行)和STATEMENT(语句)复制。对于DDl语句会以STATEMENT格式记录;对于TABLE里的行操作记录为ROW格式 如果使用INNODB表,事务级别使用了READ COMMITTED or...

    MySQL主从复制延迟原因以及解决方案

    在异步或半同步的复制结构中,从库出现延迟是一件十分正常的事。 虽出现延迟正常,但是否需要关注,则一般是由业务来评估。 如:从库上有需要较高一致性的读业务,并且要求延迟小于某个值,那么则需要关注。 简单...

    MySQL数据库主从复制延时超长的解决方法

    MySQL主从复制的延时一直是业界困扰已久的问题。延时的出现会降低主从读写分离的价值,不利于数据实时性较高的业务使用MySQL。 UDB是UCloud推出的云数据库服务,上线已达六年,运营了数以万计的UDB MySQL实例。除了...

    详解MySQL实现主从复制过程

    一、什么是主从复制 将主数据库中的DDL和DML操作通过二进制日志(BINLOG)传输到从数据库上,然后将这些日志重新执行(重做);...第二步:salve开启一个I/O Thread,该线程在master打开一个普通连接,主要工作

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

    1. MySQL数据库主从同步延迟原理。...DML和DDL的IO操作是随即的,不是顺序的,成本高很多,还可能可slave上的其他查询产生lock争用,由于Slave_SQL_Running也是单线程的,所以一个DDL卡主了,需要执行10分钟,那么

    MySQL管理之道 性能调优、高可用与监控.part2.rar

    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 ...

    Mysql中复制详细解析

    复制过程中一个服务器充当主服务器(master),而一个或多个其它服务器充当从服务器(slaves)。主服务器将更新重新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环。这些日志可以记录发送到从服务器的更新...

    mysql数据库学习总结

    mysql整理资料上传,包含了DDL(数据库定义语言)、DML(数据库操纵语言)的增删改查,还有DCL(数据库控制语句)以及事务隔离级别、数据库主从的原理和配置,以及一些sql调优的信息等等

    MySQL复制优点、原理详解

    MySQL可以从一台主库同时向多台从库进行复制,从库同时也可以作为其他从库的主库,实现链式复制。 MySQL复制的优点: 主库故障,可以快速切换至从库提供服务; 在从库执行查询操作,降低主库的访问压力; 在从库...

    Mysql误操作后利用binlog2sql快速回滚的方法详解

    在日常工作或者学习中,操作数据库时候难免会因为“大意”而误操作,需要快速恢复的话通过备份来恢复是不太可能的,下面这篇文章主要给大家介绍关于Mysql误操作后利用binlog2sql快速回滚的方法,话不多说,来一起看...

    解说mysql之binlog日志以及利用binlog日志恢复数据的方法

    MySQL的二进制日志binlog可以说是MySQL最重要的日志,它记录了所有的DDL和DML语句(除了数据查询语句select),以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二进制日志是事务安全型的。 ————————...

    三级模式两级映像数据库系统结构.pdf

    实际⼯作中,模式就等同于程序员创建⼀个具体的数据库的全部操作, 如:这是⼀个MySQL数据库,有2张表,每个表的名字,属性的名字、类型、取值范围,主键,外键,索引,其他完整性约束等等。 DBMS提供模式描述语⾔...

    JavaEE求职简历-姓名-JAVA开发工程师.docx

    熟悉 MySQL 日常 DML\DDL\DQL 操作 能够使用 POI 进行报表的导入和导出 熟悉 Linux 常用命令,熟练搭建 Windows、Linux、mac 系统下的服务部署,并实现软件的上架部署 熟悉 SVN、Git、Maven 等项目管理和项目构建...

    percona-toolkit-3.3.0_x86_64.zip

    Percona Toolkit简称pt工具—PT-Tools,是Percona公司开发用于管理MySQL的工具,功能包括检查主从复制的数据一致性、检查重复索引、定位IO占用高的表文件、在线DDL等。

Global site tag (gtag.js) - Google Analytics