我希望能够在脚本任务中在远程服务器上运行单个查询。
例如,直觉上,我想象它会是这样的:
mysql -uroot -p -hslavedb.mydomain.com mydb_production "select * from users;"
mysql -u <user> -p -e 'select * from schema.table'
(注意使用单引号而不是双引号,以避免 shell 将 * 扩展为文件名)
mysql -uroot -p -hslavedb.mydomain.com mydb_production -e "select * from users;"
从使用打印输出:
,-e
--execute=name
执行命令并退出。 (禁用和历史文件)--force
以下是如何使用很酷的 shell 技巧来做到这一点:
mysql -uroot -p -hslavedb.mydomain.com mydb_production <<< 'select * from users'
'<<<' instructs the shell to take whatever follows it as stdin, similar to piping from echo.
使用 -t 标志启用表格格式输出
echo "select * from users;" | mysql -uroot -p -hslavedb.mydomain.com mydb_production
在提出问题时,容器化还没有那么流行,这就是如何使用 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 将发出警告,指出以纯文本方式传递凭据可能不安全,因此请注意您的风险。
来自
mysql
手册页:
You can execute SQL statements in a script file (batch file) like this:
shell> mysql db_name < script.sql > output.tab
将查询放入
script.sql
并运行它。
上述许多解决方案都是特定于操作系统的,并且需要多个步骤。最好的解决方案是使用一行命令来创建数据库、选择数据库并导入数据库,通过使用命令行参数
-e
,它代表执行,它允许用户执行应用程序控制台相关的以及数据库管理系统相关命令。
[PATH_TO_MYSQL]\mysql -u YOUR_USER_ID -p -e 'CREATE DATABASE [DATABASE_NAME];USE [DATABASE_NAME];SOURCE [DATABASE_NAME_PATH];'
# USE '/' AS THE PATH SEPARATOR CHARACTER WITHIN THE SOURCE QUERY ON ALL OPERATING SYSTEMS
(e.g.) C:\Program` Files\MySQL\MySQL` Workbench` 8.0\mysql.exe -u root -p -e "CREATE DATABASE Theta_FTP;USE Theta_FTP;SOURCE C:/Users/teodo/Desktop/Theta_FTP.sql;"