Создание базы данных MySQL с импортом файла sql в одной строке

#mysql

#mysql

Вопрос:

У меня есть файл sql, который я хочу загрузить из командной строки. Для этого мне сначала нужно зайти в MySQL и создать базу данных

 mysql> create database myDB;
  

а затем вызовите следующее из командной строки:

 mysql -u username -p myDB < myDB.sql
  

Есть ли способ сделать все это в одной строке из командной строки?

Я попытался добавить следующие строки (и различные комбинации) в начало myDB.sql файла:

 create database `myDB`;
use `myDB`;
  

а затем запуск

 mysql -u username -p < myDB.sql
  

но это не сработало.

 ERROR 1046 (3D000) at line 7: No database selected
  

Ответ №1:

.sql файлы, как правило, буквально представляют собой последовательность запросов SQL DDL / DML. Если он был создан mysqldump, то он должен содержать ВСЕ необходимое для воссоздания базы данных с нуля, включая необходимые create db create table запросы и .

если их там нет, вы можете вручную добавить их в начало файла самостоятельно с помощью простой конкатенации / модификации файлов, например

 echo 'create database foo;' > new.sql
cat otherstuff.sql >> new.sql
mysql < new.sql
  

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

1. Как я уже говорил в своем вопросе, я пробовал это, и это не сработало. В верхней части файла sql БУКВАЛЬНО написано create database myDB; use myDB;

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

3. ну, я попробовал базовую процедуру создания БД / создания таблицы / вставки, и если БД ИЛИ таблица уже существуют, то остальная часть скрипта игнорируется. проверьте, существует ли БД уже? или сделайте create database if not exists вместо этого аналогично для таблиц.

4. так что да. create вызов (любой из них) завершится неудачно, если таблица / база данных уже существует, и это приведет к прерыванию остальной части скрипта. Возможно, вы захотите сначала добавить drop команду, особенно если вы не уверены на 100%, что структура таблицы НЕ изменится между временем сброса / перезагрузки. в противном случае вы можете вставлять в таблицу, структура которой отличается. ничего страшного, если вы добавили поля, но если вы удалили / изменили поля, в лучшем случае вы можете получить мусор в БД.

5. cat 'create database foo;' > new.sql возвращает cat: create database foo;: No such file or directory , я считаю, что это должно быть echo 'create database foo;' > new.sql

Ответ №2:

Если вы сгенерировали файл mysqldump с параметрами --databases или --all-databases , то он помещает правильные инструкции CREATE DATABASE в файл дампа.