Come carico un file sql.gz nel mio database? (Importazione)


151

Sto cercando di importare un file SQL con compressione gzip direttamente in mysql. È questa la via giusta?

mysql -uroot -ppassword mydb > myfile.sql.gz

14
Anche ignorando il lato gzip della domanda, la tua freccia punta nella direzione sbagliata ...
Matt Fletcher,

Risposte:


238
zcat /path/to/file.sql.gz | mysql -u 'root' -p your_database

>scriverà l'output del mysqlcomando stdoutnel file myfile.sql.gzche molto probabilmente non è quello che vuoi. Inoltre, questo comando ti chiederà la password dell'utente "root" di MySQL.


15
Come buona pratica di sicurezza, metterei la mia password sulla riga di comando, lascerei che mysql la chiedesse.
Prof. Moriarty,

9
O ancora meglio: crea ~/.my.cnfcon le credenziali. ;)
joschi,

5
Come @Prof. Moriarty Explans, è possibile modificare il comando per non utilizzare la password tramite zcat /path/to/file.sql.gz | mysql -u 'root' -p your_database. Saprà che l'ultimo parametro è il database che si desidera utilizzare, non la password.
bafromca,

6
Per correggere leggermente il commento di @ Prof.Moriarty, una buona pratica di sicurezza sarebbe quella di non mettere la mia password sulla riga di comando (dove verrà archiviata nella cronologia o vista da sopra la spalla) e lasciare che MySQL la richieda. Il solo -p flag farà sì che MySQL richieda una richiesta di password.
George,

4
+1 per qualcosa che lascia compresso il dump del database maledetto
Dmitri DB

82

Per visualizzare una barra di avanzamento durante l'importazione di un file sql.gz, scaricare pve utilizzare quanto segue:

pv mydump.sql.gz | gunzip | mysql -u root -p

In CentOS / RHEL, è possibile installare pv con yum install pv.

In Debian / Ubuntu apt-get install pv.

In MAC, brew install pv


2
pvsembra essere anche nei repository di Ubuntu (almeno in 12.04 LTS lo è), ma ancora una volta devi farlo sudo apt-get install pvper ottenerlo. Grazie Banjer, questo è perfetto per le importazioni di grandi database!
toon81,

Ho dovuto eseguire pv mydump.sql.gz | gunzip | mysql -u root my_database_name. Questo perché stavo importando tabelle e non ho una password impostata per il mio utente root
Cristiano Mendonça,

In MAC,brew install pv
segna il

54

Il modo più semplice è decomprimere il file del database prima dell'importazione. Anche come menzionato da @Prof. Moriarty non dovresti specificare la password nel comando (ti verrà chiesta la password). Questo comando preso da webcheatsheet decomprimerà e importerà il database in una volta sola:

gunzip < myfile.sql.gz | mysql -u root -p mydb

1
Inoltre, mydb deve essere creato prima dell'importazione. Questo non crea il db per te.
Siddhartha,

ho trovato che le mie tubazioni gunzipsu un file compresso da 10 GB hanno causato il blocco della mia importazione. non sono sicuro che ciò sia dovuto a vincoli di memoria o qualcosa del genere, ma in futuro farei un errore nel fare un passo alla volta.
Ryan Tuck,

@RyanTuck Questo sta spingendo i limiti di questo tipo di processi :)
icc97

@Siddhartha Dipende dal file di dump sql. A volte includono istruzioni per la creazione di database.
Rooby,

@rooby ha senso.
Siddhartha,


5

Su macOS, ho usato questo:

zcat < [Database].sql.gz | mysql -u root -p [Database Name in MySQL]

Inserisci la tua password e voilà!


4

Controlla anche se c'è qualche istruzione USE nel file SQL. La specifica del database dalla riga di comando non garantisce che i dati finiscano lì se viene specificata una destinazione diversa all'interno del file SQL.


2
Hai solo bisogno di estendere il comando in questo modo: pv mydump.sql.gz | gunzip | mysql -u root -p your_database. La risposta accettata utilizza questo approccio.
bafromca,

1

Per i file compressi bzip2 (.sql.bz2), utilizzare:

bzcat <file> | mysql -u <user> -p <database>

O

pv <file> | bunzip2 | mysql -u <user> -p <database>

per vedere la barra di avanzamento.


0

È possibile utilizzare l' -c, --stdout, --to-stdoutopzione di gunzipcomando

per esempio:

gunzip -c file.sql.gz | mysql -u root -p database
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.