Jak uruchomić skrypt SQL w MySQL?

409

Chcę wykonać plik tekstowy zawierający zapytania SQL w MySQL.

Próbowałem uruchomić source /Desktop/test.sqli otrzymałem błąd:

mysql>. \ home \ sivakumar \ Desktop \ test.sql BŁĄD: Nie można otworzyć pliku „\ home \ sivakumar \ Desktop \ test.sql”, błąd: 2

Masz pomysł na to, co robię źle?

użytkownik1160432
źródło
w zasadzie myślę, że to powinna być odpowiedź tutaj: \. /home/sivakumar/Desktop/test.sql
talsibony

Odpowiedzi:

433

Jeśli jesteś w linii poleceń MySQL mysql>, musisz zadeklarować plik SQL jako source.

mysql> source \home\user\Desktop\test.sql;
Thomas Edwards
źródło
29
W przypadku mysql 5.6.10 na komputerze Mac ścieżka do pliku nie jest wymagana.
RNA
3
w systemie Windows użycie „/” zamiast „\” działało poprawnie dla mnie. Wystąpiły błędy, gdy pierwotnie użyłem „/”. To działało dla mnie ... źródło C: /Users/macombers/Downloads/midcoast_db.sql;
Zack Macomber
Upuść cytaty również na ubuntu (mysql Ver 14.14 debian-linux-gnu (x86_64) za pomocą otoki EditLine)
Siddhartha
1
@kapil Względem czego? W tym momencie jesteś w MySQL, więc obawiam się, że nie ma krewnego.
Thomas Edwards,
1
@ Sarah Możesz użyć \ przed spacją lub zawinąć nazwę pliku ".
Thomas Edwards,
165

Masz całkiem sporo opcji:

  • użyj klienta linii poleceń MySQL: mysql -h hostname -u user database < path/to/test.sql
  • Zainstaluj narzędzia GUI MySQL i otwórz plik SQL, a następnie uruchom go
  • Użyj phpmysql, jeśli baza danych jest dostępna za pośrednictwem twojego serwera
Eugen Rieck
źródło
3
Co z hasłem użytkownika (opcja -p)?
Amir Katz
@AmirKatz Chociaż hasło można podać z tą -popcją, nie jest to zalecane: inni użytkownicy na tym samym hoście mogą korzystać z narzędzi systemowych, takich jak psczytanie w tym przypadku.
Eugen Rieck
1
@EugenRieck -pbez argumentu monituje o podanie hasła w następnym wierszu
Bobby Jack
130

możesz wykonać instrukcje mysql, które zostały zapisane w pliku tekstowym, używając następującego polecenia:

mysql -u yourusername -p yourpassword yourdatabase < text_file

jeśli twoja baza danych nie została jeszcze utworzona, zaloguj się najpierw do mysql, używając:

mysql -u yourusername -p yourpassword yourdatabase

następnie:

mysql>CREATE DATABASE a_new_database_name

następnie:

mysql -u yourusername -p yourpassword a_new_database_name < text_file

że należy to zrobić!

Więcej informacji tutaj: http://dev.mysql.com/doc/refman/5.0/en/mysql-batch-commands.html

Paul Preibisch
źródło
7
w systemie Windows: dla hasła musiałem użyć cudzysłowu i BEZ spacji, aby działało (samo hasło nie zawierało spacji ani specjalnych znaków):mysql -u yourusername -p"yourpassword"
TmTron
1
Jeśli nie chcesz, aby twoje hasło wyświetlało się w monicie, uważam, że opisana tutaj metoda zadziała: stackoverflow.com/questions/9293042/...
alex9311
58

Moja ulubiona opcja to:

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

Używam tego w ten sposób, ponieważ kiedy ciągniesz go za pomocą „” unikając niewłaściwej ścieżki i błędów ze spacjami oraz - i prawdopodobnie więcej problemów z znakami, z którymi się nie spotkałem.


Z komentarzem @elcuco sugeruję użycie tego polecenia z [spacją], aby polecił bashowi, aby zignorował zapisanie go w historii, to zadziała po wyjęciu z pudełka w większości bash.

jeśli nadal zapisujesz twoje polecenie w historii, zobacz następujące rozwiązania:

Wykonaj polecenie bez przechowywania go w historii


dodatkowa edycja bezpieczeństwa

Na wypadek, gdy chcesz być bardziej bezpieczny, możesz użyć następującego polecenia i wprowadzić hasło w wierszu poleceń:

mysql --user="username" --database="databasename" -p < "filepath"
talsibony
źródło
18
Nie polecam przekazywania hasła do wiersza poleceń, ponieważ zostanie ono zapisane w ~ / .bash_history i będzie dostępne dla innych programów poprzez / proc /.
elcuco
Doskonała rada od @elcuco! Prawdopodobnie użyj innej flagi po -p (lub niech to będzie ostatni argument), aby inny parametr nie został błędnie uznany za zamierzone hasło.
davernator
Pamiętaj, że argumenty wiersza poleceń są nadal widoczne dla innych użytkowników. Przykład: dla i w / proc / * / cmdline; wykonaj echo $ i; kot $ i; gotowe
elcuco,
To NIE jest
ponowne wznowienie,
@AlexiusDiakogiannis, czy możesz mi podać przykład, w jaki sposób możesz wyświetlić polecenie z historii po wykonaniu go za pomocą [spacji] przed poleceniem?
talsibony,
56

