¿Cómo importo un archivo SQL usando la línea de comando en MySQL?

2036

Tengo un .sqlarchivo con una exportación de phpMyAdmin. Quiero importarlo a un servidor diferente usando la línea de comando.

Tengo una instalación de Windows Server 2008 R2. Coloqué el .sqlarchivo en la unidad C y probé este comando

database_name < file.sql

No está trabajando. Recibo errores de sintaxis.

  • ¿Cómo puedo importar este archivo sin problemas?
  • ¿Necesito crear una base de datos primero?
Jaylen
fuente
77
posible duplicado de Restore MYSQL Dump File with Command Line
Bill Karwin
2
posible duplicado de stackoverflow.com/questions/11407349/…
AZinkey
8
¿Qué pasa con estos tipos duplicados? De hecho, esta es una pregunta útil con su propio propósito
Valentino Pereira
@ValentinoPereira, ¿has verificado las fechas de las preguntas originales antes de determinar chicos duplicados?
AZinkey
¿Puedes compartir un ejemplo reproducible? database < file.sqlno me parece ningún comando, y si ve algunos errores de sintaxis, compártalos
Nico Haase

Respuestas:

3775

Tratar:

mysql -u username -p database_name < file.sql

Verifique las opciones de MySQL .

Nota-1: es mejor utilizar la ruta completa del archivo SQL file.sql.

Nota-2: Use -Ry --triggerspara mantener las rutinas y disparadores de la base de datos original. No se copian por defecto.

Nota-3 Puede que tenga que crear la base de datos (vacía) de mysql si aún no existe y el SQL exportado no contiene CREATE DATABASE(exportado con --no-create-dbu -nopción), antes de poder importarlo.

bansi
fuente
2
Cuando ejecuto el archivo desde un programa como Toad, no recibo ningún error, pero cuando lo ejecuto desde la línea de comandos recibo el error que mencioné
Jaylen
110
Tenga en cuenta que sí, debe crear la base de datos (vacía) de mysql si aún no existe, antes de poder importarla.
Skippy le Grand Gourou
17
Sí, recuerde crear una base de datos vacía (si la base de datos no existe previamente), desde la consola de MySQL así:CREATE DATABASE db-name;
Qasim
3
Asegúrese de verificar que el archivo de respaldo no tenga "use 'original_db'". Aunque especifiqué restaurar a la nueva base de datos "mysql new_db <dump.sql", el archivo de volcado de sql tenía eso y sobrescribió mi base de datos en vivo. No estoy seguro de si hay una opción para forzarlo a usar la base de datos especificada y no tener en cuenta el "uso 'original_db'" en el archivo sql
Shaakir
77
@ Joe, sí, si tiene un espacio entre '-p' y 'contraseña', cree que 'contraseña' es el nombre de la base de datos. Alternativamente, puede escribir '-p' sin su contraseña y luego se le pedirá una contraseña cuando presione enter.
NoJay
765

Un uso común de mysqldump es para hacer una copia de seguridad de una base de datos completa:

shell> mysqldump db_name > backup-file.sql

Puede volver a cargar el archivo de volcado en el servidor de esta manera:

UNIX

shell> mysql db_name < backup-file.sql

Lo mismo en el símbolo del sistema de Windows :

mysql -p -u [user] [database] < backup-file.sql

Potencia Shell

C:\> cmd.exe /c "mysql -u root -p db_name < backup-file.sql"

Línea de comando MySQL

mysql> use db_name;
mysql> source backup-file.sql;
vladkras
fuente
@ Mike ¿Estás intentando iniciarlo en la mysql>línea de comandos? Deberías usar shell en su lugar.
vladkras
¿Cómo uso Shell? Estoy usando mysql5.6 en Windows Server 2008
Jaylen
Utilizando Windows PowerShell escribiendo MySQL db_name <file.sql obtengo el siguiente error: el operador '<' está reservado para uso futuro
Jaylen
31
Tenga cuidado al usar> para redirigir la salida de mysqldump a un archivo, especialmente si desea controlar la codificación. En su lugar, probablemente desee utilizar el parámetro --result-file para que la codificación no esté controlada por el shell / OS.
Bernard Chen el
1
Correcto, pero ... ¿por qué no correr mysqldirectamente desde Powershell?
Charles Wood
330

