¿Cómo ejecutar un script SQL en MySQL?

409

Quiero ejecutar un archivo de texto que contenga consultas SQL, en MySQL.

Traté de correr source /Desktop/test.sqly recibí el error:

mysql>. \ home \ sivakumar \ Desktop \ test.sql ERROR: Error al abrir el archivo '\ home \ sivakumar \ Desktop \ test.sql', error: 2

¿Alguna idea de lo que estoy haciendo mal?

usuario1160432
fuente
básicamente creo que esta debería ser la respuesta aquí: \. /home/sivakumar/Desktop/test.sql
talsibony

Respuestas:

434

Si está en la línea de comando de MySQL mysql>, debe declarar el archivo SQL como source.

mysql> source \home\user\Desktop\test.sql;
Thomas Edwards
fuente
29
Para mysql 5.6.10 en Mac, no se necesitan comillas simples para la ruta del archivo.
ARN
3
para Windows, usar '/' en lugar de '\' funcionó correctamente para mí. Obtuve errores cuando originalmente usé '/'. Esto es lo que funcionó para mí ... fuente C: /Users/macombers/Downloads/midcoast_db.sql;
Zack Macomber
Suelte las citas en ubuntu también (mysql Ver 14.14 debian-linux-gnu (x86_64) usando el envoltorio EditLine)
Siddhartha
1
@kapil ¿Relativo a qué? Estás dentro de MySQL en este punto, así que no hay pariente, me temo.
Thomas Edwards
1
@Sarah Se puede usar \ antes del espacio o envolver el nombre de archivo con ".
Thomas Edwards
166

Tienes muchas opciones:

  • use el cliente de línea de comando MySQL: mysql -h hostname -u user database < path/to/test.sql
  • Instale las herramientas de MySQL GUI y abra su archivo SQL, luego ejecútelo
  • Use phpmysql si la base de datos está disponible a través de su servidor web
Eugen Rieck
fuente
3
¿Qué pasa con la contraseña del usuario (opción -p)?
Amir Katz
@AmirKatz Si bien la contraseña se puede proporcionar con la -popción, esto no se recomienda: otros usuarios en el mismo host pueden usar herramientas del sistema como psleerla en este caso.
Eugen Rieck
1
@EugenRieck -psin argumento solicita que se ingrese la contraseña en la línea siguiente
Bobby Jack
130

puede ejecutar declaraciones mysql que se hayan escrito en un archivo de texto con el siguiente comando:

mysql -u yourusername -p yourpassword yourdatabase < text_file

si su base de datos aún no se ha creado, primero inicie sesión en su mysql usando:

mysql -u yourusername -p yourpassword yourdatabase

entonces:

mysql>CREATE DATABASE a_new_database_name

entonces:

mysql -u yourusername -p yourpassword a_new_database_name < text_file

¡Deberias hacer eso!

Más información aquí: http://dev.mysql.com/doc/refman/5.0/en/mysql-batch-commands.html

Paul Preibisch
fuente
77
en Windows: para la contraseña tuve que usar comillas y NO espacio para que funcione (la contraseña en sí no contenía espacios ni caracteres especiales):mysql -u yourusername -p"yourpassword"
TmTron
1
Si no desea que su contraseña aparezca en la solicitud, creo que el método descrito aquí funcionará: stackoverflow.com/questions/9293042/…
alex9311
59

Mi opción favorita para hacer eso será:

 mysql --user="username" --database="databasename" --password="yourpassword" < "filepath"

Lo uso de esta manera porque cuando lo encadena con "" evita el camino equivocado y los errores con espacios y, y probablemente más problemas con caracteres con los que no me encontré.


Con el comentario de @elcuco, sugiero usar este comando con [espacio] antes, así que le dice a bash que ignore guardarlo en el historial, esto funcionará de manera predeterminada en la mayoría de bash.

en caso de que aún guarde su comando en el historial, consulte las siguientes soluciones:

Ejecute el comando sin mantenerlo en el historial


seguridad adicional editar

En caso de que quiera estar más seguro, puede usar el siguiente comando e ingresar la contraseña en la entrada de la línea de comando:

mysql --user="username" --database="databasename" -p < "filepath"
talsibony
fuente
18
No recomendaría pasar la contraseña a la línea de comando, ya que se guardará en ~ / .bash_history, y otros programas pueden acceder a través de / proc /.
elcuco
Excelente consejo de @elcuco! Además, probablemente use otro indicador después de -p (o que sea el último argumento) para que otro parámetro no se considere erróneamente como la contraseña deseada.
Davernator
Tenga en cuenta que los argumentos de la línea de comandos siguen siendo visibles para otros usuarios. Ejemplo: para i en / proc / * / cmdline; hacer eco $ i; gato $ i; hecho
elcuco
Esto NO es una recomendación al exponer la contraseña de su servidor al historial de la consola
Alexius DIAKOGIANNIS
@AlexiusDiakogiannis, ¿puede darme un ejemplo de cómo puede ver el comando desde el historial cuando lo ejecuta con [espacio] antes del comando?
talsibony
56

