Jak wyeksportować bazę danych mysql za pomocą wiersza polecenia?

342

Mam bazę danych, która jest dość duża, więc chcę ją wyeksportować za pomocą wiersza polecenia, ale nie wiem jak to zrobić.

Używam WAMP.

Starx
źródło
6
DOS? używasz systemu Windows 98? Czy masz na myśli wiersz poleceń?
jle
Jeśli używasz wampa, powinieneś także mieć phpmyadmina z opcją eksportu
Lars C. Magnusson

Odpowiedzi:

536

Najpierw sprawdź, czy wiersz polecenia rozpoznaje polecenie mysql. Jeśli nie, przejdź do polecenia i wpisz:

set path=c:\wamp\bin\mysql\mysql5.1.36\bin

Następnie użyj tego polecenia, aby wyeksportować bazę danych:

mysqldump -u YourUser -p YourDatabaseName > wantedsqlfile.sql

Zostaniesz poproszony o podanie hasła do bazy danych .

Spowoduje to wyeksportowanie bazy danych do ścieżki, w której aktualnie jesteś, podczas wykonywania tego polecenia

Uwaga: oto kilka szczegółowych instrukcji dotyczących importu i eksportu

Starx
źródło
7
daje błąd „mysqldump: Dostał błąd: 1049: Nieznane hasło do bazy danych podczas wybierania bazy danych”, ale działało, gdy
usunąłem
11
@ AteşDanış Nie ma spacji między -pi thepassword.
Charles Wood,
44
Powinieneś po prostu użyć, -pa następnie zostaniesz poproszony o hasło. W ten sposób można uniknąć konieczności hasła zapisane na przykład w.bash_history
Nuala
7
Dla mnie to polecenie działa: mysqldump -u TwójUżytkownik -p Twoja_bazy_danych> Wantsqlfile.sql (Wpisz polecenie, naciśnij klawisz Enter, a następnie zostanie wprowadzone hasło).
shasi kanth
3
Podanie hasła w wierszu poleceń należy uznać za niepewne.
wappy
112

Po prostu użyj następującego polecenia,

Na eksport:

mysqldump -u [user] -p [db_name] | gzip > [filename_to_compress.sql.gz] 

Do importu:

gunzip < [compressed_filename.sql.gz]  | mysql -u [user] -p[password] [databasename] 

Uwaga: między słowem kluczowym „-p” a hasłem nie ma spacji.

Srinivasan.S
źródło
1
Myślę, że przegapiłeś fakt, że używa WAMP - Windows ... gunzip / gzip nie są dołączone do systemu Windows. Możliwe, że uruchomisz polecenie po zainstalowaniu niektórych rzeczy, ale myślę, że przegapiłeś ten fakt.
Rolf
2
Podanie gzip -9powoduje, że plik wynikowy jest nieco mniejszy, ponieważ stosowana jest maksymalna kompresja.
AntonK,
39

Przede wszystkim otwórz wiersz polecenia, a następnie otwórz katalog bin w cmd (mam nadzieję, że znasz polecenia cmd ) idź do katalogu bin twojego folderu MySql w plikach programu WAMP .

Uruchom polecenie

mysqldump -u db_username -p database_name > path_where_to_save_sql_file

naciśnij enter system wyeksportuje określoną bazę danych i utworzy plik sql do podanej lokalizacji.

mam nadzieję, że je masz :) jeśli masz jakieś pytania, daj mi znać.

Mitesh Vaghela
źródło
Mój przyjacielu, próbowałem trochę wyjaśnić proces. zamiast dawać bezpośrednie polecenie
Mitesh vaghela
38

Możesz użyć poniższego polecenia,

mysqldump --databases --user=root --password your_db_name > export_into_db.sql

a wygenerowany plik będzie dostępny w tym samym katalogu, w którym uruchomiłeś to polecenie.

Możesz znaleźć więcej na oficjalnej referencji dla mysqldump: Importuj eksport MySQL DB

Uwaga : użyj --databaseszamiast, --databaseponieważ ostatni nie jest już obsługiwany.

Cieszyć się :)

Umesh Patil
źródło
4
Dla tych, którzy dostają błąd typu „Odmowa dostępu podczas korzystania z LOCK TABLES”, należy dodać parametr „--single-transaction” do polecenia.
Skyrpex,
Wystąpił błąd, mysqldump: [ERROR] unknown option '--database'ale wyłączenie --databasego zadziałało.
hejdav
@Skyrpex Dzięki, to było rozwiązanie, którego szukałem.
Martijn
22

Przejdź do wiersza polecenia na tej ścieżce,

C:\Program Files (x86)\MySQL\MySQL Server 5.0\bin>

Następnie podaj to polecenie, aby wyeksportować bazę danych ( bez spacji po -p )

mysqldump -u[username] -p[userpassword] yourdatabase > [filepath]wantedsqlfile.sql

użytkownik2484830
źródło
21

Znajdź swoją instancję mysql za pomocą:

which mysql

Jeśli jest to poprawne, wyeksportuj za pomocą następującego (w przeciwnym razie przejdź do instancji mysql w folderze mamp w bin):

