2009-11-16 3 views
1

Я просто использовал инструмент mysqldump MySQL для генерации DDL, чтобы я мог создать разумную базу данных на другой машине. Когда я пытаюсь запустить его на целевой машине я получаю эту ошибку:Сгенерированный MySQL DDL не удается восстановить базу данных

строка сценария: 28 Key колонка «friendPrimaryKeyInYour Телефон» не существует в таблице

запускающего это заявление:

/*!40101 SET character_set_client = utf8 */; 
CREATE TABLE `friend` (
    `id` bigint(20) unsigned NOT NULL, 
    `dependentId` bigint(20) unsigned NOT NULL, 
    `friendPrimaryKeyInYourPhone` int(10) unsigned NOT NULL, 
    `friendNameInYourPhone` varchar(45) NOT NULL, 
    `date` datetime NOT NULL, 
    PRIMARY KEY (`id`,`friendPrimaryKeyInYourPhone`) USING BTREE, 
    UNIQUE KEY `idx_dependendentId_phonePk` (`dependentId`,`friendPrimaryKeyInYour 
Phone`), 
    KEY `idx_phonePk` (`friendPrimaryKeyInYourPhone`), 
    KEY `idx_dependentId` (`dependentId`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

Любая идея о том, как MySQL может сгенерировать этот DDL и через несколько секунд считать его недействительным?

ответ

2

Проблема, кажется, с дополнительным пространством ...

Я не уверен, что MySQL виноват здесь. Может ли это быть текстовый редактор или какой-либо другой инструмент, который создал этот артефакт?

Редактировать: в более подробном описании это разделение имени поля происходит на 79-м символе ... многие инструменты для текстового представления, использующие 80 в качестве стандартного witdth, похоже, подтверждают эту проблему.

Предложения:

  • Посмотрите в самый код создаваемого дампа в MySQL. Прямо от «лошадиного рта». Для наблюдения открывайте [и никогда не сохраняйте] с помощью шестнадцатеричного редактора или текстового редактора.
  • Если на самом деле есть лишнее пространство, загляните в схему MySQL для указанной базы данных и посмотрите, нет ли там какого-то нечетного характера ...?
  • Посмотрите другие части текста сценария и посмотрите, будут ли разделены длинные линии
3

В friendPrimaryKeyInYour Phone есть место как в сообщении об ошибке, так и в вашем SQL. Должна быть копия/вставка (или какая-то строка-обертка), удалите ее и повторите попытку.

+0

Хорошо поймать! Я использую --result-file = droidwill.sql на mysqldump, и я вставил этот вывод прямо в редактор скриптов MySQL. Должно быть, меня куда-то помахали. Спасибо, много брата (ов) – stanlick

Смежные вопросы