ОШИБКА 1231 (42000) с sql_mode при попытке импортировать дамп sql в MySQL Workbench

#mysql #sql #mysql-workbench

#mysql #sql #mysql-workbench

Вопрос:

Я пытаюсь импортировать дамп базы данных на свой локальный хост в MySQL Workbench. В момент попытки импортировать дамп MySQL версии 5.7 в версию 8.0.14 я получаю эту ошибку:

ОШИБКА 1231 (42000) в строке 198: переменной sql_mode не удается установить значение NO_AUTO_CREATE_USER

Сбой операции с кодом выхода 1

Проблема в том, что дамп имеет размер 4 ГБ, и я не могу его открыть, потому что мой компьютер зависает. Существует ли форма удаления этой строки или решения этой проблемы?

Комментарии:

1. Вероятно, вы не сможете открыть его ни в одном обычном текстовом редакторе, но вы можете выполнить поиск-замену для конкретной строки, которая вызывает проблемы. Такие инструменты, как perl или sed , могут сделать это легко. Вы пытаетесь загрузить дамп из более новой версии в более старую версию MySQL? Помните, что mysqldump имеет целую кучу опций, поэтому вы можете отключить части дампа, которые вызывают проблемы.

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

3. Является ли локальное обновление жизнеспособным вариантом? Если вы можете синхронизировать версии, процесс обычно проходит намного плавнее. В 8.0 многое изменилось, но обновление должно быть достаточно плавным.

4. Могу ли я обновить его, не имея базы данных на локальном хостинге?

5. или лучше используйте параметр —force, подобный этому: mysql -u root -pxxxx —force <your_file вы также можете добавить базу данных для использования

Ответ №1:

Похоже, вы столкнулись с этой ошибкой MySQL 8.0. На странице ошибки указано, что это исправлено в версии 8.0.13, но поскольку вы используете 8.0.14 и все еще сталкиваетесь с проблемой, это может быть не так…

Также предлагается обходной путь: заменить все экземпляры ,NO_AUTO_CREATE_USER ничем. Если вы не можете открыть файл с помощью текстового редактора, потому что он слишком большой, вы можете использовать Perl для обновления файла на месте с помощью регулярного выражения, например:

 perl -pi -e 's/,NO_AUTO_CREATE_USER//g' file
  

Объяснение флагов:

  • -e вызывает выполнение кода Perl
  • -p означает: выполнить код для каждой строки файла
  • -i означает: отредактируйте файл на месте

Комментарии:

1. Я делаю это в настольном приложении PerlCritic или в MySQL Workbench?