背景从库报错:
遇到这个错误比较奇怪,按错误的字面意思大概说是字段类型的转换出了错。明胆是两台数据库,一样的表结构,怎么会出现类型转换问题呢。
连设置slave-skip-errors=1677都不能跳过这个错误:
原因:
GOOGLE搜索了好久也说是mysql5.7版本以前存在这个BUG,建议升级mysql版本。
我试着去分析了一下错误原因,发现是因为之前在服务器上加了新字段引起的问题(修改字段类型也可能引起该问题)。
假设我的两台服务器分别是A和B,A和B做的双主同步。
A和B中test.users结构如下:
因为在其中一台服务器A上的test.users上加了一个字段,加字段之后的表结构如下:
因为加字段的时候表test.users还有大量数据没有完全同步到A上来,加了字段后还需要将之前的数据进行同步,解析了一下mysql的binlog里面的插入sql格式如下:
INSERT INTO test.users VALUES (1, 2, 1, 99, 6);
从上面的sql明显可以看出来,第5个字段的值是6,原本这个6对应的是fav_times的值,表的字段个数和第5个字段的类型都不一样了,所以同步会出错。
线上错误的原因:从库比主库多了click这个字段,原本插到另外一个datetime类型的数据 结果需要插到这个click int型,所以报错了,应该是当时添加字段加到从库了
- Replicate_Wild_Ignore_Table:
- Last_Errno: 1677
- Last_Error: Column 25 of table 'hd.article' cannot be converted from type 'date' to type 'int(11)'
- Skip_Counter: 0
遇到这个错误比较奇怪,按错误的字面意思大概说是字段类型的转换出了错。明胆是两台数据库,一样的表结构,怎么会出现类型转换问题呢。
连设置slave-skip-errors=1677都不能跳过这个错误:
原因:
GOOGLE搜索了好久也说是mysql5.7版本以前存在这个BUG,建议升级mysql版本。
我试着去分析了一下错误原因,发现是因为之前在服务器上加了新字段引起的问题(修改字段类型也可能引起该问题)。
假设我的两台服务器分别是A和B,A和B做的双主同步。
A和B中test.users结构如下:
- +--------------------+---------------------+------+-----+---------------------+----------------+
- | Field | Type | Null | Key | Default | Extra |
- +--------------------+---------------------+------+-----+---------------------+----------------+
- | id | int(11) unsigned | NO | PRI | NULL | auto_increment |
- | site_id | int(11) | NO | MUL | 0 | |
- | source_book_id | varchar(100) | NO | MUL | 0 | |
- | read_times | int(11) | NO | MUL | 0 | |
- | fav_times | int(11) | NO | MUL | 0 | |
- +--------------------+---------------------+------+-----+---------------------+----------------+
- +--------------------+---------------------+------+-----+---------------------+----------------+
- | Field | Type | Null | Key | Default | Extra |
- +--------------------+---------------------+------+-----+---------------------+----------------+
- | id | int(11) unsigned | NO | PRI | NULL | auto_increment |
- | site_id | int(11) | NO | MUL | 0 | |
- | source_book_id | varchar(100) | NO | MUL | 0 | |
- | read_times | int(11) | NO | MUL | 0 | |
- | fav_times | int(11) | NO | MUL | 0 | |
- +--------------------+---------------------+------+-----+---------------------+----------------+
-
+--------------------+---------------------+------+-----+---------------------+----------------+| Field | Type | Null | Key | Default | Extra |+--------------------+---------------------+------+-----+---------------------+----------------+| id | int(11) unsigned | NO | PRI | NULL | auto_increment || site_id | int(11) | NO | MUL | 0 | || source_book_id | varchar(100) | NO | MUL | 0 | || read_times | int(11) | NO | MUL | 0 | || last_chapter_title | varchar(128) | NO | | | || fav_times | int(11) | NO | MUL | 0 | |+--------------------+---------------------+------+-----+---------------------+----------------+
INSERT INTO test.users VALUES (1, 2, 1, 99, 6);
从上面的sql明显可以看出来,第5个字段的值是6,原本这个6对应的是fav_times的值,表的字段个数和第5个字段的类型都不一样了,所以同步会出错。
解决方法
将新加的字段last_chapter_title从A上先删除掉,等表数据然全同步完之后再次加了新字段。
线上错误的原因:从库比主库多了click这个字段,原本插到另外一个datetime类型的数据 结果需要插到这个click int型,所以报错了,应该是当时添加字段加到从库了
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29096438/viewspace-2123787/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/29096438/viewspace-2123787/