2012-02-27 9 views
16

Potrzebuję wykonać kwerendę mysql w jednym wierszu za pomocą bash.Powłoka - zapytanie jednym wierszem

To powinno być coś takiego:

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

Ale zamiast < query.file chciałaby użyć surowego kwerendy tak:

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

to możliwe?

+1

nie, '<' służy do wskazania pliku wejściowego w bashu –

+0

Na marginesie: Jestem zwolennikiem posiadania tej nazwy użytkownika i hasła w pliku '.my.cnf' lub niestandardowym, używając' ' --defaults-file =/path/to/file.cnf' Cleaner, wielokrotnego użytku, itp. – Wrikken

Odpowiedz

32

Próbowałaś

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

(> output.txt część może być ignorowane, ale to będzie użyteczne, aby zobaczyć co zostało zwrócone przez instrukcji wykonywanych przez patrząc w pliku.)

7

Użyj opcji -e:

$ mysql -e "UPDATE ..." 
+0

To powinno wyglądać tak? 'mysql -e" MY_QUERY "--user = root --password = database-password'? – Cyclone

4

Użyj echo i rury:

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

+1, tak lub "mysql -e ..." – Koerr

0

Zapisywanie hasła w poleceniu jest generalnie złym pomysłem (ludzie mogą go odczytać przez ramię, prawdopodobnie zostanie on zapisany w historii powłoki itp.), Ale możesz umieścić swoje poświadczenia w pliku. Nadanie plikowi nazwy zaczynającej się od . powoduje, że jest on ukryty, co również jest bardziej bezpieczne.

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

Upewnij się, że tylko można odczytać pliku:

chmod 600 .db.conf 

następnie zadzwonić MySQL tak:

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

czyli

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

Zauważ, że --defaults-extra-file potrzeby do być pierwszą opcją dostarczony do mysql inaczej wkurza.

0

Normalnie wolę Triple mniej niż jego składnia i podejście jest podobne do przekierowania pliku. Łatwo wracamy do historii i modyfikujemy zapytanie

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

Nazywa się tutaj Struny w bash. Więcej informacji na ich temat można znaleźć tutaj: http://linux.die.net/abs-guide/x15683.html

Przydaje się, gdy chcemy przeciągnąć łańcuch do poleceń.

0

Jeśli używasz tego w środowisku produkcyjnym, lepiej najpierw zalogować się do powłoki mysql, aby nie ujawniać szczegółów db.

Po zalogowaniu się w powłoce, dlaczego nie wystarczy użyć pliku prepared.sql?

mysql -u użytkownik -p

Następnie wprowadź hasło użytkownika

Teraz jesteś zalogowany do muszli i można bezpiecznie uruchamiać polecenia stąd:

mysql> Zastosowanie DBNAME mysql> SOURCE file.sql

Tak działam w linii poleceń z moimi bazami danych, aby mój p asswords nie pojawiają się w logach.

Powiązane problemy