• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >Mysql > 一个DDL导致MySQL主从停止问题及解决

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

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2018-12-05

匿名通过本文主要向大家介绍了一个,DDL,导致,MySQL,主从,停止,问题,解决,DB等相关知识,希望本文的分享对您有所帮助

DBA同学报一个bug,线上一个DDL语句导致主从停止,问题简化描述如下。 描述: 简化的操作步骤如下: 1.Create table tb(c varchar(1000))engine=innodb; 2. 3.Create table tc as select cast(c as signed integer) from tb; 4. 5.Show create table tc; 6. 7

DBA同学报一个bug,线上一个DDL语句导致主从停止,问题简化描述如下。

描述:

简化的操作步骤如下:

1.Create table tb(c varchar(1000))engine=innodb;
2.
3.Create table tc as select cast(c as signed integer) from tb; 4.
5.Show create table tc; 6.
7.CREATE TABLE `tc` 8.( `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中
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • MYSQL不能从远程连接的一个解决方法(s not allowed to connect to this MySQL server)
  • mysql 一个较特殊的问题:You can't specify target table 'wms_cabinet_form'
  • php中反射如何获取一个类中的方法详解
  • MySQL的tar包移动和解压及创建一个mysql的用户
  • mysql 从一个表中查数据并插入另一个表实现方法
  • 怎么样使用phpMyadmin创建一个Mysql数据库
  • 一个oracle指令的好网站
  • 从一个MySQL的例子来学习查询语句
  • Access一个宏的实例检验口令
  • ACCESS数据的优化和安全

相关文章

  • 2017-05-11MySQL数据库十大优化技巧
  • 2018-12-05SQL截取字符串函数分享
  • 2018-12-05Linux系统下MYSQL源码安装的性能考虑
  • 2018-12-05SQL 2005使用专用管理员连接(DAC)的技巧及修改系统表的方法
  • 2018-12-05重装MS SQL Server 2000前必须彻底删除原安装文件的方法
  • 2017-05-11多次执行mysql_fetch_array()的指针归位问题探讨
  • 2018-12-05Effective MySQL之SQL语句最优化--索引
  • 2018-12-05MySQL之—数据库增量数据恢复的图文代码案例
  • 2018-12-05MySQL 清除表空间碎片的实例详解
  • 2018-12-05MySQL数据库优化(一)—MySQL引擎

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • 内连接、左外连接、右外连接、交叉连接它们的区别是什么
    • Mysql中关于修改root密码以及安装与配置调优的方法介绍
    • 简单解析MySQL中的cardinality异常
    • linux下mysql自动备份数据库与自动删除临时文件
    • Table ‘xxx’ is marked as crashed and should be repaired 错误解决方法参考
    • 中文Access2000速成教程--1.2 使用“数据库向导”创建表
    • oracle使用sql脚本生成csv文件案例学习
    • MySQL中随机生成固定长度字符串的方法
    • 关于查询异常的相关文章汇总
    • MySQL 加锁处理分析

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有