En cuanto al tiempo necesario para importar archivos grandes: lo más importante, lleva más tiempo porque la configuración predeterminada de MySQL es autocommit = true . Debe configurarlo antes de importar su archivo y luego comprobar cómo funciona la importación como una gema.

Solo necesita hacer lo siguiente:

mysql> use db_name;

mysql> SET autocommit=0 ; source the_sql_file.sql ; COMMIT ;
Paresh Behede
fuente
55
¿Hay alguna manera de hacerlo en una sola línea de comando en el comando mysql utilizado para importar?
Volomike
La mejor respuesta inho. Fue la sourceorden que he olvidado. La mayoría de nosotros queremos hacer esto mientras nos estamos sesión como comandos independiente entre otros comandos, no el inicio de sesión estándar> inyectar> cierre de sesión oneliner en la parte superior de Google SERPs.
davidkonrad
19
Estoy de acuerdo en que esta es la mejor respuesta . La autocommit=0porción hizo un mundo de diferencia en términos de velocidad.
aexl
2
¿ autocommit=0Funcionará en archivos más grandes? como un archivo sql de 8 gb.
novato
3
No siempre es necesario apagar autocommit. Vale la pena verificar el volcado de la base de datos en un editor, ya podría comenzar SET autocommit=0;.
hashchange del
127

Entre todas las respuestas, para el problema anterior, esta es la mejor:

 mysql> use db_name;
 mysql> source file_name.sql;
Manoj Kumar
fuente
el aviso anterior falló en el error que db ya existe pero parece que funciona
luky
74

Podemos usar este comando para importar SQL desde la línea de comandos:

mysql -u username -p password db_name < file.sql

Por ejemplo, si el nombre de usuario es rooty la contraseña es password. Y tiene un nombre de base de datos como banky el archivo SQL es bank.sql. Entonces, simplemente haz esto:

mysql -u root -p password bank < bank.sql

Recuerda dónde está tu archivo SQL. Si su archivo SQL está en la Desktopcarpeta / directorio, vaya al directorio de escritorio e ingrese el comando de esta manera:

~ ? cd Desktop
~/Desktop ? mysql -u root -p password bank < bank.sql

Y si está en el Projectdirectorio y su archivo SQL está en el Desktopdirectorio. Si desea acceder desde el Projectdirectorio, puede hacer lo siguiente:

~/Project ? mysql -u root -p password bank < ~/Desktop/bank.sql
Amrit Dhungana
fuente
22
No debería haber un espacio entre -pypassword
Ejaz
Jap Esto no funcionaria. Correcto seríamysql -u root -p"password" bank < bank.sql
Armin
44
¿Por qué simplemente no puedes responder en una línea? mysql -u username -ppassword db_name < file.sql
Naveed
66
Si bien esto no tiene ninguna relación con esta pregunta / respuesta, cuando trabaje con bases de datos no triviales, prefiera NO ingresar la contraseña en el mismo comando en texto sin formato. Si no especifica la contraseña como parte del comando, se le solicitará una contraseña que puede ingresar de forma segura
solicita el
3
Especialmente por.bash_history
Neil Chowdhury
64

La forma más fácil de importar a su esquema:

Inicie sesión en mysql y emita los siguientes comandos de mención.

mysql> use your_db_name;

mysql> source /opt/file.sql;
Estoy enojado
fuente
55
Esto funcionará sin el comando 'use' para volcados con db multilpe
Hayden Thring
1
Intenté importar un volcado de una base de datos con un nombre diferente pero con la misma estructura, la respuesta correcta elegida por el autor no funcionó, creó una nueva base de datos con el nombre de la base de datos en el archivo de volcado. Esta respuesta aquí hizo lo que quería, gracias hombre
Wuelber Castillo
1
¡estupendo! exactamente lo que estaba buscando!
Sergei Zahharenko
2
esto también supervisa la ejecución del script, mucho mejor que las otras respuestas
Refex
61

