¿Cómo cargo un archivo sql.gz en mi base de datos? (importador)

151

Estoy tratando de importar un archivo SQL comprimido a mysql directamente. ¿Es este el camino correcto?

mysql -uroot -ppassword mydb > myfile.sql.gz
Alex
fuente
14
Incluso ignorando el lado gzip de la pregunta, su flecha apunta hacia el lado equivocado ...
Matt Fletcher

Respuestas:

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

>escribirá la salida del mysqlcomando stdouten el archivo myfile.sql.gzque probablemente no sea lo que desea. Además, este comando le pedirá la contraseña del usuario "root" de MySQL.

joschi
fuente
15
Como buena práctica de seguridad, pondría mi contraseña en la línea de comando, dejaría que mysql la solicite.
Prof. Moriarty
99
O incluso mejor: cree ~/.my.cnfcon las credenciales. ;)
joschi
55
Como @Prof. Moriarty explica que puede modificar el comando para no usar la contraseña a través de zcat /path/to/file.sql.gz | mysql -u 'root' -p your_database. Sabrá que el último parámetro es la base de datos que desea utilizar, no su contraseña.
bafromca
66
Para corregir ligeramente el comentario de @ Prof.Moriarty, una buena práctica de seguridad sería no poner mi contraseña en la línea de comando (donde se almacenará en el historial o se verá por encima del hombro), y dejar que MySQL lo solicite. El indicador -p solo hará que MySQL solicite la contraseña en un mensaje.
George
44
+1 por algo que deja comprimido el volcado de la maldita base de datos
Dmitri DB
82

Para mostrar una barra de progreso al importar un archivo sql.gz, descargue pvy use lo siguiente:

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

En CentOS / RHEL, puede instalar pv con yum install pv.

En Debian / Ubuntu apt-get install pv.

En MAC, brew install pv

Banjer
fuente
2
pvparece estar también en los repositorios de Ubuntu (al menos en 12.04 LTS lo es), pero nuevamente debes hacer eso sudo apt-get install pvpara obtenerlo. Gracias Banjer, ¡esto es perfecto para grandes importaciones de bases de datos!
toon81
Tuve que ejecutar pv mydump.sql.gz | gunzip | mysql -u root my_database_name. Eso fue porque estaba importando tablas y no tengo una contraseña establecida para mi usuario root
Cristiano Mendonça,
En MAC,brew install pv
marque el
54

La forma más sencilla es descomprimir el archivo de la base de datos antes de importar. También como lo menciona @Prof. Moriarty no deberías especificar la contraseña en el comando (se te pedirá la contraseña). Este comando tomado de webcheatsheet descomprimirá e importará la base de datos de una vez:

gunzip < myfile.sql.gz | mysql -u root -p mydb
icc97
fuente
1
Además, mydb debe crearse antes de importar. Esto no crea el db para ti.
Siddhartha
Encontré que mi tubería gunzipen un archivo comprimido de 10 GB hizo que mi importación se congelara. No estoy seguro de si eso se debe a limitaciones de memoria o algo así, pero me equivocaría al hacer un paso a la vez en el futuro.
Ryan Tuck el
@RyanTuck Eso está empujando los límites de este tipo de procesos :)
icc97
@Siddhartha Eso depende del archivo de volcado sql. A veces incluyen crear declaraciones de bases de datos.
rooby
@rooby eso tiene sentido.
Siddhartha
5

En macOS, usé esto:

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

Ingrese su contraseña, y listo!

Qasim
fuente
4

Compruebe también si hay alguna instrucción USE en el archivo SQL. Especificar la base de datos en la línea de comando no garantiza que los datos terminen allí si se especifica un destino diferente dentro del archivo SQL.

ikso
fuente
2
Sólo tiene que extender el comando de esta manera: pv mydump.sql.gz | gunzip | mysql -u root -p your_database. La respuesta aceptada utiliza este enfoque.
bafromca
1

Para los archivos comprimidos de bzip2 (.sql.bz2), use:

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

O

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

para ver la barra de progreso

TimSparrow
fuente
0

Puedes usar la -c, --stdout, --to-stdoutopción de gunzipcomando

por ejemplo:

gunzip -c file.sql.gz | mysql -u root -p database
Ali Jazayeri
fuente