ERROR 3105 (HY000): Unknown error 3105
事件:在导入rds上备份出来的文件时报错:ERROR 3105 (HY000): Unknown error 3105
1、使用mysql <备份文件 的方式,直接中断,报错一样。
2、使用source执行时,表结构正常,导入数据为0。
分析:两台机器,一个机器上的开发环境正常,另一台上的测试环境报错。经比对两个机器的mysqldump版本不一样,
表结构中含有Cenerated
,geometry` geometry NOT NULL COMMENT '地理位置',
`geohash` varchar(128) GENERATED ALWAYS AS (st_geohash(`geometry`,8)) VIRTUAL COMMENT 'geohash',
`longitude` double(10,6) NOT NULL DEFAULT '0.000000' COMMENT '经度',
`latitude` double(10,6) NOT NULL DEFAULT '0.000000' COMMENT '纬度',
具体原因:导出的mysqldump版本太低,有问题的版本
[root@test ~]# mysqldump --version
mysqldump Ver 10.14 Distrib 5.5.68-MariaDB, for Linux (x86_64)
正常的版本
[root@mysql ~]# mysqldump --version
mysqldump Ver 10.13 Distrib 5.7.26, for linux-glibc2.12 (x86_64)
google搜索描述的故障相同,其中一段话直接说明了问题原因如下:
if you have generated columns you need to use the version of mysqldump from MySQL 5.7.9 or higher, because earlier versions have a bug.
也就是说 mysqldump
导出带有 generated columns
的数据,要使用 mysqldump 5.7.9
以上的版本,否则会遇到 ERROR 3105 (HY000)
这个问题。
总结:
Generated Column
是 MySQL 5.7
引入的新特性,所谓 Cenerated Column
,就是数据库中这一列由其他列计算而得。
在 MySQL 5.7
中,支持两种Generated Column
,即Virtual Generated Column
和Stored Generated Column
。
前者只将Generated Column
保存在数据字典中(表的元数据),并不会将这一列数据持久化到磁盘上;后者会将Generated Column
持久化到磁盘上,而不是每次读取的时候计算所得。
参考:http://zongming.net/read-1384/