Я пытаюсь создать простую структуру только дамп моей базы данных. Используя 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)
ВОЗ! На самом деле это не комментарии, хотя они и выглядят именно так. Это токены условного выполнения.
Возьмите эту строку:
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
Если версия mySQL 4.00.14 или выше , то сервер MySQL выполнит этот оператор.
Этот волшебный комментарий синтаксис задокументирован в разделе руководства Синтаксис комментария .
Вероятно, вы не хотите избавляться от этого материала.
Попробуйте - skip-comments
?
Спасибо
Изменить:
Понятно .. Попробуйте это
--skip-add-drop-table --skip-add-locks --skip-disable-keys --skip-set-charset
Поиграйте, чтобы удалить некоторые из варианты, пока вы не получите желаемый результат, в основном это то же самое, что и - компактный
без - skip-comments
- skip-comments
удаляет комментарии, относящиеся к версии и прочее ..
Технически строки, от которых вы пытаетесь избавиться, не являются комментариями. Они временно изменяют некоторые переменные в начале, а затем сбрасывают их на предыдущее значение в конце.
Они не очень полезны (но они также безвредны) в вашем случае, поскольку вы используете --no -data, но я подумал, что стоит упомянуть, что строки служат определенной цели, а не являются просто комментариями.
Поскольку вы работаете в Windows, если никто не найдет лучшего решения, вы можете вместо этого использовать скрипт Python:
import re, sys
sql = sys.stdin.read()
regex = re.compile(r'/\*![^\n]* \*/;\n', re.M)
print regex.sub('', sql)
Использование из командной строки:
python program.py < your.sql > output.sql
Он удаляет все подобные строки :
/*!....... */;
Возможно выполнение регулярного выражения для удаления строк, содержащих 40014 или 40111 и т. Д.