mysql 复制(TokuDB 副本):table 'database.table' 的列 X 无法从类型 'varchar(Y)' 转换为类型 'varchar(Y)'
mysql replication (TokuDB replica): Column X of table 'database.table' cannot be converted from type 'varchar(Y)' to type '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 // table with error has ENGINE=InnoDB
副本 - Percona 5.6.x // table 有 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,
....
事实证明,是两个table的定义之间的一个区别。
CHARSET 才是真正的罪魁祸首。
大师:
...
) ENGINE=InnoDB AUTO_INCREMENT=XXXXX DEFAULT CHARSET=latin1
副本:
...
) ENGINE=TokuDB AUTO_INCREMENT=XXXX DEFAULT CHARSET=utf8
在重新启动复制之前 "fix" table 所需的命令:
ALTER TABLE database.table CONVERT TO CHARACTER SET latin1;
查看
的输出时遇到此错误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 // table with error has ENGINE=InnoDB
副本 - Percona 5.6.x // table 有 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,
....
事实证明,是两个table的定义之间的一个区别。
CHARSET 才是真正的罪魁祸首。
大师:
...
) ENGINE=InnoDB AUTO_INCREMENT=XXXXX DEFAULT CHARSET=latin1
副本:
...
) ENGINE=TokuDB AUTO_INCREMENT=XXXX DEFAULT CHARSET=utf8
在重新启动复制之前 "fix" table 所需的命令:
ALTER TABLE database.table CONVERT TO CHARACTER SET latin1;