Jak zaimportować plik SQL za pomocą wiersza polecenia w MySQL?


2034

Mam .sqlplik z eksportem z phpMyAdmin. Chcę zaimportować go na inny serwer za pomocą wiersza polecenia.

Mam instalację systemu Windows Server 2008 R2. Umieściłem .sqlplik na dysku C i wypróbowałem to polecenie

database_name < file.sql

To nie działa. Dostaję błędy składniowe.

  • Jak mogę zaimportować ten plik bez problemu?
  • Czy najpierw muszę utworzyć bazę danych?



7
Co z tymi duplikatami? To jest rzeczywiście pomocne pytanie w swoim własnym celu
Valentino Pereira

@ValentinoPereira sprawdziłeś oryginalne daty pytań przed ustaleniem duplikatów
AZinkey

Czy możesz podać przykład, który można odtworzyć? database < file.sqlnie wygląda mi na żadne polecenie, a jeśli zobaczysz jakieś błędy składniowe, udostępnij je
Nico Haase

Odpowiedzi:


3771

Próbować:

mysql -u username -p database_name < file.sql

Sprawdź opcje MySQL .

Uwaga 1: Lepiej jest użyć pełnej ścieżki do pliku SQL file.sql.

Uwaga 2: Użyj -Ri, --triggersaby zachować procedury i wyzwalacze oryginalnej bazy danych. Nie są domyślnie kopiowane.

Uwaga-3 Być może trzeba będzie utworzyć (pustą) bazę danych z mysql, jeśli jeszcze nie istnieje, a eksportowany SQL nie zawiera CREATE DATABASE(wyeksportowany z opcją --no-create-dblub -n), zanim będzie można go zaimportować.


2
Kiedy uruchamiam plik z programu takiego jak Toad, nie otrzymuję błędu, ale kiedy uruchamiam go z wiersza poleceń,
pojawia się

110
Zauważ, że tak, musisz utworzyć (pustą) bazę danych z mysql, jeśli jeszcze nie istnieje, zanim będzie można ją zaimportować.
Skippy le Grand Gourou

17
Tak, pamiętaj, aby utworzyć pustą bazę danych (jeśli baza danych wcześniej nie istniała), z konsoli MySQL w następujący sposób:CREATE DATABASE db-name;
Qasim

3
Upewnij się, że plik kopii zapasowej nie zawiera „użyj 'original_db”. Mimo że określiłem przywracanie do nowej bazy danych „mysql new_db <dump.sql”, plik zrzutu sql miał to i nadpisał moją aktywną bazę danych. Nie jestem pewien, czy istnieje opcja, aby zmusić ją do użycia określonej bazy danych i zignorować „use 'original_db” w pliku sql
Shaakir

7
@Joe, tak, jeśli masz spację między „-p” a „hasłem”, to znaczy, że „hasło” to nazwa bazy danych. Możesz też wpisać „-p” bez hasła, a po naciśnięciu Enter pojawi się monit o podanie hasła.
NotJay

764

Powszechnym zastosowaniem mysqldump jest tworzenie kopii zapasowej całej bazy danych:

shell> mysqldump db_name > backup-file.sql

Możesz załadować plik zrzutu z powrotem na serwer w następujący sposób:

UNIX

shell> mysql db_name < backup-file.sql

To samo w wierszu polecenia systemu Windows :

mysql -p -u [user] [database] < backup-file.sql

PowerShell

C:\> cmd.exe /c "mysql -u root -p db_name < backup-file.sql"

Wiersz polecenia MySQL

mysql> use db_name;
mysql> source backup-file.sql;

@Mike Czy próbujesz uruchomić go w mysql>wierszu poleceń? Zamiast tego powinieneś użyć powłoki.
vladkras

Jak korzystać z Shell? Korzystam z mysql5.6 na Windows Server 2008
Jaylen,

Używając Windows PowerShell, wpisując MySQL nazwa_db <plik.sql Występuje następujący błąd: operator „<” jest zarezerwowany dla przyszłych zastosowań
Jaylen

31
Zachowaj ostrożność przy użyciu>, aby przekierować wyjście mysqldump do pliku, szczególnie jeśli chcesz kontrolować kodowanie. Zamiast tego prawdopodobnie chcesz użyć parametru --result-file, aby kodowanie nie było kontrolowane przez powłokę / system operacyjny.
Bernard Chen,

