web-dev-qa-db-fra.com

Shell - requête d'une ligne

J'ai besoin d'exécuter une requête mysql sur une ligne en utilisant bash.

Cela devrait être quelque chose comme ça:

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

Mais au lieu du < query.file, il souhaiterait utiliser une requête brute comme celle-ci:

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

Est-ce possible?

19
Cyclone

As-tu essayé 

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

(la partie > output.txt peut être ignorée mais il sera utile de voir ce qui a été renvoyé par l'instruction exécutée en regardant le fichier.)

38
Nishant

Utilisez l'option -e:

$ mysql -e "UPDATE ..."
6
user647772

Utilisez echo et un tuyau:

echo "UPDATE `database` SET `field1` = '1' WHERE `id` = 1111;" | mysql database --user='root' --password='my-password'
5
Some programmer dude

Écrire votre mot de passe dans une commande est généralement une mauvaise idée (les gens peuvent le lire par-dessus votre épaule, il est probablement stocké dans votre historique Shell, etc.), mais vous pouvez mettre vos informations d'identification dans un fichier. Donner au fichier un nom commençant par . le rend caché, ce qui est également plus sécurisé.

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

Assurez-vous que vous seul pouvez lire le fichier:

chmod 600 .db.conf

Ensuite, appelez MySQL comme suit:

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

ou:

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

Notez que --defaults-extra-file doit être la première option fournie à mysql sinon elle s’effraie.

1
Ian Mackinnon

Si vous utilisez ceci sur un environnement de production, il serait préférable de vous connecter d'abord au shell mysql afin de ne pas exposer les détails de votre base de données.

Une fois connecté à Shell, pourquoi ne pas utiliser un fichier prepare.sql?

mysql -u utilisateur -p

Ensuite, entrez votre mot de passe utilisateur

Vous êtes maintenant connecté à Shell et vous pouvez exécuter des commandes en toute sécurité à partir d'ici:

mysql> use DBNAME mysql> SOURCE fichier.sql

C’est ainsi que j’opère en ligne de commande avec mes bases de données afin que mes mots de passe ne figurent pas dans les journaux.

0
HappyCoder

Je préfère normalement moins Triple que sa syntaxe et son approche est similaire à la redirection de fichier. Facile à remonter dans l'historique et modifier la requête

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

Il s'appelle Here Strings in bash. Vous pouvez en savoir plus à leur sujet ici http://linux.die.net/abs-guide/x15683.html

C'est utile lorsque vous souhaitez diriger une chaîne vers des commandes.

0
zainengineer