Dump di MySQL per query


220

È possibile farlo mysqldumpda solo SQL query?

Voglio dire scaricare l' intero database, come phpmyadminquando esportiSQL

Risposte:


285

non mysqldump, ma mysql cli ...

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

puoi reindirizzarlo su un file se vuoi:

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

Aggiornamento: post originale chiesto se poteva eseguire il dump dal database tramite query. Ciò che ha chiesto e ciò che intendeva dire era diverso. Voleva davvero solo mysqldump tutti i tavoli.

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

22
come ripristinare questo file txt scaricato?
Vivek S

3
per coloro che provano l'approccio mysql -e. Ho dovuto personalizzare un po 'la sceneggiatura per lavorare con me. Questo richiede l'inserimento della password sql durante l'esecuzione. mysql -e "seleziona * dalla tabella WHERE query = 'asdasd'" -u root -p --database = DBNAME> text.txt
RichardW11

13
potresti semplicemente creare una nuova tabella per la query (CREATE TABLE SELECT), quindi scaricare quella tabella con mysqldump. In questo modo puoi ripristinarlo facilmente in un secondo momento.
quano,

1
per chi desidera utilizzare mysqldump e ripristinare il file, dai un'occhiata qui: stackoverflow.com/a/2431936/411786
Syco

2
Per importare i dati esportati con mysql -e con l'opzione -B per l'output come delimitato da tabulazioni, eseguire mysqlimport --ignore-lines = 1 --fields-terminated-by = '\ t'. Vedi: stackoverflow.com/a/17071108/1676044
Kevin Borders

259

Questo dovrebbe funzionare

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

4
Un esempio migliore potrebbe essere qualcosa che in realtà assomiglia a una clausola where, come --where = "myColumn <1000" - il primo milione di righe di ogni tabella sembra una cosa strana da richiedere;)
ijw

@ijw Se quello che vuoi fare è fare un backup facilmente reinseribile della tua tabella, probabilmente non hai bisogno di una clausola where per nient'altro che limiti.
Thomas Ahle,

3
@Sagotharan: Beh, non è una domanda. Questo è probabilmente il motivo.
Razze di leggerezza in orbita

79
!!AVVERTIMENTO!! mysqldump aggiunge un comando 'DROP TABLE' nella parte superiore del file esportato. Ciò significa che se esegui un'esportazione parziale per poi reimportarla, perderai tutto il resto. Bene, l'ho fatto.
Tamlyn,

34
Sì, per non eliminare tutti i dati nella tabella durante il ripristino dal file di dati salvato, assicurarsi di aggiungere l' --no-create-infoopzione. Vedi la mia risposta per un esempio.
Gary,

71

È possibile scaricare una query come CSV in questo modo:

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

8
E se volessi scaricare più tabelle.
SIFE

10
Questo crea un file sul computer su cui è in esecuzione il database MySQL. Pertanto, se si esegue una query da una console remota, questo metodo ha esito negativo. Se esiste un modo per farlo anche da una console remota, per favore fatemelo sapere.
dknight

2
dove salva il file?
Techlord,

1
@dknight Suppongo che intendi una console remota tramite una console terminale, nel qual caso puoi recuperare il file scaricato scpdopo che la connessione è terminata. ecco un esempio. scp user@remote-server.com:/tmp/querydump.csv ~/local.csv
Luca,

Sembra essere insicuro: # 1290 - Il server MySQL è in esecuzione con l'opzione --secure-file-priv quindi non può eseguire questa affermazione
mikep

64

Dump di una tabella utilizzando una query where:

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

Scarica un intero tavolo:

mysqldump mydatabase mytable > data.sql

Appunti:

  • Sostituire mydatabase, mytablee la cui dichiarazione con i valori desiderati.
  • Per impostazione predefinita, mysqldumpincluderà DROP TABLEe le CREATE TABLEistruzioni nel suo output. Pertanto, se si desidera non eliminare tutti i dati nella tabella durante il ripristino dal file di dati salvato, assicurarsi di utilizzare il--no-create-info opzione.
  • Potrebbe essere necessario aggiungere le opzioni appropriate -h, -ue -p, ai comandi di esempio sopra riportati per specificare rispettivamente l'host, l'utente e la password del database desiderati.

38

Puoi usare l'opzione --where su mysqldump per produrre un output che stai aspettando:

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

Verranno scaricati dalla tabella del database al massimo 100 righe da test.t1.

Saluti, WB


6

Se si desidera esportare le ultime n quantità di record in un file, è possibile eseguire quanto segue:

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

Quanto sopra salverà gli ultimi 100 record in export_file.sql, supponendo che la tabella da cui stai esportando abbia una colonna ID con incremento automatico.

Dovrai modificare i valori di utente, localhost, database e tabella. È possibile modificare facoltativamente la colonna ID ed esportare il nome del file.


5

MySQL Workbench ha anche questa funzione ordinatamente nella GUI. Basta eseguire una query, fare clic sull'icona Salva accanto a Esporta / Importa:

inserisci qui la descrizione dell'immagine

Quindi selezionare "Istruzioni SQL INSERT (* .sql)" nell'elenco.

inserisci qui la descrizione dell'immagine

Inserisci un nome, fai clic su Salva, conferma il nome della tabella e avrai il tuo file di dump.


3

La combinazione di quanto sopra è il mio vero esempio pratico, selezionando i record basati sia su meterid che su timestamp. Ho bisogno di questo comando per anni. Esegue molto rapidamente.

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 Esporta la riga di comando dei risultati della query :

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

sta funzionando per me in Ubuntu, comando: mysql -h localhost -u root -p dbname -e "seleziona * dagli utenti dove id = 1; seleziona * dagli staff dove id = 1" --xml> / var / www / html / project / backups / db.xml
Ramesh
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.