1
Zgadza się, ale ... dlaczego po prostu nie uruchomić mysqlprosto z Powershell?
Charles Wood,

328

Jeśli chodzi o czas importowania dużych plików: co najważniejsze, zajmuje to więcej czasu, ponieważ domyślnym ustawieniem MySQL jest autocommit = true. Musisz to wyłączyć przed zaimportowaniem pliku, a następnie sprawdzić, jak import działa jak klejnot.

Musisz tylko wykonać następujące czynności:

mysql> use db_name;

mysql> SET autocommit=0 ; source the_sql_file.sql ; COMMIT ;

5
Czy można to zrobić w jednym wierszu polecenia w komendzie mysql używanej do importowania?
Volomike,

Najlepsza odpowiedź inho. To było sourcepolecenie, które zapomniałem. Większość z nas chce, aby to zrobić, a my rejestrowane jako samodzielny polecenia wśród innych poleceń, a nie standardowego logowania> inject> wylogowania oneliner w górze google SERPs.
davidkonrad,

19
Zgadzam się, że to najlepsza odpowiedź . Ta autocommit=0porcja zrobiła świat różnicy pod względem prędkości.
aexl

2
czy autocommit=0będzie działać na większych plikach? jak plik 8 GB sql.
nowicjusz

3
Nie zawsze konieczne jest wyłączenie autocommit. Warto sprawdzić zrzut bazy danych w edytorze, może już zacząć SET autocommit=0;.
hashchange

127

Spośród wszystkich odpowiedzi na powyższy problem jest najlepszy:

 mysql> use db_name;
 mysql> source file_name.sql;

powyższe powiadomienie nie powiodło się w przypadku błędu, że db już istnieje, ale wydaje się, że to działa
luky

74

Możemy użyć tego polecenia, aby zaimportować SQL z wiersza poleceń:

mysql -u username -p password db_name < file.sql

Na przykład, jeśli nazwa użytkownika to rooti hasło to password. I masz nazwę bazy danych jako, banka plik SQL to bank.sql. Następnie po prostu zrób tak:

mysql -u root -p password bank < bank.sql

Pamiętaj, gdzie jest twój plik SQL. Jeśli plik SQL znajduje się w Desktopfolderze / katalogu, przejdź do katalogu pulpitu i wprowadź następującą komendę:

~ ? cd Desktop
~/Desktop ? mysql -u root -p password bank < bank.sql

A jeśli jesteś w Projectkatalogu, a plik SQL znajduje się w Desktopkatalogu. Jeśli chcesz uzyskać do niego dostęp z Projectkatalogu, możesz to zrobić w następujący sposób:

~/Project ? mysql -u root -p password bank < ~/Desktop/bank.sql

22
Nie powinno być przestrzenią pomiędzy -pipassword
Ejaz

Jap. To by nie działało. Prawidłowe byłobymysql -u root -p"password" bank < bank.sql
Armin

4
dlaczego po prostu nie możesz odpowiedzieć w jednym wierszu? mysql -u username -ppassword db_name < file.sql
Naveed,

6
podczas gdy jest to całkowicie niezwiązane z tym pytaniem / odpowiedzią, kiedy pracujesz z nietrywialnymi bazami danych, wolisz NIE wprowadzać hasła do tego samego polecenia zwykłym tekstem. Brak podania hasła jako części polecenia spowoduje wyświetlenie monitu o podanie hasła, które można bezpiecznie wprowadzić
asgs

3
Zwłaszcza z powodu.bash_history
Neila Chowdhury

64

Najprostszym sposobem na zaimportowanie do schematu:

Zaloguj się do mysql i wydaj poniższe polecenia wzmianki.

mysql> use your_db_name;

mysql> source /opt/file.sql;

5
Działa to bez polecenia „use” dla zrzutów z wielopoziomową bazą danych
Hayden Thring

1
Próbowałem zaimportować zrzut z bazy danych o innej nazwie, ale o tej samej strukturze, prawidłowa odpowiedź wybrana przez autora nie zadziałała, utworzono nową bazę danych nazwaną na podstawie bazy danych w pliku zrzutu. Ta odpowiedź tutaj zrobiła, co chciałem, dzięki człowieku
Wuelber Castillo

