Shell - запрос одной строки - программирование
Подтвердить что ты не робот

Shell - запрос одной строки

Мне нужно выполнить запрос 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;

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

4b9b3361

Ответ 1

Вы пробовали

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

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

Ответ 2

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

$ mysql -e "UPDATE ..."

Ответ 3

Используйте echo и канал:

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

Ответ 4

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

# .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, иначе он выйдет из строя.

Ответ 5

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

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

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

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

Ответ 6

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

Как только вы вошли в оболочку, почему бы просто не использовать файл prepare.sql?

mysql -u user -p

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

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

mysql > используйте DBNAME mysql > SOURCE file.sql

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