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;
Возможно ли это?
Ответы
Ответ 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
Вот как я работаю в командной строке с моими базами данных, чтобы мои пароли не появлялись в журналах.