1
świetny! dokładnie to, czego szukałem!
Siergiej Zahharenko,

2
monitoruje to również wykonanie skryptu, znacznie lepiej niż inne odpowiedzi
sprawdź

61

Jeśli masz już bazę danych, użyj następujących danych, aby zaimportować plik dumplub sql:

mysql -u username -p database_name < file.sql

jeśli nie musisz tworzyć odpowiedniej bazy danych (pustej) w MySQL, dla tego pierwszego zaloguj się do MySQLkonsoli, uruchamiając następującą komendę w terminalu lub w cmd

mysql -u userName -p;

Po wyświetleniu monitu podaj hasło.

Następnie utwórz bazę danych i użyj jej:

mysql>create database yourDatabaseName;
mysql>use yourDatabaseName;

Następnie importować sqllub dumpplik do bazy danych z

mysql> source pathToYourSQLFile;

Uwaga: jeśli twój terminal nie znajduje się w miejscu, w którym istnieje plik dumplub sql, użyj ścieżki względnej powyżej.


Twoja odpowiedź zawierała gruntowne rozwiązanie dla początkujących MySQL, takich jak ja: 1.Utwórz bazę danych, jeśli nie istnieje. 2.Wskaż plik źródłowy na utworzoną bazę danych, aby zaimportować dane / metadane.
Sumanth Lazarus

60
  1. Otwórz wiersz poleceń MySQL
  2. Wpisz ścieżkę do katalogu bin mysql i naciśnij Enter
  3. Wklej plik SQL w binfolderze serwera mysql.
  4. Utwórz bazę danych w MySQL.
  5. Użyj tej konkretnej bazy danych, w której chcesz zaimportować plik SQL.
  6. Wpisz source databasefilename.sqliEnter
  7. Twój plik SQL został pomyślnie przesłany.

2
wpisz ścieżkę do katalogu bin mysql i naciśnij
Ramesh Pareek

46

Rozwiązanie, które działało dla mnie, znajduje się poniżej:

Use your_database_name;
SOURCE path_to_db_sql_file_on_your_local;

Działa to dla mnie za pomocą klienta wiersza poleceń MySQL, po umieszczeniu mojego pliku SQL w odpowiednim eksploratorze okien w katalogu / bin. Dzięki
klewis,

3
Trochę wolno, ale nie zatrzymuje się pomiędzy nimi i nie mówi, że serwer MySQL zniknął.
Jaskaran Singh,

39

Aby zrzucić bazę danych do pliku SQL, użyj następującego polecenia.

mysqldump -u username -p database_name > database_name.sql

Aby zaimportować plik SQL do bazy danych (upewnij się, że znajdujesz się w tym samym katalogu co plik SQL lub podaj pełną ścieżkę do pliku):

mysql -u username -p database_name < database_name.sql

37

Przejdź do katalogu, w którym znajduje się plik wykonywalny MySQL. -uw celu podania nazwy użytkownika i -ppytania o hasło:

C:\xampp\mysql\bin>mysql -u username -ppassword databasename < C:\file.sql

5
Myślę, że byłoby to bardziej pomocne dla PO i dalszych pytań, kiedy dodasz wyjaśnienie do swoich zamiarów.
Reporter

Działa to tylko wtedy, gdy w zmiennych środowiskowych systemu Windows jest zdefiniowany plik mysql.exe. Jeśli nie, wpisz całą ścieżkę do pliku mysql.exe. Twoja składnia jest nieprawidłowa. Np .: „d: \ wamp \ bin \ mysql \ mysql5.8.8 \ bin \ mysql.exe -u NAZWA UŻYTKOWNIKA -p DB_NAME <NAZWA PLIKU.SQL” Więcej informacji tutaj: wpy.me/en/blog/…
wappy

31

Myślę, że warto wspomnieć, że można również załadować skompresowany plik skompresowany gzip za pomocą zcatponiższego przykładu:

zcat database_file.sql.gz | mysql -u username -p -h localhost database_name

28

Aby zaimportować pojedynczą bazę danych, użyj następującego polecenia.

mysql -u username -p password dbname < dump.sql

Aby zaimportować wiele zrzutów bazy danych, użyj następującego polecenia.

mysql -u username -p password < dump.sql


17

Aby zaimportować wiele plików SQL jednocześnie, użyj tego:

