¿Cómo ejecuta una sola consulta a través de mysql desde la línea de comandos?

157

Estoy buscando poder ejecutar una sola consulta en un servidor remoto en una tarea programada.

Por ejemplo, intuitivamente, me imagino que sería algo así como:

mysql -uroot -p -hslavedb.mydomain.com mydb_production "select * from users;"
Mateo
fuente

Respuestas:

249
mysql -u <user> -p -e "select * from schema.table"
RC.
fuente
3
C: \ Archivos de programa (x86) \ MySQL \ MySQL Server 5.7 \ bin> mysql.exe -u root -p -e "my query" ----> ERROR 1045 (28000): Acceso denegado para el usuario 'root' @ 'localhost' (usando la contraseña: SI)
Dr.jacky
2
¡Este debería ser el primer resultado en una búsqueda en Google (para "mysql exec sql desde la línea de comandos") y no el enorme sitio mysql!
Guillaume Bois
44
Además, si desea eliminar el formato de encabezado y tabla, puede usarlomysql -u <user> -p -B --disable-column-names -e 'select * from schema.table'
dvlcube
2
@tinybyte Suponiendo que Linux: con comillas dobles, el asterisco *se expande a todos los archivos en el directorio actual, mientras que esta expansión no ocurre en comillas simples, esa es la razón. Doublequotes funcionará para consultas sin el *.
NobbZ
2
@ Dr.jacky Estoy seguro de que ya no tiene la necesidad, pero para el futuro, si su usuario root no tiene contraseña, no pase la opción -p como en blanco, simplemente no la pase, es decirmysql.exe -u root -e "my query"
solidau
29
mysql -uroot -p -hslavedb.mydomain.com mydb_production -e "select * from users;"

De la impresión de uso:

-e, --execute=name
Ejecute el comando y salga. (Desactiva --forcey archivo de historial)

John Kugelman
fuente
15

Así es como puedes hacerlo con un truco genial:

mysql -uroot -p -hslavedb.mydomain.com mydb_production <<< 'select * from users'

'<<<' le indica al shell que tome lo que sigue como stdin, similar a una tubería desde el eco.

use el indicador -t para habilitar la salida en formato de tabla

ʞɔıu
fuente
13

Si es una consulta que ejecuta con frecuencia, puede almacenarla en un archivo. Entonces, cada vez que quieras ejecutarlo :

mysql < thefile

(con todos los indicadores de inicio de sesión y base de datos, por supuesto)

dnagirl
fuente
6
echo "select * from users;" | mysql -uroot -p -hslavedb.mydomain.com mydb_production
oct
fuente