Как запустить SQL скрипт в MySQL?

409

Я хочу выполнить текстовый файл, содержащий запросы SQL, в MySQL.

Я попытался запустить source /Desktop/test.sqlи получил ошибку:

mysql>. \ home \ sivakumar \ Desktop \ test.sql ОШИБКА: не удалось открыть файл '\ home \ sivakumar \ Desktop \ test.sql', ошибка: 2

Есть идеи, что я делаю не так?

user1160432
источник
в основном я думаю, что это должен быть ответ здесь: \. /home/sivakumar/Desktop/test.sql
Талсибони

Ответы:

434

Если вы находитесь в командной строке MySQL, mysql>вы должны объявить файл SQL как source.

mysql> source \home\user\Desktop\test.sql;
Томас Эдвардс
источник
29
Для mysql 5.6.10 на Mac не нужны одинарные кавычки для пути к файлу.
РНК
3
для окон, использование '/' вместо '\' работало правильно для меня. Я получил ошибки, когда я первоначально использовал «/». Это то, что сработало для меня ... источник C: /Users/macombers/Downloads/midcoast_db.sql;
Зак Макомбер
Отбросьте кавычки и в Ubuntu (mysql Ver 14.14 debian-linux-gnu (x86_64) с использованием оболочки EditLine)
Сиддхартха,
1
@kapil Относительно чего? На данный момент вы находитесь внутри MySQL, поэтому я боюсь, что нет родственника.
Томас Эдвардс
1
@Sarah Вы можете использовать \ перед пробелом или обернуть имя файла с ".
Томас Эдвардс
166

У вас довольно много вариантов:

  • используйте клиент командной строки MySQL: mysql -h hostname -u user database < path/to/test.sql
  • Установите инструменты MySQL GUI и откройте файл SQL, затем запустите его
  • Используйте phpmysql, если база данных доступна через ваш веб-сервер
Евгений Рик
источник
3
Как насчет пароля пользователя (опция -p)?
Амир Кац
@AmirKatz Хотя пароль может быть задан с помощью -pопции, это не рекомендуется: другие пользователи на одном хосте могут использовать системные инструменты, например, psчтобы прочитать его в этом случае.
Евгений Рик,
1
@EugenRieck -pбез аргумента предлагает ввести пароль на следующей строке
Бобби Джек,
130

Вы можете выполнить операторы mysql, которые были записаны в текстовом файле, используя следующую команду:

mysql -u yourusername -p yourpassword yourdatabase < text_file

если ваша база данных еще не создана, сначала войдите в свой mysql, используя:

mysql -u yourusername -p yourpassword yourdatabase

тогда:

mysql>CREATE DATABASE a_new_database_name

тогда:

mysql -u yourusername -p yourpassword a_new_database_name < text_file

это должно сделать это!

Более подробная информация здесь: http://dev.mysql.com/doc/refman/5.0/en/mysql-batch-commands.html

Пол Прейбиш
источник
7
в Windows: для пароля мне пришлось использовать кавычки и НЕТ пробела, чтобы заставить его работать (сам пароль не содержал пробелов или специальных символов):mysql -u yourusername -p"yourpassword"
TmTron
1
Если вы не хотите, чтобы ваш пароль отображался в приглашении, я думаю, что описанный здесь метод сработает: stackoverflow.com/questions/9293042/…
alex9311
59

Мой любимый вариант сделать это будет:

 mysql --user="username" --database="databasename" --password="yourpassword" < "filepath"

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


С комментарием @elcuco я предлагаю использовать эту команду вместе с [пробелом], поэтому она говорит bash игнорировать сохранение в истории, это будет работать из коробки в большинстве bash.

если ваша команда все еще сохраняется в истории, просмотрите следующие решения:

Выполнить команду, не сохраняя ее в истории


дополнительная безопасность редактирования

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

mysql --user="username" --database="databasename" -p < "filepath"
talsibony
источник
18
Я бы не рекомендовал передавать пароль в командную строку, так как он будет сохранен в ~ / .bash_history и может быть доступен для других программ через / proc /.
Elcuco
Отличный совет от @elcuco! Также, возможно, используйте другой флаг после -p (или укажите последний аргумент), чтобы другой параметр не был ошибочно принят как предполагаемый пароль.
Давернатор
Обратите внимание, что аргументы командной строки по-прежнему видны другим пользователям. Пример: для меня в / proc / * / cmdline; сделать эхо $ я; кот $ я; сделано
elcuco
Это НЕ РЕКОМЕНДУЕТСЯ, поскольку вы выставляете пароль своих серверов в истории консоли
Alexius DIAKOGIANNIS
@AlexiusDiakogiannis Можете ли вы привести пример, как вы можете просмотреть команду из истории, когда вы выполняете ее с [пробел] перед командой?
Талсибони
56

Все лучшие ответы хороши. Но на тот случай, если кто-то захочет выполнить запрос из текстового файла на удаленном сервере и сохранить результаты в файл (вместо отображения на консоли), вы можете сделать это:

