Как я могу избавиться от этих комментариев в дампе MySQL? - PullRequest
75 голосов
/ 16 декабря 2009

Я пытаюсь создать простой дамп структуры только из моей базы данных. Использование mysqldump дает мне результат как:

/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

DROP TABLE IF EXISTS `foo`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;

Неважно, что я пытаюсь, я просто не могу избавиться от этих комментариев.

Я сейчас использую: mysqldump -p -d --add-drop-table --skip-tz-utc --skip-set-charset -h 127.0.0.1 -u foo bar --result-file=dumpfile.sql

Редактировать: Однако я хочу сохранить другие комментарии, такие как -- MySQL dump 10.13 Distrib 5.1.41, for Win32 (ia32)

Ответы [ 13 ]

144 голосов
/ 16 декабря 2009

Вау! Это не совсем комментарии, хотя они выглядят так. Это токены условного исполнения.

Возьми эту строку:

/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;

Если версия mySQL 4.00.14 или выше , сервер MySQL выполнит этот оператор.

Этот магический синтаксис комментариев описан в разделе Синтаксис комментариев руководства.

Вы, вероятно, не хотите избавляться от этого материала.

37 голосов
/ 28 декабря 2011

Я знаю, что это древний вопрос, но, по крайней мере, здесь есть ответ. Я также не смог найти флаг в mysqldump для удаления условных комментариев, или, действительно, лучший вариант установить минимальную версию mysql для отображения этих комментариев. Если вы просто хотите уничтожить их всех, вы можете сделать это, используя grep или sed (sed оставляет пустые строки, grep - нет):

mysqldump ... | grep -v '^\/\*![0-9]\{5\}.*\/;$'
mysqldump ... | sed -e 's/^\/\*![0-9]\{5\}.*\/;$//g'

Чтобы ответить на мое собственное желание условно удалить комментарии, зависящие от версии mysql, используйте один из них (удаляет все комментарии для чего-либо

mysqldump ... | grep -v '^\/\*![0-4][0-9]\{4\}.*\/;$'
mysqldump ... | sed -e 's/^\/\*![0-4][0-9]\{4\}.*\/;$//g'
30 голосов
/ 16 декабря 2009

Попробуйте --skip-comments?

Спасибо

Edit:

Понятно .. Попробуйте это

--skip-add-drop-table --skip-add-locks --skip-disable-keys --skip-set-charset

Поиграйте, чтобы удалить некоторые опции, пока не получите желаемый результат, в основном это то же самое, что и --compact без --skip-comments

--skip-comments удаляет комментарии, относящиеся к версии и прочее ..

13 голосов
/ 16 декабря 2009

Вы пробовали использовать ярлык --compact?

Информация здесь .

11 голосов
/ 16 декабря 2009

Технически строки, от которых вы пытаетесь избавиться, не являются комментариями. Они временно изменяют некоторые переменные в начале, а затем сбрасывают их к предыдущему значению в конце.

Они не очень полезны (но и безвредны) в вашем случае, так как вы используете --no-data, но я подумал, что стоит упомянуть, что строки служат цели, а не просто комментарии.

3 голосов
/ 02 августа 2011

Это не комментарии, выполнение этой части скриптов зависит от версии вашего mysql.

Вы можете удалить «часть комментария», например

/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */

до

SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0

делает скрипт более «удобным» для чтения.

Если вы попытаетесь запустить «удобный» скрипт в версии, более новой, чем указано в «комментарии», вы получите ошибку.

1 голос
/ 22 января 2019

Использовать --dump-date = FALSE

Делает именно то, что запрашивает OP. (не совсем, я вижу)

Источник: Сводка опций mysqldump

Редактировать: Через минуту я понял, что это то, что me искал не ОП, а уходил отсюда ... в надежде, что кто-то сможет его использовать: Эта строка даты, которая разрушает контроль над источниками, потому что это всегда изменение ...

0 голосов
/ 22 июля 2015

Как отметили @Ollie и несколько других, это токены условного исполнения, написанные в стиле комментариев, но предназначенные для определенной цели. Без них вы можете столкнуться с проблемами воссоздания таблиц с жестким ограничением внешнего ключа. Например, таблица A имеет FK для таблицы B, и поэтому таблица A не может быть создана до тех пор, пока не будет создана таблица B, и так далее. Без отключения проверки ключей вы, возможно, никогда не сможете воссоздать их в зависимости от того, как наложен порядок в вашей таблице.

0 голосов
/ 02 июня 2015

Я сделал этот скрипт для нормализации дампа, включая удаление условных комментариев: https://github.com/luissquall/dbdump.

Вам просто нужно:

npm install -g @luissquall/dbdump

# Redirect output to a file
dbdump -u user -p -d database > struct.sql
0 голосов
/ 07 октября 2013

Я не знаю, если это то, что вы ищете, я просто хотел избавиться от всех комментариев mysql, чтобы иметь возможность использовать подсветку синтаксиса, я использовал простое регулярное выражение и заменил все на следующее "/ \ *! [0-9] {5} | \ * / "и вуаля! приятные цвета в коде;)

...