主库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