Mysql

RDS 複製錯誤(應用錯誤 1406/截斷)

  • February 5, 2022

我有一個 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

引用自:https://dba.stackexchange.com/questions/105738