Si ya tiene la base de datos, use lo siguiente para importar dumpel sqlarchivo o :

mysql -u username -p database_name < file.sql

si no necesita crear la base de datos relevante (vacía) en MySQL, para eso primero inicie sesión en la MySQLconsola ejecutando el siguiente comando en la terminal o en cmd

mysql -u userName -p;

Y cuando se le solicite, proporcione la contraseña.

A continuación, cree una base de datos y úsela:

mysql>create database yourDatabaseName;
mysql>use yourDatabaseName;

Luego importe el sqlo el dumparchivo a la base de datos desde

mysql> source pathToYourSQLFile;

Nota: si su terminal no está en la ubicación donde existe el archivo dumpo sql, use la ruta relativa arriba.

Kasun Siyambalapitiya
fuente
Su respuesta tenía una solución básica para principiantes de MySQL como yo: 1.cree la base de datos, si no existe. 2.Apunte el archivo fuente a la base de datos creada para importar datos / metadatos.
Sumanth Lazarus
60
  1. Abra la línea de comando de MySQL
  2. Escriba la ruta de su directorio bin de mysql y presione Enter
  3. Pegue su archivo SQL dentro del bin carpeta del servidor mysql.
  4. Crea una base de datos en MySQL.
  5. Use esa base de datos en particular donde desea importar el archivo SQL.
  6. Tipo source databasefilename.sqlyEnter
  7. Su archivo SQL se cargó correctamente.
usuario4412947
fuente
2
escriba la ruta de su directorio bin de mysql y presione
Ramesh Pareek
46

A continuación, una solución que funcionó para mí:

Use your_database_name;
SOURCE path_to_db_sql_file_on_your_local;
Shiks
fuente
Esto funcionó para mí usando MySQL Command Line Client, después de colocar mi archivo sql en el explorador de ventanas de vista de directorio / bin adecuado. Gracias
klewis
3
Poco lento pero no se detiene en el medio y no digas que el servidor MySQL se ha ido.
Jaskaran Singh
39

Para volcar una base de datos en un archivo SQL, use el siguiente comando.

mysqldump -u username -p database_name > database_name.sql

Para importar un archivo SQL a una base de datos (asegúrese de estar en el mismo directorio que el archivo SQL o proporcione la ruta completa al archivo), haga lo siguiente:

mysql -u username -p database_name < database_name.sql
Adeleke Akinade
fuente
37

Vaya al directorio donde tiene el ejecutable MySQL. -upara nombre de usuario y -ppara solicitar la contraseña:

C:\xampp\mysql\bin>mysql -u username -ppassword databasename < C:\file.sql
Tanmay Patel
fuente
55
Creo que sería más útil para el OP y otras preguntas, cuando agrega alguna explicación a su intención.
Reportero del
Eso funcionaría solo si tiene mysql.exe definido en las variables de entorno de Windows. De lo contrario, debe escribir toda la ruta al archivo mysql.exe. Y tu sintaxis está mal. Por ejemplo: "d: \ wamp \ bin \ mysql \ mysql5.5.8 \ bin \ mysql.exe -u YOUR_USERNAME -p DB_NAME <FILENAME.SQL" Más información aquí: wpy.me/en/blog/…
wappy
31

Creo que vale la pena mencionar que también puede cargar un archivo comprimido (comprimido) con el zcatque se muestra a continuación:

zcat database_file.sql.gz | mysql -u username -p -h localhost database_name
Francesco Casula
fuente
28

Para importar una sola base de datos, use el siguiente comando.

mysql -u username -p password dbname < dump.sql

Para importar varios volcados de la base de datos, use el siguiente comando.

mysql -u username -p password < dump.sql
Leopathu
fuente
20
mysql --user=[user] --password=[password] [database] < news_ml_all.sql
usuario3546602
fuente
17

Para importar varios archivos SQL a la vez, use esto:

# Unix-based solution
for i in *.sql;do mysql -u root -pPassword DataBase < $i;done

