主库int,从库bigint出现的问题。

线上库的一张表主键是int类型,ibd文件300多G,快21亿条了,需要修改类型为bigint。

方案:做从库,然后从库用pt工具修改为bigint,停服,切换到从库。

主库是int,从库是bigint,测试是不能插入数据的,报错信息如下:

Column 0 of table 'test.t' cannot be converted from type 'int' to type 'bigint(20)

##############################################

问题一、为啥在用pt工具改的时候没有出现报错。

由于insert到表还是int的那张表,触发器插入bigint的表没有报错。

问题二、rename以后,出现报错。

主库insert 到int的那张表,从库插入到对应的bigint的表,出现报错信息。

解决:

set global slave_type_conversions='ALL_NON_LOSSY';

start slave;

主从正常同步,但是丢失一条数据。

在_table_old表中找到丢失的数据,就是在rename的时候的数据。

由于pt工具在运行的时候先写入_table_new ,然后才写入table表的。

rename的一瞬间,先写入到_table_new,没有写入到table表。出现了报错,所以丢了一条数据。

 不建议使用mysql的过滤功能,如果一定要用,只用这种:replicate-wild-do-table=test1.t  ,上线多测试。

官方文档:

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

http://blog.51cto.com/chenql/1685266

 

posted on 2018-09-21 18:36  星期六男爵  阅读(322)  评论(0编辑  收藏  举报

导航