mysqldump -u [username] -p [password] [dbname] > filename.sql

A jeśli chcesz go skompresować w tym samym czasie:

mysqldump -u [username] -p [password] [db] | gzip > filename.sql.gz

Następnie możesz przenieść ten plik między serwerami za pomocą:

scp user@xxx.xxx.xxx.xxx:/path_to_your_dump/filename.sql.gz your_detination_path/

(gdzie xxx.xxx.xxx.xxx to adres IP serwera)

A następnie zaimportuj go za pomocą:

gunzip filename.sql.gz | mysql -u [user] -p [password] [database]
Opentuned
źródło
4
Ponownie, W AMP => Windows. który jest poleceniem Linuksa. gunzip / gzip nie są dołączone do systemu Windows - i mogą być niedostępne. scp ... masz rację.
Rolf
Odpowiedź Opentuned jest świetna . Jedyną drobną rzeczą jest usunięcie rzeczywistego passwordz wiersza poleceń: mysqldump -u [nazwa użytkownika] -p [nazwa_bazy]> nazwa_pliku.sql Uniemożliwia to użytkownikom przeszukiwanie historii w poszukiwaniu hasła.
Vincent
1
@Opentuned, Co jest z fetyszem linuxowym?
Pacerier
dla -p [hasło] musi być blisko, np .: mysqldump -u tutorials -p'mypassword' -h 127.0.0.1 database_name > file_backup_database_name_.sql Ostrzeżenie: Użycie hasła w interfejsie wiersza poleceń może być niepewne.
Marwan Salim,
19

Aby wyeksportować również PROCEDURY, FUNKCJE i SPUSTY, dodaj --routinesparametr:

mysqldump -u YourUser -p YourDatabaseName --routines > wantedsqlfile.sql

arcadius
źródło
Przełącznik --routinesrobi różnicę :) Jakieś wskazówki, jak eksportować tylko PROCEDURY, FUNKCJE i TRIGERY? Dla tych, którzy zapomnieli o przełączniku i wyeksportowali „czystą” DB bez „algorytmów” :)
AntonK
BTW, przełącznik --eventsjest potrzebny, aby zrzucić zdarzenia z harmonogramu zdarzeń, a wyzwalacze są zawsze eksportowane, chyba że --skip-triggersokreślono inaczej (zgodnie z 7.4.5.3 Zrzucanie przechowywanych programów )
AntonK
10

Podaj to polecenie, aby wyeksportować bazę danych, będzie ona również zawierać datę

mysqldump -u[username] -p[userpassword] --databases yourdatabase | gzip > /home/pi/database_backup/database_`date '+%m-%d-%Y'`.sql.gz

(bez spacji po -p)

Ossama
źródło
Zauważ, że określenie --databasesspowoduje wstawienie instrukcji jako CREATE DATABASE XYZ;i USE XYZ;, co nie jest przydatne podczas importowania SQL do innej bazy danych o innej nazwie ...
AntonK
8

Zainstalowałem mój serwer wamp na D: dysk, więc musisz przejść do następującej ścieżki z wiersza poleceń ur -> (a jeśli zainstalowałeś ur wamp na c: dysk, po prostu zastąp d: wtih c: tutaj)

D:\>cd wamp
D:\wamp>cd bin
D:\wamp\bin>cd mysql
D:\wamp\bin\mysql>cd mysql5.5.8 (whatever ur verserion will be displayed here use keyboard Tab button and select the currently working mysql version on your server if you have more than one mysql versions)
D:\wamp\bin\mysql\mysql5.5.8>cd bin
D:\wamp\bin\mysql\mysql5.5.8\bin>mysqldump -u root -p password db_name > "d:\backupfile.sql"

tutaj root jest użytkownikiem mojego phpmyadmin hasło jest hasłem dla phpmyadmin, więc jeśli nie ustawiłeś żadnego hasła dla roota, po prostu nic nie wpisuj w tym miejscu, db_name to baza danych (dla której bazy danych masz kopię zapasową), backupfile.sql jest plik, w którym chcesz wykonać kopię zapasową swojej bazy danych, a także możesz zmienić lokalizację pliku kopii zapasowej (d: \ backupfile.sql) z dowolnego innego miejsca na komputerze

Sachin
źródło
Ze wszystkich sposobów, w jakie to znalazłem, ta odpowiedź jest jedyną, która działała dla mnie. Używam MySQL w wersji 5.6, więc ścieżka była następująca ... \ MySQL \ MySQL Server 5.6 \ bin dla wiersza polecenia. Będziesz musiał użyć swojej nazwy użytkownika i hasła administratora MySQL, określone dla konkretnej bazy danych nie będą działać. Dziękuję Sachin. Nawet instrukcje zawarte w podręczniku MySQL dla wersji 5.6 nie działają. Składnia jest tam niekompletna.
Max West
Czy to naprawdę działa z przestrzenią między -pi password?
Davis
7
mysqldump -h [host] -p -u [user] [database name] > filename.sql

Przykład w localhost

mysqldump -h localhost -p -u root cookbook > cookbook.sql
Nanhe Kumar
źródło
4

