Mysql
RDS 複製錯誤(應用錯誤 1406/截斷)
我有一個 MySQL RDS 實例作為主實例,從中創建了一個只讀副本,並在其上執行了一些架構更改操作。具體來說,我將所有表和列的字元集和排序規則從 utf8 更改為 utf8mb4。事情複製得很好,但剛剛發生了錯誤。
Apply Error 1406: Error; Data too long for column... etc
這是由於將某些列的 varchar 長度從 255 降低到 191。
我讀到您可以執行一些命令來跳過複製錯誤,如下所述:http: //docs.aws.amazon.com/AmazonRDS/latest/UserGuide/mysql_rds_skip_repl_error.html
但是,這是否會“跳過”插入,或者只是截斷數據並繼續插入?
我希望數據被截斷並仍然添加到表中,而不是中止整個操作,但我不確定這是否會發生。歡迎大家提出意見!
獲取 5.6.3(或更高版本)。據我了解,這些需要應用於副本:
SET GLOBAL innodb_file_format=Barracuda; SET GLOBAL innodb_file_per_table=ON; ALTER TABLE tbl ROW_FORMAT=DYNAMIC; -- or COMPRESSED
這應該允許您保留 255(而不是 191),從而避免截斷。
查看副本上參數組中的slave_type_conversions參數。由於主副本和副本之間的數據類型差異,可以選擇允許截斷。請注意,這是一個靜態參數,因此需要重啟 RDS 實例才能生效。
https://dev.mysql.com/doc/refman/5.7/en/replication-options-slave.html#sysvar_slave_type_conversions
https://dev.mysql.com/doc/refman/8.0/en/replication-features-differing-tables.html