Para importación simple:

# Unix-based solution
mysql -u root -pPassword DataBase < data.sql

Para WAMP :

#mysqlVersion replace with your own version
C:\wamp\bin\mysql\mysqlVersion\bin\mysql.exe -u root -pPassword DataBase < data.sql

Para XAMPP:

C:\xampp\mysql\bin\mysql -u root -pPassword DataBase < data.sql
Abdul Rehman Janjua
fuente
16

No necesita especificar el nombre de la base de datos en la línea de comando si el archivo .sql contiene CREATE DATABASE IF NOT EXISTS db_nameyUSE db_name declaraciones.

Solo asegúrese de conectarse con un usuario que tenga los permisos para crear la base de datos, si la base de datos mencionada en el archivo .sql no existe.

Rubén
fuente
14

Importar una base de datos

  1. Ve a conducir:

    command: d:
  2. Inicio de sesión MySQL

    command: c:\xampp\mysql\bin\mysql -u root -p
  3. Se le pedirá pwd. Ingresarlo:

    pwd
  4. Selecciona la base de datos

    use DbName;
  5. Proporcione el nombre del archivo

    \.DbName.sql
Pritam Chaudhari
fuente
11

Vaya al directorio donde tiene MySQL.

 c:\mysql\bin\> mysql -u username -p password database_name <
 filename.sql

También para volcar todas las bases de datos, use la -all-databasesopción, y ya no es necesario especificar el nombre de las bases de datos.

mysqldump -u username -ppassword all-databases > dump.sql

O puede usar algunos clientes GUI como SQLyog para hacer esto.

Sathish D
fuente
11

Utilizar:

mysql -u root -p password -D database_name << import.sql

Use la ayuda de MySQL para más detalles mysql --help.

Creo que estas serán opciones útiles en nuestro contexto:

