線上庫的一張表主鍵是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