Ошибка импорта базы данных MySQL из-за расширенных вставок

я импортирую 400MB (несжатую) базу данных MySQL. Я использую BIGDUMP, и я получаю эту ошибку:

Stopped at the line 387.

At this place the current query includes more than 300 dump lines. That can happen if your dump file was created by some tool which doesn't place a semicolon followed by a linebreak at the end of each query, or if your dump contains extended inserts. Please read the BigDump FAQs for more infos.

Я считаю, что файл содержит расширенные вставки, однако у меня нет возможности восстановить базу данных, поскольку она была удалена со старого сервера. Как импортировать эту базу данных или преобразовать ее для импорта?

Спасибо за любую помощь.

лучшие Ник!--2-->

EDIT: Кажется, единственный жизнеспособный ответ - разделите расширенные вставки, но мне все равно нужна помощь, чтобы понять, как разделить файл, как предлагает ответ ниже. Пожалуйста помочь. Спасибо.

6 ответов


вам не нужно вносить какие-то изменения .sql файл: просто откройте bigdump.PHP в любом текстовом редакторе, найдите строку

define ('MAX_QUERY_LINES',300);

и замените 300 на что угодно.


просто отредактируйте файл дампа, чтобы после 300 вставок вы начали новую инструкцию:

INSERT INTO `myTable` (`id`, `field1`, `field2`) VALUES
    (1, 'a', 'b'),
    (2, 'c', 'd'),
    (3, 'e', 'f'),
    -- snip --
    (300, 'w', 'x');
INSERT INTO `myTable` (`id`, `field1`, `field2`) VALUES
    (301, 'y', 'z'),
    (302, ... etc

вы можете сделать это, просто открыв свой <backup>.sql файл в любом текстовом редакторе, это просто текст. Иногда резервная копия может быть .gz или .bz файл, но они просто молнии: если вы распакуете эти gzipped или bzipped файлы, вы получите один .sql файл, который вы можете легко редактировать.

вероятно, было бы не слишком сложно написать сценарий для разделения каждого оператора после произвольного количества строк. Основная логика программы выглядела бы так:

  1. найдите строку, которая начинается с "INSERT".
  2. скопируйте строку до конца слова"VALUES"
  3. шаг через все следующие строки, подсчет, как вы идете.
  4. если ваш счетчик достигает 300, то добавьте точку с запятой в конец последней строки и вставьте в "INSERT ... VALUES " заявление от before. Сбросьте счетчик до 1 и перейдите к Шаг 3.
  5. если вы достигнете строки, которая начинается с "INSERT", сбросьте счетчик на 1 и перейдите к Шагу 2.

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

хотя то, что вы сделали с ограничением памяти, вероятно, намного проще. Для кого-то еще в аналогичная ситуация, кто не может изменить эти пределы, попробуйте выше.


я смог успешно импортировать базу данных после увеличения буфера памяти и выполнения обычного импорта mysql через SSH.

я использовал следующую команду с абсолютным путем:

mysql -u <username> -p < /home/dir/dumpfile.sql

лучшие Ник!--2-->


для меня это работало следующим образом:

искать

$max_query_lines = 300;

затем просто заменяется на

$max_query_lines = 3000;

Спасибо за решения "max_query_lines" и "INSERT"!

"оба решения имеют некоторые недостатки. Без расширенной вставки выходной дамп будет во много раз больше дампа с расширенными вставками. Увеличение max_query_lines увеличит использование памяти скрипта bigdump, и ваш сервер может исчерпать память."

источник: http://www.etctips.com/error-at-this-place-the-current-query-includes-more-than-xxx-dump-lines/


старый вопрос, но я нашел его через интернет-поиск, и у него еще нет ответа, который я искал, так как похоже, что phpMyAdmin переименовал настройку.

чтобы отключить "расширенные вставки" в экспорте phpMyAdmin, вам нужно установить параметр "синтаксис для использования при вставке данных" в первую опцию:

include column names in every INSERT statement 
Example: INSERT INTO tbl_name (col_A,col_B,col_C) VALUES (1,2,3)