[~]$ mysql --help
mysql  Ver 14.14 Distrib 5.7.20, for osx10.12 (x86_64) using  EditLine wrapper
Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
Usage: mysql [OPTIONS] [database]
  -?, --help          Display this help and exit.
  -I, --help          Synonym for -?
  --bind-address=name IP address to bind to.
  -D, --database=name Database to use.
  --delimiter=name    Delimiter to be used.
  --default-character-set=name Set the default character set.
  -f, --force         Continue even if we get an SQL error.
  -p, --password[=name] Password to use when connecting to server.
  -h, --host=name     Connect to host.
  -P, --port=#        Port number to use for connection or 0 for default to, in order of preference, my.cnf, $MYSQL_TCP_PORT, /etc/services, built-in default (3306).
  --protocol=name     The protocol to use for connection (tcp, socket, pipe,
  -s, --silent        Be more silent. Print results with a tab as separator, each row on new line.
  -v, --verbose       Write more. (-v -v -v gives the table output format).
  -V, --version       Output version information and exit.
  -w, --wait          Wait and retry if connection is down.

Lo que es divertido, si estamos importando una gran base de datos y no tenemos una barra de progreso. Use Pipe Viewer y vea la transferencia de datos a través de la tubería

Para Mac, brew install pv

Para Debian / Ubuntu, apt-get install pv.

Para otros, consulte pv - Pipe Viewer

pv import.sql | mysql -u root -p password -D database_name

1.45GiB 1:50:07 [339.0KiB/s]   [=============>      ] 14% ETA 11:09:36
1.46GiB 1:50:14 [ 246KiB/s]     [=============>      ] 14% ETA 11:09:15
1.47GiB 1:53:00 [ 385KiB/s]     [=============>      ] 14% ETA 11:05:36
Siva Praveen
fuente
Para Centos:yum install pv
Jonny
9

Si bien la mayoría de las respuestas aquí solo mencionan el comando simple

mysql -u database_user -p [nombre_bd] <database_file.sql

hoy en día es bastante común que las bases de datos y las tablas tengan una clasificación utf8 donde este comando no es suficiente. Tener utlación de colación en las tablas exportadas se requiere para utilizar este comando:

mysql -u database_user -p --default-character-set = utf8 [db_name] <database_file.sql

Surley también funciona para otros charsets, aquí se puede ver cómo mostrar la notación correcta:

https://dev.mysql.com/doc/refman/5.7/en/show-collation.html

Un comentario mencionó también que si una base de datos nunca existe, primero se debe crear una base de datos vacía. Esto puede ser correcto en algunos casos, pero depende del archivo de exportación. Si el archivo exportado ya incluye el comando para crear la base de datos, la base de datos nunca debe crearse en un paso separado, lo que incluso podría causar un error al importar. Por lo tanto, en la importación, es recomendable echar un vistazo primero en el archivo para saber qué comandos se incluyen allí, en la exportación es recomendable tener en cuenta la configuración, especialmente si el archivo es muy grande y difícil de leer en un editor.

Todavía hay más parámetros para el comando que se enumeran y explican aquí:

https://dev.mysql.com/doc/refman/5.7/en/mysql-command-options.html

Si utiliza otra versión de base de datos, considere buscar también la versión correspondiente del manual. Los enlaces mencionados se refieren a MySQL versión 5.7.

David
fuente
9

Para exportar una base de datos:

mysqldump -u username -p database_name > file.sql

Para importar una base de datos:

mysql -u username -p database_name < file.sql
usuario777388
fuente
8

El siguiente comando funciona para mí desde la línea de comandos (cmd) en Windows 7 en WAMP .

d:/wamp/bin/mysql/mysql5.6.17/bin/mysql.exe -u root -p db_name < database.sql
Víctor
fuente
7

Pensé que podría ser útil para aquellos que usan Mac OS X :

/Applications/xampp/xamppfiles/bin/mysql -u root -p database < database.sql

Reemplazar xamppcon mampu otros servidores web.

Giri
fuente
6

A veces, el puerto definido y la dirección IP del servidor de esa base de datos también son importantes ...

mysql -u user -p user -h <Server IP> -P<port> (DBNAME) < DB.sql 
JohnSharath
fuente
6

Importar a la base de datos:

mysql -u nombre de usuario -p nombre_base_datos </ ruta de archivo / nombre_archivo.sql

Exportar desde la base de datos:

mysqldump -u username -p nombre_base_datos> / ruta de archivo / nombre_archivo.sql

Después de estos comandos, un mensaje le pedirá su contraseña de MySQL.

NeeruKSingh
fuente
5

Para fines de copia de seguridad, cree un archivo BAT y ejecute este archivo BAT utilizando el Programador de tareas . Hará una copia de seguridad de la base de datos; simplemente copie la siguiente línea y péguela en el Bloc de notas y luego guarde el archivo .bat y ejecútelo en su sistema.

@echo off
for /f "tokens=1" %%i in ('date /t') do set DATE_DOW=%%i
for /f "tokens=2" %%i in ('date /t') do set DATE_DAY=%%i
for /f %%i in ('echo %date_day:/=-%') do set DATE_DAY=%%i
for /f %%i in ('time /t') do set DATE_TIME=%%i
for /f %%i in ('echo %date_time::=-%') do set DATE_TIME=%%i

"C:\Program Files\MySQL\mysql server 5.5\bin\mysqldump" -u username -ppassword mysql>C:/%DATE_DAY%_%DATE_TIME%_database.sql
usuario3728517
fuente
5

Los siguientes pasos ayudan a subir file.sqla la base de datos MySQL.

Paso 1: Subir file.sql.zipa cualquier directorio y descomprimir existe
Nota : sudo apt-get install unzip : sudo apt-get unzip file.sql.zip
Paso 2: Ahora vaya a dicho directorio. Ejemplo:cd /var/www/html

Paso 3: mysql -u username -p database-name < file.sql
Ingrese la contraseña y espere hasta que se complete la carga.

Ramesh Sinha
fuente
5

Seguí encontrándome con el problema donde no se creó la base de datos.

Lo arreglé así

mysql -u root -e "CREATE DATABASE db_name"
mysql db_name --force < import_script.sql
David Silva Smith
fuente