设为首页 加入收藏

TOP

MySQL从库列类型不一致导致复制异常问题解决
2017-04-07 10:23:47 】 浏览:7492
Tags:MySQL 从库列 类型 一致 导致 复制 异常 问题 解决

MySQL从库列类型不一致导致复制异常问题


slave_type_conversions  这个参数在mysql5.5.3 引入,目的是启用row 格式的bin-log 的时候,如果主从的column 的数据类型不一致,会导致复制失败,mysql5.5.3 之后支持,主库是int 从库是bigint 这种类型的复制,


这个参数的意义就是控制些类型转换容错性。


如果从库的字段类型范围比主库类型大,那么设置slave_type_conversions=ALL_NON_LOSSY后复制没有问题的。


如果从库类型比主库类型小,比如从int 复制到tinyint ,虽然可以通过设置slave_type_conversions=ALL_LOSSY,ALL_NON_LOSSY让主从不出问题,但是实际上会造成数据丢失的风险。


几种值的设置:


    ALL_LOSSY允许数据截断


    ALL_NON_LOSSY不允许数据截断,如果从库类型大于主库类型,是可以复制的,反过了,就不行了,从库报复制错误,复制终止。


    ALL_LOSSY,ALL_NON_LOSSY: 所有允许的转换都会执行,而不管是不是数据丢失。


    空值(不设置)要求主从库的数据类型必须严格一致,否则都报错。


生产环境一个案例:


但是没几天后,发现主从复制报错了,错误码1677。从库上记录的错误日志如下:


我们看下主库的mode字段是varchar(50),从库的mode字段是varchar(200)


在从库设置:


stop slave;


set global slave_type_conversions=ALL_NON_LOSSY; 


# 默认slave_type_conversions为空,表示强制从库和主库的字段类型一致,不然就停止复制。设置为ALL_NON_LOSSY就稍微宽泛些同时确保不会造成类型转换的问题。


start slave;


show slave status\G  


这样即可解决这个问题。


官方文档:https://dev.mysql.com/doc/refman/5.6/en/replication-features-differing-tables.html


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇MySQL视图的基本操作 下一篇MySQL中的存储过程和函数

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目