如何从命令行通过mysql运行一个查询?

我希望能够在脚本任务中在远程服务器上运行单个查询。

例如,直觉上,我会想象它是这样的:

mysql -uroot -p -hslavedb.mydomain.com mydb_production "select * from users;"
173963 次浏览
echo "select * from users;" | mysql -uroot -p -hslavedb.mydomain.com mydb_production
mysql -u <user> -p -e 'select * from schema.table'

(注意使用单引号而不是双引号,以避免shell将*扩展为文件名)

mysql -uroot -p -hslavedb.mydomain.com mydb_production -e "select * from users;"

从用法打印输出:

< p > -e, --execute=name < br > 执行命令退出。(禁用--force和历史文件)

下面是你如何用一个很酷的贝壳技巧来做到这一点:

mysql -uroot -p -hslavedb.mydomain.com mydb_production <<< 'select * from users'

'<<<'指示shell将后面的内容作为stdin,类似于echo中的管道。

使用-t标志来启用表格式输出

如果是经常运行的查询,可以将其存储在文件中。然后,任何时候你想运行它:

mysql < thefile

(当然包括所有的登录和数据库标志)

mysql手册页:

   You can execute SQL statements in a script file (batch file) like this:


shell> mysql db_name < script.sql > output.tab

将查询放在script.sql中并运行它。

在这个问题出现的时候,容器化还不是那么流行,下面是如何使用Ansible将单个查询传递到dockerized数据库集群的方法,使用@RC。的回答:

ansible <host | group > -m shell -a "docker exec -it <container_name | container_id> mysql -u<your_user> -p<your_pass> <your_database> -e 'SELECT COUNT(*) FROM my_table;'"

如果不使用Ansible,只需登录到服务器并使用docker exec -it ...部分。

MySQL将发出一个警告,以纯文本传递凭据可能是不安全的,所以要意识到您的风险。