线上库的一张表主键是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