Todas las respuestas principales son buenas. Pero en caso de que alguien quiera ejecutar la consulta desde un archivo de texto en un servidor remoto Y guardar los resultados en un archivo (en lugar de mostrarlos en la consola), puede hacer esto:

mysql -u yourusername -p yourpassword yourdatabase < query_file > results_file

Espero que esto ayude a alguien.

Bhushan
fuente
10
Creo que no debería haber espacio entre -py la contraseña
webNeat
Si el propósito de escribir en un archivo es el volcado de datos, supongo que SELECT ... INTO OUTFILE /path/to/file.csves una forma más eficiente. Ver opciones y sintaxis aquí: dev.mysql.com/doc/refman/5.7/en/select-into.html
Anis
20

Indique la ruta del archivo .sql como:

source c:/dump/SQL/file_name.sql;

Ver en la imagen:

Shubham Verma
fuente
¡Gracias una tonelada! esto funciona incluso si su usuario no tiene derechos SUDO y en Amazon RDS remoto
Volatil3
20

Vine aquí buscando esta respuesta también, y esto es lo que encontré que funciona mejor para mí: Tenga en cuenta que estoy usando Ubuntu 16.xx

  1. Acceda a mysql usando:

mysql -u <your_user> - p

  1. En el indicador de mysql, ingrese:

source file_name.sql

Espero que esto ayude.

Zac Smith
fuente
2
En lugar de iniciar la solicitud, incluso podría ser útil combinar los dos pasos en un solo comando:mysql -u<user> -p -e 'source filename.sql'
junix
Gracias @junix! La opción de origen utilizada de esta manera es lo que estaba buscando.
ManuelJE
14
mysql> source C:\Users\admin\Desktop\fn_Split.sql

No especifique comillas simples.

Si el comando anterior no funciona, copie el archivo en la unidad c: e intente nuevamente. Como se muestra abajo,

mysql> source C:\fn_Split.sql
Shankar Kalyankar
fuente
13

Nunca es una buena práctica pasar el argumento de la contraseña directamente desde la línea de comandos, se guarda en el ~/.bash_historyarchivo y se puede acceder desde otras aplicaciones.

Use esto en su lugar:

mysql -u user --host host --port 9999 database_name < /scripts/script.sql -p
Enter password:
Jorge E. Hernández
fuente
10
mysql -uusername -ppassword database-name < file.sql
Мартин Петров
fuente
9

Muy probablemente, solo necesita cambiar la barra diagonal / barra negra: desde

 \home\sivakumar\Desktop\test.sql

a

 /home/sivakumar/Desktop/test.sql

Entonces el comando sería:

source /home/sivakumar/Desktop/test.sql
Ben Lin
fuente
6

use lo siguiente desde el símbolo del sistema mysql :

source \\home\\user\\Desktop\\test.sql;

No use citas. Incluso si la ruta contiene espacio (''), no utilice comillas .

Rajesh Paul
fuente
5

en lugar de redireccionar haría lo siguiente

mysql -h <hostname> -u <username> --password=<password> -D <database> -e 'source <path-to-sql-file>'

Esto ejecutará el archivo path-to-sql-file

DataGuru
fuente
5

Tantas maneras de hacerlo.

From Workbench: File > Run SQL Script -- then follow prompts

From Windows Command Line:
   Option 1: mysql -u usr -p
             mysql> source file_path.sql
   Option 2: mysql -u usr -p '-e source file_path.sql'
   Option 3: mysql -u usr -p < file_path.sql
   Option 4: put multiple 'source' statements inside of file_path.sql (I do this to drop and recreate schemas/databases which requires multiple files to be run)
             mysql -u usr -p < file_path.sql

Si obtiene errores desde la línea de comando, asegúrese de haber ejecutado previamente

cd {!!>>mysqld.exe home directory here<<!!}
mysqld.exe --initialize 

Esto debe ejecutarse desde el directorio mysqld.exe, de ahí el CD.

Espero que esto sea útil y no solo redundante.

Donkey Kong
fuente
3

Como mysql -u yourusername -p yourpassword yourdatabase < text_fileno funcionó en un servidor remoto (EC2 de Amazon) ...

Asegúrese de que la base de datos se cree primero.

Entonces:

mysql --host=localhost --user=your_username --password=your_password your_database_name < pathTofilename.sql
Damir Olejar
fuente
3

Para referencia futura, he encontrado que esto funciona en comparación con los métodos mencionados anteriormente, en Windows en su consola msql:

mysql >>source c://path_to_file//path_to_file//file_name.sql;

Si su unidad raíz no se llama "c", simplemente intercambie con lo que se llama su unidad. Primero intente las barras invertidas, si no funcionan, pruebe la barra diagonal. Si tampoco funcionan, asegúrese de tener su ruta de archivo completa, la extensión .sql en el nombre del archivo, y si su versión insiste en punto y coma, asegúrese de que esté allí e intente nuevamente.

Chad Mx
fuente
0

Tuve este error y probé todos los consejos que pude obtener en vano.

Finalmente, el problema era que mi carpeta tenía un espacio en el nombre de la carpeta que aparecía como una barra diagonal en la ruta de la carpeta, una vez que la encontré y la eliminé, funcionó bien.

usuario3753416
fuente