2012-02-27 20 views
16

Necesito ejecutar una consulta mysql en una línea usando bash.Shell - consulta de una línea

Debe ser algo como esto:

mysql database --user='root' --password='my-password' < query.file 

Pero en lugar de la < query.file que le gustaría utilizar una consulta en bruto así:

mysql database --user='root' --password='my-password' < UPDATE `database` SET `field1` = '1' WHERE `id` = 1111; 

¿Es posible?

+1

no, '<' use para indicar una entrada de archivo en bash –

+0

En una nota al margen: soy un proponente de tener ese nombre de usuario y contraseña en un archivo '.my.cnf' o uno personalizado, usando' --defaults-file =/path/to/file.cnf' Cleaner, reutilizable, etc. – Wrikken

Respuesta

32

¿Usted intentó

mysql -u root -pmy_password -D DATABASENAME -e "UPDATE `database` SET `field1` = '1' WHERE `id` = 1111;" > output.txt 

(la parte > output.txt pueden ser ignorados, pero será útil para ver lo que fue devuelto por la sentencia ejecutada por mirar en el archivo.)

7

Utilice la opción -e:

$ mysql -e "UPDATE ..." 
+0

Debería verse así? 'mysql -e" MY_QUERY "--user = root --password = database-password'? – Cyclone

4

Utilice echo y una tubería:

echo "UPDATE `database` SET `field1` = '1' WHERE `id` = 1111;" | mysql database --user='root' --password='my-password' 
+0

+1, sí o 'mysql -e ...' – Koerr

0

Escribir su contraseña en un comando generalmente es una mala idea (la gente puede leerla sobre su hombro, probablemente se almacena en su historial de shell, etc.), pero puede poner sus credenciales en un archivo. Darle un nombre al archivo que comienza con . lo oculta, lo que también es más seguro.

# .db.conf 
[client] 
database=myDatabase 
user=myUserName 
password=myPassWord 

asegurarse de que sólo se puede leer el archivo:

chmod 600 .db.conf 

luego llamar a MySQL, así:

mysql --defaults-extra-file=.db.conf -e "UPDATE database SET field1 = '1' WHERE id = 1111;" 

o:

echo "UPDATE database SET field1 = '1' WHERE id = 1111;" | mysql --defaults-extra-file=.db.conf 

Tenga en cuenta que --defaults-extra-file necesidades de ser la primera opción suministrado a mysql de lo contrario, se asusta.

0

Normalmente prefiero Triple menos porque su sintaxis y enfoque es similar a la redirección de archivos. Es fácil volver atrás en la historia y modificar la consulta

mysql database --user='root' --password='my-password' <<< "UPDATE `database` SET `field1` = '1' WHERE `id` = 1111" 

Se llama Here Strings in bash. Puede encontrar más información sobre ellos aquí http://linux.die.net/abs-guide/x15683.html

Es útil cuando desea conectar cadenas a los comandos.

0

Si está ejecutando esto en un entorno de producción, sería mejor iniciar sesión en el shell mysql primero para no exponer los detalles de su DB.

Una vez que haya iniciado sesión en el shell, ¿por qué no simplemente utiliza un archivo prepared.sql?

mysql -u usuario -p

A continuación, introduzca su contraseña de usuario

Ahora ha iniciado sesión en la cáscara y se puede ejecutar comandos de forma segura desde aquí:

mysql> uso DBNAME mysql> SOURCE archivo.sql

Así es como opero en la línea de comandos con mis bases de datos para que mi p las palabras clave no aparecen en los registros.

Cuestiones relacionadas