MySQL репликация (реплика TokuDB): Столбец X таблицы "database.table" нельзя преобразовать из типа "varchar(Y)" в тип "varchar(Y)"
Испытал эту ошибку при просмотре вывода
SHOW SLAVE STATUS\;
это выдержка из состояния вывода:
Last_SQL_Errno: 1677
Last_SQL_Error: Column 1 of table 'database.table' cannot be converted
from type 'varchar(16)' to type 'varchar(16)'
Конфигурация:
Master - Mysql 5.6.x // таблица с ошибкой имеет ENGINE=InnoDB
Реплика - Percona 5.6.x // таблица с ошибкой имеет ENGINE=TokuDB
Определения столбцов на главном и дублирующем серверах точно совпадают:
SHOW CREATE TABLE database.table;
....
CREATE TABLE `table` (
`column_0` bigint(20) NOT NULL AUTO_INCREMENT,
`column_1` varchar(16) NOT NULL,
`column_2` varchar(50) NOT NULL,
....
1 ответ
Решение
Оказывается, между двумя таблицами было одно различие.
CHARSET был истинным виновником.
Мастер:
...
) ENGINE=InnoDB AUTO_INCREMENT=XXXXX DEFAULT CHARSET=latin1
Реплика:
...
) ENGINE=TokuDB AUTO_INCREMENT=XXXX DEFAULT CHARSET=utf8
Команда, необходимая для "исправления" таблицы перед перезапуском репликации:
ALTER TABLE database.table CONVERT TO CHARACTER SET latin1;