Как я могу избавиться от этих комментариев в дампе 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 ]

0 голосов
/ 03 апреля 2013

Если вы наткнулись на этот ответ, пытаясь включить свой файл Structure.sql в git / github, вы можете удалить автоинкремент с помощью следующего кода сразу после того, как наберете db: structure: dump

# Remove beginning auto increments to prevent merge conflicts
filename = 'db/structure.sql'
File.atomic_write(filename) do |output|
  File.open(filename, 'rb').each do |input|
    output.write(input.gsub(/\s+AUTO_INCREMENT=\d+\s+/, ' '))
  end
end
0 голосов
/ 16 декабря 2009

Поскольку вы находитесь в 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

Удаляет все строки следующим образом:

/*!....... */;
0 голосов
/ 16 декабря 2009

Возможно, на нем выполняется регулярное выражение для удаления строк, содержащих 40014 или 40111 и т. Д.

...