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?
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.)
Utilisez l'option -e
:
$ mysql -e "UPDATE ..."
Utilisez echo
et un tuyau:
echo "UPDATE `database` SET `field1` = '1' WHERE `id` = 1111;" | mysql database --user='root' --password='my-password'
É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.
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.
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.