Shell - однострочный запрос - PullRequest
       31

Shell - однострочный запрос

19 голосов
/ 27 февраля 2012

Мне нужно выполнить запрос mysql в одну строку, используя bash.

Это должно быть примерно так:

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

Но вместо < query.file он хотел бы использоватьнеобработанный запрос, подобный следующему:

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

Возможно ли это?

Ответы [ 6 ]

42 голосов
/ 27 февраля 2012

Вы пробовали

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

(часть > output.txt можно игнорировать, но будет полезно посмотреть, что было возвращено оператором, выполненным при просмотре файла.)

7 голосов
/ 27 февраля 2012

Используйте параметр -e:

$ mysql -e "UPDATE ..."
5 голосов
/ 27 февраля 2012

Используйте echo и трубу:

echo "UPDATE `database` SET `field1` = '1' WHERE `id` = 1111;" | mysql database --user='root' --password='my-password'
1 голос
/ 09 января 2014

Ввод вашего пароля в команду, как правило, плохая идея (люди могут прочитать его через плечо, он, вероятно, будет сохранен в вашей истории оболочки и т. Д.), Но вы можете поместить свои учетные данные в файл. Если присвоить файлу имя, начинающееся с ., он будет скрыт, что также более безопасно.

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

Убедитесь, что только вы можете прочитать файл:

chmod 600 .db.conf

Затем вызовите MySQL так:

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

или

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

Обратите внимание, что --defaults-extra-file должен быть первым параметром, указанным для mysql, в противном случае он выходит из себя.

0 голосов
/ 21 июля 2015

Если вы запускаете это в производственной среде, было бы лучше сначала войти в оболочку mysql, чтобы не раскрывать детали вашей базы данных.

После входа в оболочку, почему бы просто не использовать подготовленный файл.sql?

mysql -u user -p

Далее введите пароль пользователя

Теперь вы вошли в оболочку и можете безопасно выполнять команды здесь:

mysql> использовать DBNAME mysql> SOURCE file.sql

Вот так я работаю в командной строке со своими базами данных, чтобы мои пароли не появлялись в журналах.

0 голосов
/ 03 сентября 2014

Я обычно предпочитаю Triple меньше, так как его синтаксис и подход похож на перенаправление файлов. Легко вернуться в историю и изменить запрос

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

Это называется Here Strings in bash. Вы можете найти больше о них здесь http://linux.die.net/abs-guide/x15683.html

Это полезно, когда вы хотите передать строку в команды.

...