【Mysql】mysql同步错误:Last_Errno: 1677

背景从库报错:
  1. Replicate_Wild_Ignore_Table:
  2.                    Last_Errno: 1677
  3.                    Last_Error: Column 25 of table 'hd.article' cannot be converted from type 'date' to type 'int(11)'
  4.                  Skip_Counter: 0

遇到这个错误比较奇怪,按错误的字面意思大概说是字段类型的转换出了错。明胆是两台数据库,一样的表结构,怎么会出现类型转换问题呢。
连设置slave-skip-errors=1677都不能跳过这个错误:

原因:
GOOGLE搜索了好久也说是mysql5.7版本以前存在这个BUG,建议升级mysql版本。
我试着去分析了一下错误原因,发现是因为之前在服务器上加了新字段引起的问题(修改字段类型也可能引起该问题)。
假设我的两台服务器分别是A和B,A和B做的双主同步。
A和B中test.users结构如下:
  1. +--------------------+---------------------+------+-----+---------------------+----------------+
  2. | Field | Type | Null | Key | Default | Extra |
  3. +--------------------+---------------------+------+-----+---------------------+----------------+
  4. | id | int(11) unsigned | NO | PRI | NULL | auto_increment |
  5. | site_id | int(11) | NO | MUL | 0 | |
  6. | source_book_id | varchar(100) | NO | MUL | 0 | |
  7. | read_times | int(11) | NO | MUL | 0 | |
  8. | fav_times | int(11) | NO | MUL | 0 | |
  9. +--------------------+---------------------+------+-----+---------------------+----------------+


  1. +--------------------+---------------------+------+-----+---------------------+----------------+
  2. | Field | Type | Null | Key | Default | Extra |
  3. +--------------------+---------------------+------+-----+---------------------+----------------+
  4. | id | int(11) unsigned | NO | PRI | NULL | auto_increment |
  5. | site_id | int(11) | NO | MUL | 0 | |
  6. | source_book_id | varchar(100) | NO | MUL | 0 | |
  7. | read_times | int(11) | NO | MUL | 0 | |
  8. | fav_times | int(11) | NO | MUL | 0 | |
  9. +--------------------+---------------------+------+-----+---------------------+----------------+

?
因为在其中一台服务器A上的test.users上加了一个字段,加字段之后的表结构如下:
  1. +--------------------+---------------------+------+-----+---------------------+----------------+
    | 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                   |                |
    +--------------------+---------------------+------+-----+---------------------+----------------+


?
因为加字段的时候表test.users还有大量数据没有完全同步到A上来,加了字段后还需要将之前的数据进行同步,解析了一下mysql的binlog里面的插入sql格式如下:
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/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值