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

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

方案:作从库,而后从库用pt工具修改成bigint,停服,切换到从库。mysql

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

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

##############################################测试

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

因为insert到表仍是int的那张表,触发器插入bigint的表没有报错。blog

问题2、rename之后,出现报错。文档

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

解决:同步

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

相关文章
相关标签/搜索