# Unix-based solution
for i in *.sql;do mysql -u root -pPassword DataBase < $i;done

Do prostego importowania:

# Unix-based solution
mysql -u root -pPassword DataBase < data.sql

Dla WAMP :

#mysqlVersion replace with your own version
C:\wamp\bin\mysql\mysqlVersion\bin\mysql.exe -u root -pPassword DataBase < data.sql

W przypadku XAMPP:

C:\xampp\mysql\bin\mysql -u root -pPassword DataBase < data.sql

16

Nie trzeba podawać nazwy bazy danych w wierszu poleceń, jeśli plik .sql zawiera CREATE DATABASE IF NOT EXISTS db_nameiUSE db_name instrukcje.

Upewnij się tylko, że łączysz się z użytkownikiem, który ma uprawnienia do tworzenia bazy danych, jeśli baza danych wymieniona w pliku .sql nie istnieje.


14

Zaimportuj bazę danych

  1. Idź do napędu:

    command: d:
  2. Logowanie do MySQL

    command: c:\xampp\mysql\bin\mysql -u root -p
  3. Poprosi o pwd. Wpisz to:

    pwd
  4. Wybierz bazę danych

    use DbName;
  5. Podaj nazwę pliku

    \.DbName.sql

11

Przejdź do katalogu, w którym masz MySQL.

 c:\mysql\bin\> mysql -u username -p password database_name <
 filename.sql

Aby również zrzucić wszystkie bazy danych, użyj -all-databasesopcji i nie trzeba już określać nazwy baz danych.

mysqldump -u username -ppassword all-databases > dump.sql

Możesz też użyć do tego niektórych klientów GUI, takich jak SQLyog.


11

Posługiwać się:

mysql -u root -p password -D database_name << import.sql

Skorzystaj z pomocy MySQL, aby uzyskać szczegółowe informacje - mysql --help.

Myślę, że będą to przydatne opcje w naszym kontekście:

