Создайте резервную копию таблицы с помощью столбца GEOMETRY с помощью mysqldump?

Недавно я создал таблицу MySQL с столбцом типа GEOMETRY.

Когда я создаю резервную копию таблицы с помощью mysqldump, она выводит мой столбец геометрии как строку с кавычками, содержащую некоторые экранированные символы, такие как \0, а также некоторые символы, которые выглядят как необработанные двоичные байты в верхнем диапазоне ASCII.

Когда я пытаюсь восстановить дамп в другой базе данных, он не работает с ошибкой:

"Невозможно получить объект GEOMETRY из данных, которые вы отправляете в поле" Геометрия ".

Я попробовал добавить в свою командную строку -hex-blob, но это не меняет результат или не устраняет проблему.

Я уверен, что кто-то не создал тип данных в MySQL и забыл включить способ его резервного копирования. Что мне не хватает?

Спасибо.

Ответ 1

В моем случае эта ошибка возникла специально с значениями геометрии пустой в столбце нечетной геометрии.

В моем случае пустые геометрии были законными случаями неизвестной геометрии, поэтому я обратился к этому, изменив столбец, чтобы разрешить нулевые значения, а затем запустив UPDATE ... SET geom = NULL WHERE IsEmpty(geom);

После этого мне удалось повторно запустить mysqldump и успешно импортировать полученный sql в отдельную базу данных.

(Честно говоря, я не уверен, как попали туда пустые значения геометрии - я даже не знаю, как синтаксис создает пустое значение геометрии)

Ответ 2

Я могу подтвердить, что эта проблема не возникает при использовании функций Export/Import Data в MySQL Workbench. http://www.mysql.com/products/workbench/

Ответ 3

Фрэнк, похоже, это давняя (и все еще открытая) ошибка с mysqldump. См. http://bugs.mysql.com/bug.php?id=43544.

В качестве обходного пути вы можете использовать инструмент ogr2ogr для экспорта данных в шейп файл, а затем импортировать его обратно в базу данных. См. http://www.bostongis.com/PrinterFriendly.aspx?content_name=ogr_cheatsheet

Ответ 4

Я когда-то сталкивался с этой проблемой, но мне удалось пройти через gzip. Пожалуйста, проверьте мои примеры команд: Экспорт:

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

Импорт:

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