您的位置:首页 > 其它

Table definition on master and slave does not match(坑爹的编码)

2014-04-02 16:04 260 查看
收到主从报警如下,错误内容
Table definition on master and slave does not match: Column 1 size mismatch - master has size 33, banggood_work.customer_points_table on slave has size 11. Master's column size should be <= the slave's column size.
这是由于主从复制表结构不一致所致!
但是找到对应的表,发现表结构完全一致!重启了主从复制进程,问题仍旧。
仔细看了一下表结构,发现从机的表编码为latin1,而主机编码为utf8,而主机binlog_format=row.
将从机的表以及字段编码更改为utf8后,重启主从复制进程,问题解决!
其实还可以通过设置一下参数解决,但是可能会丢失数据
slave_type_conversions
这个参数在mysql5.5.3 引入,目的是启用row 格式的bin-log 的时候,
如果主从的column 的数据类型不一致,会导致复制失败,mysql5.5.3 之后支持,主库是int 从库是bigint 这种类型的复制,
这个参数的意义就是控制些类型转换容错性。
如果从库的类型比主库类型大,那么复制没有问题的。
如果从库类型比主库类型小,比如从int 复制到tinyint 这个参数就会起作用。
几种值的设置:
ALL_LOSSY: 允许数据截断
ALL_NON_LOSSY: 不允许数据截断,如果从库类型大于主库类型,是可以复制的,翻过了,就不行了,从库***制错误,复制终止。
ALL_LOSSY,ALL_NON_LOSSY: 所有允许的转换都会执行,而不管是不是数据丢失。
空值 (不设置) : 要求主从库的数据类型必须严格一致,否则都报错。


注意事项:
1. 导致这个问题的根本原因是从机的默认编码为Latin1,主从配置不统一
2. 在建表的时候,最好是带上编码;如果没有带上编码,则从机会使用默认编码,一旦主从配置不一样,将会在有字符串的字段上,而且binlog_format=row的时候,出现以上问题!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息