#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 в файл дампа.