在命令行中通过 ssh 在远程机器上运行 MySQL 查询

Posted

技术标签:

【中文标题】在命令行中通过 ssh 在远程机器上运行 MySQL 查询【英文标题】:Run MySQL query on remote machine through ssh in command line 【发布时间】:2013-07-06 20:47:53 【问题描述】:

我正在尝试使用以下命令在远程机器上运行 mysql 查询:

ssh user@192.168.2.26 "mysql -uroot -proot -e \"use test";""

我无法使用那个数据库。

请提出一个有效的命令。

【问题讨论】:

【参考方案1】:

试试这个:

mysql -h host -u root -proot -e "show databases;";

【讨论】:

对于脚本,我会考虑使用 ~/my.cnf 或 MYSQL_PWD 变量 >> 参见 unix.stackexchange.com/questions/227648/… 我认为最后一个分号是不必要的 对我来说正确的答案是来自@King-Wzrd 的答案。这个缺少 ssh 命令的一部分,并且没有给出关于引号的指示,这是解决问题的真正问题【参考方案2】:

试试这个:

ssh root@host "mysql database -e 'query to run on table_name; more queries to run;'"

user@host 也可以这样做,如果该用户有权执行 SQL 查询,更不用说一般启动 mysql。使用-e--execute 相同,它将运行您放在尾随引号(单引号或双引号)中的任何内容并退出。标准输出格式与使用--batch 时看到的相同。

【讨论】:

很好地描述了为什么会出现问题并需要引用unix.stackexchange.com/a/212298/18674【参考方案3】:

MySql 似乎有一个包含数据库的特殊命令行语法。

mysql -u user -p -e 'SQL 查询'数据库

这个文档比较旧,但我可以使用它

http://www.cyberciti.biz/faq/run-sql-query-directly-on-the-command-line/

使用 ssh 的最终工作命令:

ssh user@host "mysql -u user -e '显示表;'数据库名称"

【讨论】:

谢谢!更高的反应对我不起作用,但你的。就我个人而言,我更喜欢在“-e 查询”之前使用“-D databasename”,因为它更明确 - 但两者都像魅力一样对我有用。感谢您的帮助!【参考方案4】:

这最终在 bash 脚本中为我工作:

query='USE [database]; SELECT ...'   
mysql='mysql -u [username] -p[password] -e '"'""$query""'"
ssh [username]@[server] -t "$mysql"

如果您想让它更安全,请添加密码提示,而不是将其存储在可能不安全的地方。

【讨论】:

嗨@OZZIE,输出具有特殊字符,如+和- +--------------------+ |数据库 | +--------------------+ |信息架构 | +--------------------+ 如何在查询中解决这个问题【参考方案5】:

经过几次测试后,这对我有用(与@King-Wzrd 的答案基本相同):

ssh -t kom "mysql -uroot -p -e 'show databases;'"
ssh -t kom "mysql -uroot -p < /home/ling/websites/jin_test/.deploy/tmp.sql"

“诀窍”是命令周围的引号。

-t 选项允许通过远程 shell 以交互方式提示密码。

这里的 kom 只是我的 ~/.ssh/config 文件中定义的 ssh 配置标识符(在此处查看更多信息:https://www.cyberciti.biz/faq/create-ssh-config-file-on-linux-unix/)。

【讨论】:

【参考方案6】:

在我的 Homestead 虚拟机中从我的主机环境中针对 MySQL 运行它产生了一个很好的结果......尽管我确实必须首先从虚拟机中设置 root 密码才能使其工作。

ssh vagrant@192.168.10.10 mysql -h localhost -u root -p -e "'SELECT * FROM user;' mysql";

【讨论】:

以上是关于在命令行中通过 ssh 在远程机器上运行 MySQL 查询的主要内容,如果未能解决你的问题,请参考以下文章

从 bash 脚本中通过 ssh 在远程主机上执行命令

SSH

在脚本中通过ssh捕获bash脚本的输出

Linux中通过ssh将客户端与服务端的远程连接

在 Mac os10.12.6 中通过 pssh 打开/激活远程机器上关闭的应用程序

通过ssh远程执行命令导入定时任务报错----解决过程