在命令行中通过 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 查询的主要内容,如果未能解决你的问题,请参考以下文章