无法恢复几何备份MySQL 5.7错误

时间:2017-06-24 17:19:14

标签: mysql geometry

我一直在将网站从Mysql 5.6升级到5.7。从Mysql 5.1-5.6下已经工作10年(未更改)的mysqldump恢复备份时,它不再适用于MySQL 5.7

具体来说,第一行几何数据无法恢复:

ERROR 1416 (22003) at line 1580 Cannot get geometry object from data you send to the GEOMETRY field

所以,这个是有效几何,但不再是。

尝试补救措施:

  • 将mysqldump切换为--hex-blob
  • 在导入
  • 之前尝试使用astext( <some geometry> )
  • 从备份加载各种几何行的累手,都失败

1 个答案:

答案 0 :(得分:2)

看起来MySQL 5.7几何类型比MySQL 5.6更严格。因此,5.6中有效的数据现在在5.7 中无效。

这是MySQL Bug #76337版本MySQL 5.7.8的修正。

在这种情况下,LINESTRING存储在POINT类型的列中。这已经工作了将近十年,但已不复存在。将列更改为LINESTRING类型可修复上述加载错误。

-- The Fix - run on MySQL 5.6 database before Upgrade/Export
ALTER TABLE routes MODIFY COLUMN route_path LINESTRING;

其他失败模式

这个错误也出现在几何列上,它们能够持久化NULL几何(但不是正式的NULL)。 MySQL IS NULL会说不为空,但asText( myGeo ) MySQL 5.7 下返回NULL。将这些导出到MySQL 5.6中的字符串返回'',空字符串。因此,5.6的''几何输出是5.7的无效输入。

修复是将这些归零。

-- Convert NULL geometries to actual NULL's
UPDATE myTable SET myGeo = NULL WHERE asText(myGeo) IS NULL;
相关问题