![命令行访问远程 MySQL 服务器](https://linux22.com/image/1410210/%E5%91%BD%E4%BB%A4%E8%A1%8C%E8%AE%BF%E9%97%AE%E8%BF%9C%E7%A8%8B%20MySQL%20%E6%9C%8D%E5%8A%A1%E5%99%A8.png)
我在远程共享主机上管理一个网站。我的网络主机提供 MySQL,我可以使用 GUI 程序从我的 Mac OS X 电脑访问它,续集专业版. 效果很好。
但我想编写一些查询脚本,而 Sequel Pro 无法编写脚本。我该怎么办?
我读过关于通过 SSH 隧道连接到 mysql 的文章。我可以通过 Mac 上的 SSH 密钥访问服务器的 shell,因此
远程控制[电子邮件保护]-p 7978
让我进来。隧道连接 MySQL 端口 3306 应该可以工作吗?像这样?
远程控制[电子邮件保护]-L 3306:127.0.0.1:3306
(一分钟后它会“超时”。)
我需要在 Mac 上安装 mysql 吗?
答案1
在MySQL服务器上,需要修改文件我的cnf,其位置取决于操作系统:例如,在 Debian 中,它位于 /etc/mysql 中。编辑它,找到以下行
[mysqld]
并添加以下文字:
[mysqld]
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
language = /usr/share/mysql/English
bind-address = The_IP_of_YOUR_MySQL_Server
# skip-networking
这里,重要的是注释掉以下行跳过网络,并在行中插入绑定地址,服务器的 IP。保存,重新启动 mysql(同样,这取决于操作系统),使用通常的
mysql -u root -p mysql
并允许从您自己的远程 IP 访问现有数据库:
mysql> update db set Host='Your_own_remote_IP' where Db='webdb';
mysql> update user set Host='Your_own_remote_IP' where user='webadmin';
现在返回到您的远程系统,并测试新功能:
mysql -u webadmin –h The_IP_of_theMySQL_Server –p
当然,要实现此功能,您需要在 Mac 上安装 MySQL 客户端。您现在可以编写自己的 MySQL 查询脚本,例如,在 bash 脚本中,如下所示:
#!/bin/bash
result=`mysql -h The_IP_of_theMySQL_Server --user=webadmin --password=Your_Password --skip-column-names -e "select id from mydb.mytable where myattribute = 3"`
编辑:
如果您想要远程直接连接到 MySQL 服务器,则需要这样做。如果您只想在本地编写查询脚本(IE,在服务器上),然后MySQL客户端就可以了。您可以找到介绍这里。
答案2
使用 ssh,您可以远程运行命令。因此,如果您想编写一些查询脚本,这是一种方法。也许不是您想要的,但这是一个值得了解的选项
假设主机 B 是你的 SQL 服务器。主机 A 是你要运行查询的客户端
在主机 B 上,将查询放入文件中,例如创建一个“test.sql”文件。在我的例子中,我只输入“show databases”
然后从主机 A 你可以执行
ssh [选项]“[要运行的命令]”
使用 ssh 设置无密码登录(使用 ssh-rsa 身份验证)。使用“ssh-keygen”和“ssh-copy-id”。您可以通过以下方式进行测试:
ssh [options] “ls”,查看是否返回主机 B 的“ls”结果
从那里你可以做
ssh [选项] “mysql [选项] < test.sql”
那有意义吗?
您还需要在 mysql 命令上设置密码,但您可能不喜欢这个密码,因为这个密码不太安全。我还没有尝试过其他“无密码”登录 mysql 的方法,也许还有其他方法可以完成这一部分。