【问题标题】:Back up a table with a GEOMETRY column using mysqldump?使用 mysqldump 备份带有 GEOMETRY 列的表?
【发布时间】:2013-07-03 01:34:19
【问题描述】:

我最近创建了一个带有 GEOMETRY 类型列的 MySQL 表。

当我使用 mysqldump 备份表时,它会将我的几何列输出为带引号的字符串,其中包含一些转义字符,如 \0,以及一些看起来像大 ASCII 范围内的原始二进制字节的字符。

当我尝试将转储恢复到另一个数据库时,它失败并出现错误:

“无法从您发送到 Geometry 字段的数据中获取 GEOMETRY 对象”。

我尝试将 --hex-blob 添加到我的命令行,但这不会改变输出或解决问题。

我确定有人没有在 MySQL 中创建数据类型,并且忘记包含备份它的方法。我错过了什么?

谢谢。

【问题讨论】:

    标签: mysql geometry


    【解决方案1】:

    在我的例子中,这个错误特别出现在非空几何列中的 empty 几何值中。

    在我的情况下,空几何是未知几何的合法情况,所以我通过更改列以允许空值来解决这个问题,然后运行UPDATE ... SET geom = NULL WHERE IsEmpty(geom);

    在此之后,我能够重新运行mysqldump 并成功将生成的 sql 导入到单独的数据库中。

    (老实说,我不确定空几何值是如何到达那里的——我什至不知道创建空几何值的语法)

    【讨论】:

      【解决方案2】:

      Frank,这似乎是 mysqldump 的一个长期存在(并且仍然存在)的错误。见http://bugs.mysql.com/bug.php?id=43544

      作为一种解决方法,您可以使用 ogr2ogr 工具将数据导出到 shapefile,然后将其重新导入数据库。见http://www.bostongis.com/PrinterFriendly.aspx?content_name=ogr_cheatsheet

      【讨论】:

        【解决方案3】:

        我可以确认在 MySQL Workbench 中使用导出/导入数据功能时不会出现此问题。 http://www.mysql.com/products/workbench/

        【讨论】:

          【解决方案4】:

          我曾经遇到过这个问题,但设法通过使用 gzip 进行传递。请检查我的示例命令: 导出:

          mysqldump -u root -p db_name | gzip > dump.sql.gz
          

          导入:

          pv dump.sql.gz | gunzip | mysql -u root -p other_db
          

          【讨论】:

          • 为什么 gzip/gunzip 会有帮助?
          • 我确认它在我的情况下是无用
          猜你喜欢
          • 2013-05-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-07-24
          相关资源
          最近更新 更多