Wszystkie najlepsze odpowiedzi są dobre. Ale na wypadek, gdyby ktoś chciał uruchomić zapytanie z pliku tekstowego na zdalnym serwerze ORAZ zapisać wyniki w pliku (zamiast pokazywać na konsoli), możesz to zrobić:

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

Mam nadzieję, że to komuś pomoże.

Bhuszan
źródło
10
Myślę, że między -phasłem a hasłem nie powinno być spacji
webNeat
Jeśli celem zapisu do pliku jest zrzut danych, SELECT ... INTO OUTFILE /path/to/file.csvwydaje mi się, że jest to bardziej wydajny sposób. Zobacz opcje i składnię tutaj - dev.mysql.com/doc/refman/5.7/en/select-into.html
Anis
20

Podaj ścieżkę do pliku .sql jako:

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

Zobacz na obrazku:

Shubham Verma
źródło
Wielkie dzięki! działa to nawet wtedy, gdy użytkownik nie ma uprawnień SUDO i na zdalnym Amazon RDS
Volatil3
20

Przyszedłem tutaj, szukając również tej odpowiedzi, i oto, co znalazłem, działa najlepiej dla mnie: Uwaga: Używam Ubuntu 16.xx

  1. Uzyskaj dostęp do mysql za pomocą:

mysql -u <your_user> - p

  1. W wierszu polecenia mysql wpisz:

source file_name.sql

Mam nadzieję że to pomoże.

Zac Smith
źródło
2
Zamiast uruchamiać monit, przydatne może być nawet połączenie dwóch kroków w jednym poleceniu:mysql -u<user> -p -e 'source filename.sql'
junix
Dzięki, @junix! Źródło opcja używana w ten sposób jest to, czego szukałem.
ManuelJE
14
mysql> source C:\Users\admin\Desktop\fn_Split.sql

Nie podawaj pojedynczych cudzysłowów.

Jeśli powyższe polecenie nie działa, skopiuj plik na dysk c: i spróbuj ponownie. jak pokazano niżej,

mysql> source C:\fn_Split.sql
Shankar Kalyankar
źródło
13

Nigdy nie jest dobrą praktyką przekazywanie argumentu hasła bezpośrednio z wiersza poleceń, jest on zapisywany w ~/.bash_historypliku i może być dostępny z innych aplikacji.

Zamiast tego użyj tego:

mysql -u user --host host --port 9999 database_name < /scripts/script.sql -p
Enter password:
Jorge E. Hernández
źródło
10
mysql -uusername -ppassword database-name < file.sql
Мартин Петров
źródło
9

Bardzo prawdopodobne, że po prostu musisz zmienić slash / blackslash: z

 \home\sivakumar\Desktop\test.sql

do

 /home/sivakumar/Desktop/test.sql

Tak więc polecenie brzmiałoby:

source /home/sivakumar/Desktop/test.sql
Ben Lin
źródło
6

użyj następujących poleceń w wierszu polecenia mysql -

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

Nie używaj oferty. Nawet jeśli ścieżka zawiera spację („”), nie używaj w ogóle cudzysłowu .

Rajesh Paul
źródło
5

zamiast przekierowania zrobiłbym następujące

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

Spowoduje to wykonanie pliku ścieżka-plik-sql

DataGuru
źródło
5

Tak wiele sposobów, aby to zrobić.

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

Jeśli otrzymujesz błędy z wiersza poleceń, upewnij się, że wcześniej uruchomiłeś

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

To musi być uruchomione z katalogu mysqld.exe, stąd CD.

Mam nadzieję, że jest to pomocne, a nie tylko zbędne.

DonkeyKong
źródło
3

Ponieważ mysql -u yourusername -p yourpassword yourdatabase < text_filenie działał na zdalnym serwerze (Amazon EC2) ...

Upewnij się, że najpierw utworzono bazę danych.

Następnie:

mysql --host=localhost --user=your_username --password=your_password your_database_name < pathTofilename.sql
Damir Olejar
źródło
3

Dla przyszłego odniesienia, stwierdziłem, że to działa w porównaniu do wyżej wymienionych metod, w systemie Windows w konsoli msql:

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

Jeśli twój dysk root nie jest nazywany „c”, po prostu zamień go z tym, co nazywa się twoim dyskiem. Najpierw wypróbuj ukośniki odwrotne, jeśli nie działają, wypróbuj ukośnik. Jeśli one również nie działają, upewnij się, że masz pełną ścieżkę pliku, rozszerzenie .sql w nazwie pliku, a jeśli Twoja wersja wymaga średników, upewnij się, że tam jest, i spróbuj ponownie.

Chad Mx
źródło
0

Miałem ten błąd i wypróbowałem wszystkie porady, które udało mi się bezskutecznie.

Wreszcie problem polegał na tym, że mój folder miał spację w nazwie folderu, która pojawia się jako ukośnik w ścieżce folderu, gdy go znalazłem i usunąłem, działał dobrze.

użytkownik3753416
źródło