[~]$ mysql --help
mysql  Ver 14.14 Distrib 5.7.20, for osx10.12 (x86_64) using  EditLine wrapper
Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
Usage: mysql [OPTIONS] [database]
  -?, --help          Display this help and exit.
  -I, --help          Synonym for -?
  --bind-address=name IP address to bind to.
  -D, --database=name Database to use.
  --delimiter=name    Delimiter to be used.
  --default-character-set=name Set the default character set.
  -f, --force         Continue even if we get an SQL error.
  -p, --password[=name] Password to use when connecting to server.
  -h, --host=name     Connect to host.
  -P, --port=#        Port number to use for connection or 0 for default to, in order of preference, my.cnf, $MYSQL_TCP_PORT, /etc/services, built-in default (3306).
  --protocol=name     The protocol to use for connection (tcp, socket, pipe,
  -s, --silent        Be more silent. Print results with a tab as separator, each row on new line.
  -v, --verbose       Write more. (-v -v -v gives the table output format).
  -V, --version       Output version information and exit.
  -w, --wait          Wait and retry if connection is down.

Co jest fajne, jeśli importujemy dużą bazę danych i nie mamy paska postępu. Użyj Pipe Viewer i zobacz przesyłanie danych przez potok

Dla Maca, brew install pv

Dla Debiana / Ubuntu apt-get install pv.

W przypadku innych zapoznaj się z pv - Przeglądarka rur

pv import.sql | mysql -u root -p password -D database_name

1.45GiB 1:50:07 [339.0KiB/s]   [=============>      ] 14% ETA 11:09:36
1.46GiB 1:50:14 [ 246KiB/s]     [=============>      ] 14% ETA 11:09:15
1.47GiB 1:53:00 [ 385KiB/s]     [=============>      ] 14% ETA 11:05:36

Dla Centos:yum install pv
Jonny


9

Podczas gdy większość odpowiedzi tutaj tylko wspomina o prostym poleceniu

mysql -u użytkownik_bazy_danych -p [nazwa_bazy_danych] <plik_bazy_danych.sql

dzisiaj dość często bazy danych i tabele mają utf8-sortowanie, w którym to polecenie nie jest wystarczające. Posiadanie utf8-sortowania w eksportowanych tabelach wymaga użycia tego polecenia:

mysql -u użytkownik_bazy_danych -p - domyślny-zestaw-znaków = utf8 [nazwa_bazy danych] <plik_bazy_danych.sql

Surley działa to również w przypadku innych zestawów znaków, jak pokazać odpowiednią notację można zobaczyć tutaj:

https://dev.mysql.com/doc/refman/5.7/en/show-collation.html

W jednym komentarzu wspomniano również, że jeśli baza danych nigdy nie istnieje, najpierw należy utworzyć pustą bazę danych. W niektórych przypadkach może to być właściwe, ale zależy od pliku eksportu. Jeśli eksportowany plik zawiera już polecenie utworzenia bazy danych, bazy danych nigdy nie trzeba tworzyć w oddzielnym kroku, co może nawet spowodować błąd podczas importowania. Dlatego podczas importu wskazane jest, aby najpierw zajrzeć do pliku, aby dowiedzieć się, które polecenia są tam zawarte, podczas eksportowania wskazane są ustawienia, szczególnie jeśli plik jest bardzo duży i trudny do odczytania w edytorze.

Jest jeszcze więcej parametrów dla polecenia, które są wymienione i wyjaśnione tutaj:

https://dev.mysql.com/doc/refman/5.7/en/mysql-command-options.html

Jeśli używasz innej wersji bazy danych, rozważ również wyszukanie odpowiedniej wersji instrukcji. Wspomniane linki odnoszą się do MySQL w wersji 5.7.


9

Aby wyeksportować bazę danych:

mysqldump -u username -p database_name > file.sql

Aby zaimportować bazę danych:

mysql -u username -p database_name < file.sql

8

Następujące polecenie działa dla mnie z wiersza polecenia (cmd) w systemie Windows 7 na WAMP .

d:/wamp/bin/mysql/mysql5.6.17/bin/mysql.exe -u root -p db_name < database.sql


7

Pomyślałem, że może być przydatny dla tych, którzy używają Mac OS X :

/Applications/xampp/xamppfiles/bin/mysql -u root -p database < database.sql

Wymienić xamppz mamplub innych serwerów internetowych.


6

Czasami ważny jest również zdefiniowany port oraz adres IP tej bazy danych ...

mysql -u user -p user -h <Server IP> -P<port> (DBNAME) < DB.sql 

6

Zaimportuj do bazy danych:

mysql -u nazwa użytkownika -p nazwa_bazy_danych </ ścieżka pliku / nazwa_pliku.sql

Eksportuj z bazy danych:

mysqldump -u nazwa użytkownika -p nazwa_bazy_danych> / ścieżka pliku / nazwa_pliku.sql

Po tych poleceniach pojawi się monit o podanie hasła MySQL.


5

W celu wykonania kopii zapasowej utwórz plik BAT i uruchom ten plik BAT przy użyciu Harmonogramu zadań . Wykonanie kopii zapasowej bazy danych; po prostu skopiuj poniższy wiersz i wklej do Notatnika, a następnie zapisz plik .bat i uruchom go w systemie.

@echo off
for /f "tokens=1" %%i in ('date /t') do set DATE_DOW=%%i
for /f "tokens=2" %%i in ('date /t') do set DATE_DAY=%%i
for /f %%i in ('echo %date_day:/=-%') do set DATE_DAY=%%i
for /f %%i in ('time /t') do set DATE_TIME=%%i
for /f %%i in ('echo %date_time::=-%') do set DATE_TIME=%%i

"C:\Program Files\MySQL\mysql server 5.5\bin\mysqldump" -u username -ppassword mysql>C:/%DATE_DAY%_%DATE_TIME%_database.sql

5

Poniższe kroki pomagają w wgraniu file.sqldo bazy danych MySQL.

Krok 1: Prześlij file.sql.zipdo dowolnego katalogu i rozpakuj tam
Uwaga : sudo apt-get install unzip : sudo apt-get unzip file.sql.zip
Krok 2: Teraz przejdź do tego katalogu. Przykład:cd /var/www/html

Krok 3: mysql -u username -p database-name < file.sql
Wprowadź hasło i poczekaj na zakończenie przesyłania.


5

Nadal napotykałem problem polegający na tym, że baza danych nie została utworzona.

Naprawiłem to w ten sposób

mysql -u root -e "CREATE DATABASE db_name"
mysql db_name --force < import_script.sql
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.