收到主从报警如下,错误内容
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的时候,出现以上问题!
转载于:https://blog.51cto.com/imysqldba/1389169