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?
Jaylen
źródło
7
możliwy duplikat pliku zrzutu MYSQL przywracania z wierszem poleceń
Bill Karwin
2
możliwy duplikat stackoverflow.com/questions/11407349/…
AZinkey
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ć.

bansi
źródło
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;
Vladkras
źródło
@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 ;
Paresh Behede
źródło
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;
Manoj Kumar
źródło
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
Amrit Dhungana
źródło
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;
Ammad
źródło
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.

Kasun Siyambalapitiya
źródło
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.
użytkownik4412947
źródło
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;
Shiks
źródło
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
Adeleke Akinade
źródło
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
Tanmay Patel
źródło
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
Francesco Casula
źródło
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
Leopathu
źródło
20
mysql --user=[user] --password=[password] [database] < news_ml_all.sql
użytkownik3546602
źródło
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
Abdul Rehman Janjua
źródło
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.

Reuben
źródło
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
Pritam Chaudhari
źródło
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.

Sathish D.
źródło
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
Siva Praveen
źródło
Dla Centos:yum install pv
Jonny
10

Dodaj --forceopcję :

mysql -u username -p database_name --force < file.sql
ktaria
źródło
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.

David
źródło
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
użytkownik777388
źródło
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
zwycięzca
źródło
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.

Giri
źródło
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 
JohnSharath
źródło
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.

NeeruKSingh
źródło
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
użytkownik3728517
źródło
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.

Ramesh Sinha
źródło
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
David Silva Smith
źródło