Zrzut MySQL według zapytania


220

Czy można to zrobić mysqldumppojedynczo SQL query?

Mam na myśli zrzucenie całej bazy danych, podobnie jak phpmyadminpodczas eksportowania doSQL

Odpowiedzi:


285

nie mysqldump, ale mysql cli ...

mysql -e "select * from myTable" -u myuser -pxxxxxxxxx mydatabase

możesz przekierować go do pliku, jeśli chcesz:

mysql -e "select * from myTable" -u myuser -pxxxxxxxx mydatabase > mydumpfile.txt

Aktualizacja: Oryginalny post zapytał, czy może zrzucić z bazy danych przez zapytanie. To, o co prosił i co miał na myśli, było inne. Naprawdę chciał po prostu przemyśleć wszystkie stoły.

mysqldump --tables myTable --where="id < 1000"

22
jak przywrócić ten zrzucony plik txt?
Vivek S

3
dla tych, którzy wypróbowują podejście mysql -e. Musiałem trochę dostosować skrypt, aby działał dla mnie. Ten wymaga podania hasła SQL podczas uruchamiania. mysql -e "wybierz * z tabeli WHERE query = 'asdasd'" -u root -p --database = DBNAME> text.txt
RichardW11

13
możesz po prostu utworzyć nową tabelę dla zapytania (CREATE TABLE SELECT), a następnie zrzucić tę tabelę za pomocą mysqldump. W ten sposób możesz łatwo przywrócić go później.
quano,

1
kto chce użyć mysqldump i przywrócić plik, zajrzyj tutaj: stackoverflow.com/a/2431936/411786
Syco

2
Aby zaimportować dane wyeksportowane za pomocą mysql -e z opcją -B w celu wyświetlania jako rozdzielane tabulatorami, uruchom mysqlimport --ignore-lines = 1 --fields-terminated-by = '\ t'. Zobacz: stackoverflow.com/a/17071108/1676044
Kevin Borders

259

To powinno działać

mysqldump --databases X --tables Y --where="1 limit 1000000"

4
Lepszym przykładem może być coś, co faktycznie wygląda jak klauzula where, takie jak --where = "myColumn <1000" - pierwszy milion wierszy każdej tabeli wydaje się dziwną rzeczą do żądania;)
ijw

@ijw Jeśli chcesz zrobić łatwą do ponownego utworzenia kopię zapasową tabeli, prawdopodobnie nie potrzebujesz klauzuli where dla niczego poza limitami.
Thomas Ahle,

3
@Sagotharan: Cóż, to nie jest zapytanie. Prawdopodobnie dlatego.
Wyścigi lekkości na orbicie

79
!!OSTRZEŻENIE!! mysqldump dodaje polecenie „DROP TABLE” u góry eksportowanego pliku. Oznacza to, że jeśli wykonasz częściowy eksport, a następnie go ponownie zaimportujesz, stracisz wszystko inne. Cóż, zrobiłem.
Tamlyn

34
Tak, aby nie usuwać wszystkich danych w tabeli podczas przywracania z zapisanego pliku danych, upewnij się, że dodałeś --no-create-infoopcję. Zobacz moją odpowiedź na przykład.
Gary

71

Możesz zrzucić zapytanie jako csv w następujący sposób:

SELECT * from myTable
INTO OUTFILE '/tmp/querydump.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'

8
Co jeśli chcę zrzucić wiele tabel.
SIFE

10
Spowoduje to utworzenie pliku na komputerze, na którym działa baza danych MySQL. Tak więc, jeśli wykonujesz zapytania ze zdalnej konsoli, ta metoda kończy się niepowodzeniem. Jeśli możesz to zrobić również ze zdalnej konsoli, daj mi o tym znać.
dknight

2
gdzie to zapisać plik?
Techlord,

1
@dknight Zakładam, że masz na myśli konsolę zdalną za pośrednictwem konsoli terminali, w którym to przypadku możesz pobrać plik zrzutu scppo zakończeniu połączenia. oto przykład. scp user@remote-server.com:/tmp/querydump.csv ~/local.csv
Łukasza

Wydaje się być niepewny: # 1290 - Serwer MySQL działa z opcją --secure-file-priv, więc nie może wykonać tej instrukcji
mikep

64

Zrzuć tabelę za pomocą zapytania where:

mysqldump mydatabase mytable --where="mycolumn = myvalue" --no-create-info > data.sql

Zrzuć cały stół:

mysqldump mydatabase mytable > data.sql

Uwagi:

  • Zamień mydatabase,mytable i gdzie sprawozdanie z żądanych wartości.
  • Domyślnie mysqldumpdołącza DROP TABLEi CREATE TABLEinstrukcje w swoich wynikach. Dlatego jeśli nie chcesz usunąć wszystkich danych w tabeli podczas przywracania z zapisanego pliku danych, upewnij się, że używasz--no-create-info opcji.
  • Może być konieczne dodanie odpowiedniego -h,-u oraz -popcje do przykładu powyżej poleceń w celu określenia żądanego hosta bazy danych, użytkownika i hasło, odpowiednio.

38

Możesz użyć opcji --where na mysqldump, aby uzyskać dane wyjściowe, na które czekasz:

mysqldump -u root -p test t1 --where="1=1 limit 100" > arquivo.sql

Maksymalnie 100 wierszy z test.t1 zostanie zrzuconych z tabeli bazy danych.

Pozdrawiam, WB


6

Jeśli chcesz wyeksportować ostatnią liczbę rekordów do pliku, możesz uruchomić następujące czynności:

mysqldump -u user -p -h localhost --where "1=1 ORDER BY id DESC LIMIT 100" database table > export_file.sql

Powyższe spowoduje zapisanie ostatnich 100 rekordów w pliku export_file.sql, przy założeniu, że tabela, z której eksportujesz, ma kolumnę z automatycznie zwiększanym numerem.

Musisz zmienić wartości użytkownika, hosta lokalnego, bazy danych i tabeli. Opcjonalnie możesz zmienić kolumnę id i nazwę pliku eksportu.


5

MySQL Workbench ma tę funkcję również w GUI. Po prostu uruchom zapytanie, kliknij ikonę Zapisz obok Eksportuj / Importuj:

wprowadź opis zdjęcia tutaj

Następnie wybierz z listy „Instrukcje SQL INSERT (* .sql)”.

wprowadź opis zdjęcia tutaj

Wpisz nazwę, kliknij zapisz, potwierdź nazwę tabeli, a otrzymasz plik zrzutu.


3

Łącząc wiele z powyższego, to mój prawdziwy praktyczny przykład, wybierając rekordy na podstawie zarówno metrumid i znacznika czasu. Potrzebowałem tego polecenia od lat. Wykonuje się bardzo szybko.

mysqldump -uuser -ppassword main_dbo trHourly --where="MeterID =5406 AND TIMESTAMP<'2014-10-13 05:00:00'" --no-create-info --skip-extended-insert | grep  '^INSERT' > 5406.sql

-1

mysql Eksportuj wiersz polecenia wyników zapytania :

mysql -h120.26.133.63 -umiyadb -proot123 miya -e "select * from user where id=1" > mydumpfile.txt

działa dla mnie w Ubuntu, polecenie: mysql -h localhost -u root -p nazwa_bazy_pliku -e "wybierz * z użytkowników gdzie id = 1; wybierz * z sztabów gdzie id = 1" --xml> / var / www / html / project / backups / db.xml
Ramesh
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.