it-swarm.com.de

Shell - einzeilige Abfrage

Ich muss eine mysql-Abfrage in einer Zeile mit bash ausführen.

Es sollte ungefähr so ​​sein:

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

Anstelle von < query.file möchte es jedoch eine unformatierte Abfrage wie folgt verwenden:

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

Ist das möglich?

19
Cyclone

Hast du versucht 

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

(Der > output.txt-Teil kann ignoriert werden, es ist jedoch nützlich zu sehen, was von der durch die Datei ausgeführten Anweisung zurückgegeben wurde.)

38
Nishant

Verwenden Sie die -e-Option:

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

Verwenden Sie echo und eine Pipe:

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

Das Schreiben eines Kennworts in einen Befehl ist im Allgemeinen eine schlechte Idee (die Benutzer können es über Ihre Schulter lesen, es wird wahrscheinlich in Ihrem Shell-Verlauf gespeichert usw.), aber Sie können Ihre Anmeldeinformationen in einer Datei speichern. Wenn Sie der Datei einen Namen geben, der mit . beginnt, wird sie ausgeblendet, was auch sicherer ist.

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

Stellen Sie sicher, dass nur Sie die Datei lesen können:

chmod 600 .db.conf

Dann rufen Sie MySQL wie folgt an:

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

oder:

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

Beachten Sie, dass --defaults-extra-file die erste Option sein muss, die an mysql übergeben wird.

1
Ian Mackinnon

Wenn Sie dies in einer Produktionsumgebung ausführen, sollten Sie sich zuerst bei der mysql-Shell anmelden, um Ihre Datenbankdaten nicht anzuzeigen.

Wenn Sie sich bei Shell angemeldet haben, verwenden Sie einfach eine Preply.sql-Datei.

mySQL -U Benutzer -p

Geben Sie anschließend Ihr Benutzerpasswort ein

Jetzt sind Sie bei Shell angemeldet und können von hier aus Befehle sicher ausführen:

mysql> benutze DBNAME mysql> SOURCE file.sql

So arbeite ich in der Befehlszeile mit meinen Datenbanken, damit meine Kennwörter nicht in den Protokollen angezeigt werden.

0
HappyCoder

Normalerweise ziehe ich Triple weniger vor, da die Syntax und der Ansatz der Dateiumleitung ähneln. Einfach in die Historie zurückkehren und die Abfrage ändern

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

Es heißt Here Strings in bash. Weitere Informationen finden Sie hier http://linux.die.net/abs-guide/x15683.html

Dies ist nützlich, wenn Sie die Zeichenfolge an Befehle übergeben möchten.

0
zainengineer