Problem ze wszystkimi tymi rozwiązaniami (przy użyciu >znaku przekierowującego) polega na tym, że piszesz zrzut ze standardowego wyjścia, co może przerwać kodowanie niektórych znaków w bazie danych.

Jeśli masz problem z kodowaniem znaków. Jak na przykład :

BŁĄD 1064 (42000): Wystąpił błąd w składni SQL; sprawdź instrukcję, która odpowiada twojej wersji serwera MySQL pod kątem właściwej składni do użycia w pobliżu ...

następnie MUSISZ użyć -ropcji, aby zapisać plik.

MySQL

mysqldump -u user -pyour-password-without-space-between-letter-p-and-your-password --default-character-set=utf8 --host $HOST database-name -r dump.sql

Korzystanie z Dockera

docker exec --rm -v $pwd:dump -it mysql:5:7 mysqldump -u user -pyour-password-without-space-between-letter-p-and-your-password --default-character-set=utf8 --host $HOST database-name -r dump/dump.sql

Uwaga: montuje bieżącą ścieżkę jako zrzut wewnątrz instancji.

Znaleźliśmy odpowiedź tutaj

I odwrotnie, nie używaj <do importowania zrzutu do bazy danych, ponownie, twoje znaki inne niż utf8 mogą nie zostać przekazane; ale wolę opcję źródła.

mysql -u user -pYourPasswordYouNowKnowHow --default-character-set=utf8 your-database
mysql> SET names 'utf8'
mysql> SOURCE dump.sql
Colin Claverie
źródło
1

Składnia

(mysqldump.exe full path) -u (user name) -p (password) (database name) > (export database file full path)

Przykład

c:>d:\wamp\bin\mysql\mysql5.6.12\bin\mysqldump.exe -u root -p mydbname > d:\mydb.sql

gdzie d: \ wamp \ bin \ mysql \ mysql5.6.12 \ bin \ mysqldump.exe będzie twoją rzeczywistą ścieżką mysqldump.exe, mydbname to nazwa bazy danych, którą chcesz wyeksportować, a d: \ mydb.sql to ścieżka gdzie chcesz zapisać wyeksportowaną bazę danych.

Shailesh Prajapati
źródło
0

Użyłem serwera Wamp. Próbowałem

c:\wamp\bin\mysql\mysql5.5.8\bin\mysqldump -uroot -p db_name > c:\somefolder\filename.sql

root to moja nazwa użytkownika dla mysql, a jeśli masz jakieś hasło, podaj je za pomocą:

-p[yourpassword]

Mam nadzieję, że to działa.

Aswin k
źródło
- hasło musi być użyte, jeśli chcesz wpisać hasło
Erce
0

W przypadku systemu operacyjnego Windows :

Gdy pojawi się błąd 1064 mysql (42000) podczas próby wykonania polecenia mysqldump , wyjdź z bieżącego terminala. I uruchom polecenie mysqldump.

mysql>exit 
c:\xampp\mysql\bin>mysqldump -uroot -p --databases [database_name] > name_for_export_db.sql
npcoder
źródło
0

Próbowałem zrobić zrzut bazy danych uruchomionej w oknie dokowanym i wymyśliłem poniższe polecenie, aby osiągnąć to samo:

docker exec <container_id/name>/ usr / bin / mysqldump -u <db_username>--password = <db_password> db_name> .sql

Mam nadzieję że to pomoże!

Vikash Kumar Choudhary
źródło
-2

Możesz użyć tego skryptu, aby wyeksportować lub zaimportować dowolną bazę danych z terminala podanego pod tym linkiem: https://github.com/Ridhwanluthra/mysql_import_export_script/blob/master/mysql_import_export_script.sh

echo -e "Welcome to the import/export database utility\n"
echo -e "the default location of mysqldump file is: /opt/lampp/bin/mysqldump\n"
echo -e "the default location of mysql file is: /opt/lampp/bin/mysql\n"
read -p 'Would like you like to change the default location [y/n]: ' location_change
read -p "Please enter your username: " u_name
read -p 'Would you like to import or export a database: [import/export]: ' action
echo

mysqldump_location=/opt/lampp/bin/mysqldump
mysql_location=/opt/lampp/bin/mysql

if [ "$action" == "export" ]; then
    if [ "$location_change" == "y" ]; then
        read -p 'Give the location of mysqldump that you want to use: ' mysqldump_location
        echo
    else
        echo -e "Using default location of mysqldump\n"
    fi
    read -p 'Give the name of database in which you would like to export: ' db_name
    read -p 'Give the complete path of the .sql file in which you would like to export the database: ' sql_file
    $mysqldump_location -u $u_name -p $db_name > $sql_file
elif [ "$action" == "import" ]; then
    if [ "$location_change" == "y" ]; then
        read -p 'Give the location of mysql that you want to use: ' mysql_location
        echo
    else
        echo -e "Using default location of mysql\n"
    fi
    read -p 'Give the complete path of the .sql file you would like to import: ' sql_file
    read -p 'Give the name of database in which to import this file: ' db_name
    $mysql_location -u $u_name -p $db_name < $sql_file
else
    echo "please select a valid command"
fi
Ridhwan Luthra
źródło