Comment exécuter une seule requête via mysql à partir de la ligne de commande?

157

Je cherche à pouvoir exécuter une seule requête sur un serveur distant dans une tâche scriptée.

Par exemple, intuitivement, j'imagine que ça donnerait quelque chose comme:

mysql -uroot -p -hslavedb.mydomain.com mydb_production "select * from users;"
Matthieu
la source

Réponses:

249
mysql -u <user> -p -e "select * from schema.table"
RC.
la source
3
C: \ Program Files (x86) \ MySQL \ MySQL Server 5.7 \ bin> mysql.exe -u root -p -e "ma requête" ----> ERREUR 1045 (28000): Accès refusé pour l'utilisateur 'root' @ 'localhost' (en utilisant le mot de passe: OUI)
Dr.jacky
2
Cela devrait être le premier résultat d'une recherche sur google (pour "mysql exec sql à partir de la ligne de commande") et non sur l'énorme site mysql!
Guillaume Bois
4
De plus, si vous souhaitez mysql -u <user> -p -B --disable-column-names -e 'select * from schema.table'
supprimer le
2
@tinybyte En supposant que Linux: Insinde double guillemets l'astérisque *est étendu à tous les fichiers du répertoire actuel, alors que cette expansion ne se produit pas par guillemets simples, c'est la raison pour laquelle. Les guillemets doubles fonctionneront pour les requêtes sans l'extension *.
NobbZ
2
@ Dr.jacky Je suis sûr que vous n'en avez plus vraiment besoin, mais pour l'avenir, si votre utilisateur root n'a pas de mot de passe, ne passez pas l'option -p comme vide, ne la passez pas du tout iemysql.exe -u root -e "my query"
solidau
29
mysql -uroot -p -hslavedb.mydomain.com mydb_production -e "select * from users;"

À partir de l'impression d'utilisation:

-e, --execute=name
Exécutez la commande et quittez. (Désactive --forceet fichier d'historique)

John Kugelman
la source
15

voici comment vous pouvez le faire avec une astuce de shell cool:

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

'<<<' demande au shell de prendre tout ce qui le suit comme stdin, similaire au piping de echo.

utilisez l'indicateur -t pour activer la sortie au format table

ʞɔıu
la source
13

S'il s'agit d'une requête que vous exécutez souvent, vous pouvez la stocker dans un fichier. Puis à chaque fois que vous souhaitez l' exécuter :

mysql < thefile

(avec tous les indicateurs de connexion et de base de données bien sûr)

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