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

Jakub Arnold
źródło

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"
Zak
źródło
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"
Thomas Ahle
źródło
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'
Chłopak
źródło
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 [email protected]:/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.
Gary
źródło
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

Wagner Bianchi
źródło
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.

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

MPelletier
źródło
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
zzapper
źródło
-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
lanni654321
źródło
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