репликация 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)'

Конфигурация:

Мастер - 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,
....

person Drew    schedule 23.01.2015    source источник


Ответы (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;
person Drew    schedule 23.01.2015