我需要使用bash在一行中执行mysql查询。
它应该是这样的:
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;
这可能吗?
答案 0 :(得分:39)
你试过吗
mysql -u root -pmy_password -D DATABASENAME -e "UPDATE `database` SET `field1` = '1' WHERE `id` = 1111;" > output.txt
(可以忽略> output.txt
部分,但查看通过查看文件执行的语句返回的内容会很有用。)
答案 1 :(得分:6)
使用-e
选项:
$ mysql -e "UPDATE ..."
答案 2 :(得分:5)
使用echo
和管道:
echo "UPDATE `database` SET `field1` = '1' WHERE `id` = 1111;" | mysql database --user='root' --password='my-password'
答案 3 :(得分:1)
在命令中编写密码通常是一个坏主意(人们可以通过你的方式阅读它,它可能存储在你的shell历史记录中等),但你可以将你的凭据放在一个文件中。 1}}以文件名开头,使其隐藏,这也更安全。
.
确保只有您可以阅读文件:
# .db.conf
[client]
database=myDatabase
user=myUserName
password=myPassWord
然后像这样调用MySQL:
chmod 600 .db.conf
或:
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
的第一个选项,否则会吓坏它。
答案 4 :(得分:0)
我通常更喜欢Triple,因为它的语法和方法类似于文件重定向。易于回溯历史并修改查询
mysql database --user='root' --password='my-password' <<< "UPDATE `database` SET `field1` = '1' WHERE `id` = 1111"
在bash中称为字符串。您可以在此处找到有关他们的更多信息http://linux.die.net/abs-guide/x15683.html
当您想将字符串传递给命令时,它非常有用。
答案 5 :(得分:0)
如果您在生产环境中运行此操作,最好首先登录mysql shell,以免暴露您的数据库详细信息。
登录shell后,为什么不使用prepared.sql文件?
mysql -u user -p
接下来,输入您的用户密码
现在您已登录到shell,您可以从此处安全地运行命令:
的MySQL&GT;使用DBNAME MySQL的&GT; SOURCE file.sql
这是我在数据库的命令行上操作的方式,以便我的密码不会出现在日志中。