mysql -u yourusername -p yourpassword yourdatabase < query_file > results_file

Надеюсь, это кому-нибудь поможет.

Бхушан
источник
10
Я думаю, что между -pпаролем и
пробелом
Если целью записи в файл является получение дампа данных, я думаю, SELECT ... INTO OUTFILE /path/to/file.csvэто более эффективный способ. См. Параметры и синтаксис здесь - dev.mysql.com/doc/refman/5.7/ru/select-into.html
Анис
20

Укажите путь к файлу .sql как:

source c:/dump/SQL/file_name.sql;

Смотрите на изображении:

Шубхам Верма
источник
Благодаря тонну! это работает, даже если ваш пользователь не имеет прав SUDO и на удаленном Amazon RDS
Volatil3
20

Я пришел сюда в поисках этого ответа, и вот что я нашел, работает лучше всего для меня: Обратите внимание, я использую Ubuntu 16.xx

  1. Доступ к MySQL, используя:

mysql -u <your_user> - p

  1. В приглашении mysql введите:

source file_name.sql

Надеюсь это поможет.

Зак Смит
источник
2
Вместо запуска приглашения может быть даже полезно объединить два шага в одной команде:mysql -u<user> -p -e 'source filename.sql'
junix
Спасибо, @junix! Опция источника, использованная таким образом, - то, что я искал.
ManuelJE
14
mysql> source C:\Users\admin\Desktop\fn_Split.sql

Не указывайте одинарные кавычки.

Если приведенная выше команда не работает, скопируйте файл на диск c: и повторите попытку. как показано ниже,

mysql> source C:\fn_Split.sql
Шанкар Калянкар
источник
13

Никогда не рекомендуется передавать аргумент пароля непосредственно из командной строки, он сохраняется в ~/.bash_historyфайле и может быть доступен из других приложений.

Используйте это вместо:

mysql -u user --host host --port 9999 database_name < /scripts/script.sql -p
Enter password:
Хорхе Э. Эрнандес
источник
10
mysql -uusername -ppassword database-name < file.sql
Мартин Петров
источник
9

Скорее всего, вам просто нужно изменить косую черту:

 \home\sivakumar\Desktop\test.sql

в

 /home/sivakumar/Desktop/test.sql

Таким образом, команда будет:

source /home/sivakumar/Desktop/test.sql
Бен Лин
источник
6

используйте следующее из командной строки mysql -

source \\home\\user\\Desktop\\test.sql;

Не используйте цитаты. Даже если путь содержит пробел (''), вообще не используйте кавычки .

Раджеш Пол
источник
5

вместо перенаправления я бы сделал следующее

mysql -h <hostname> -u <username> --password=<password> -D <database> -e 'source <path-to-sql-file>'

Это выполнит файл path-to-sql-file

DataGuru
источник
5

Так много способов сделать это.

From Workbench: File > Run SQL Script -- then follow prompts

From Windows Command Line:
   Option 1: mysql -u usr -p
             mysql> source file_path.sql
   Option 2: mysql -u usr -p '-e source file_path.sql'
   Option 3: mysql -u usr -p < file_path.sql
   Option 4: put multiple 'source' statements inside of file_path.sql (I do this to drop and recreate schemas/databases which requires multiple files to be run)
             mysql -u usr -p < file_path.sql

Если вы получаете ошибки из командной строки, убедитесь, что вы ранее запустили

cd {!!>>mysqld.exe home directory here<<!!}
mysqld.exe --initialize 

Это должно быть выполнено из каталога mysqld.exe, отсюда и CD.

Надеюсь, что это полезно, а не просто излишне.

DonkeyKong
источник
3

Так mysql -u yourusername -p yourpassword yourdatabase < text_fileкак не работал на удаленном сервере (Amazon EC2) ...

Убедитесь, что база данных создана в первую очередь.

Затем:

mysql --host=localhost --user=your_username --password=your_password your_database_name < pathTofilename.sql
Дамир Олехар
источник
3

Для дальнейшего использования, я нашел, что это работает против вышеупомянутых методов, под Windows в вашей консоли msql:

MySQL >>source c://path_to_file//path_to_file//file_name.sql;

Если ваш корневой диск не называется «c», просто поменяйте его местами. Сначала попробуйте обратную косую черту, если они не работают, попробуйте косую черту. Если они также не работают, убедитесь, что у вас есть полный путь к файлу, расширение .sql в имени файла, а если ваша версия настаивает на точках с запятой, убедитесь, что он там, и попробуйте снова.

Чад Mx
источник
0

У меня была эта ошибка, и я попробовал все советы, которые мог получить, но безрезультатно.

Наконец, проблема заключалась в том, что в моей папке был пробел в имени папки, который появлялся как косая черта в пути к папке, как только я нашел и удалил ее, она работала нормально.

user3753416
источник