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


409

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

Я спробував запустити source /Desktop/test.sqlі отримав помилку:

mysql>. \ home \ sivakumar \ Desktop \ test.sql ПОМИЛКА: Не вдалося відкрити файл '\ home \ sivakumar \ Desktop \ test.sql', помилка: 2

Будь-яка ідея про те, що я роблю неправильно?



в основному я думаю, що тут має бути відповідь: \. /home/sivakumar/Desktop/test.sql
talsibony

Відповіді:


433

Якщо ви знаходитесь у командному рядку MySQL, mysql>ви повинні оголосити файл SQL як source.

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

29
Для mysql 5.6.10 на Mac не потрібні єдині лапки для шляху до файлу.
РНК

3
для Windows, використання '/' замість '\' працювало для мене правильно. У мене виникли помилки, коли я спочатку використовував '/'. Це те, що для мене працювало ... Джерело C: /Users/macombers/Downloads/midcoast_db.sql;
Zack Macomber

Відкиньте цитати і на ubuntu (mysql Ver 14.14 debian-linux-gnu (x86_64), використовуючи обгортку EditLine)
Siddhartha

1
@kapil Відносно чого? Ви зараз знаходитесь в MySQL, тому я не боюсь жодного родича.
Томас Едвардс

1
@Sarah Ви можете використовувати \ перед пробілом або обгорнути ім'я файлу ".
Томас Едвардс

165

Варіантів у вас досить багато:

  • використовувати клієнт командного рядка MySQL: mysql -h hostname -u user database < path/to/test.sql
  • Встановіть інструменти графічного інтерфейсу MySQL та відкрийте файл 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

58

Мій улюблений варіант зробити це:

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

Я використовую це таким чином, тому що, якщо ви нанизуєте його на "", ви уникаєте неправильного шляху та помилок з пробілами, - і, ймовірно, більше проблем із символами, з якими я не стикався.


За допомогою коментаря @elcuco я пропоную скористатися цією командою разом із [пробілом], щоб сказати bash ігнорувати збереження її в історії, це вийде з вікна в більшості файлів.

у випадку, якщо вона все ще зберігає вашу команду в історії, будь ласка, перегляньте такі рішення:

Виконайте команду, не зберігаючи її в історії


додаткове редагування безпеки

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

mysql --user="username" --database="databasename" -p < "filepath"

18
Я б не рекомендував передавати пароль до командного рядка, оскільки він буде збережений у ~ / .bash_history, і до нього можуть отримати доступ інші програми через / proc /.
elcuco

Відмінна порада від @elcuco! Також, ймовірно, використовуйте інший прапор після -p (або матимете це останній аргумент), щоб інший параметр помилково не приймався за призначений пароль.
davernator

Зауважте, що аргументи командного рядка все ще помітні іншими користувачами. Приклад: для i in / proc / * / cmdline; робити відлуння $ i; кіт $ ​​i; зроблено
elcuco

Це НЕ рекомендується, коли ви виставляєте пароль своїх серверів історії консолі
Alexius DIAKOGIANNIS

@AlexiusDiakogiannis, чи можете ви надати мені приклад, як ви можете переглянути команду з історії, коли ви виконуєте її з [пробілом] перед командою?
тальсибоні

56

Усі найкращі відповіді хороші. Але про всяк випадок, якщо хтось захоче запустити запит з текстового файлу на віддаленому сервері І зберегти результати у файл (замість показу на консолі), ви можете зробити це:

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

Сподіваюся, що це комусь допоможе.


10
Я думаю, що між -pпаролем не повинно бути місця
webNeat

Якщо метою запису у файл є прийняття дампа даних, я думаю, SELECT ... INTO OUTFILE /path/to/file.csvце більш ефективний спосіб. Дивіться параметри та синтаксис тут - dev.mysql.com/doc/refman/5.7/uk/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! Джерело параметр , який використовується таким чином, що я шукав.
МануельЄ

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:


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>'

Це виконає файл шлях-до-sql-файл


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.

Сподіваюся, це корисно, а не просто зайве.


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 на ім'я файлу, а якщо ваша версія наполягає на напівколонках, переконайтеся, що він є, і спробуйте ще раз.


0

У мене була ця помилка, і я спробував усі поради, які я міг отримати безрезультатно.

Нарешті, проблема полягала в тому, що у моїй папці було пробіл у назві папки, який з'являвся як косої риски в шляху до папки, як тільки я знайшов та вилучив її, вона спрацювала нормально.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.