You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

求助:通过SSH及私钥远程连接MySQL数据库的问题

我来帮你捋捋这个SSH隧道连接MySQL的事儿,你现在用的命令方向是对的,咱们一步步排查细节,确保能顺利连上:

先确认SSH隧道是否真的建立成功
  • 先在你的Fedora笔记本上跑这个命令,看看本地端口有没有被SSH进程监听:
    netstat -tulpn | grep 3306
    
    如果输出里能看到127.0.0.1:3306(这是最安全的监听方式),说明隧道已经正常起来了;要是没任何输出,那得先解决SSH本身的连接问题。
  • 先试试不带隧道参数的基础SSH登录:ssh -i <你的密钥文件路径> serveruser@服务器IP,看看能不能正常登进CentOS服务器。这里要注意,你的密钥文件权限必须是600,不然SSH会直接拒绝使用它,执行chmod 600 <你的密钥文件路径>就能修正权限。
再检查MySQL端的配置细节
  • 你提到已经配置了绑定地址,要确保CentOS上的MySQL配置文件(一般是/etc/my.cnf或者/etc/my.cnf.d/下的文件)里的bind-address参数:如果MySQL和SSH服务器是同一台机器,设成127.0.0.1就够;如果是另一台内网机器,就设成那台机器的内网IP,或者干脆设成0.0.0.0(允许所有IP访问,生产环境不建议这么干)。改完配置记得重启MySQL服务:systemctl restart mysqld
  • 核对MySQL用户的访问权限:你用来连接的MySQL用户,必须允许从隧道转发的来源访问。比如如果MySQL和SSH服务器是同一台,那用户权限得是'你的MySQL用户名'@'localhost'或者'你的MySQL用户名'@'%'(后者权限太宽,测试用可以,生产别这么弄)。登录MySQL后执行这个命令查看权限:
    SELECT user, host FROM mysql.user;
    
    要是权限不对,用这条命令调整(记得替换成你的实际信息):
    GRANT ALL PRIVILEGES ON 你的数据库名.* TO '你的MySQL用户名'@'localhost' IDENTIFIED BY '你的MySQL密码';
    FLUSH PRIVILEGES;
    
本地连接MySQL的正确姿势

当隧道建立成功后,你在Fedora上用MySQL客户端连接时,要连本地的3306端口,而不是远程的MySQL_IP。比如用命令行客户端的话:

mysql -u 你的MySQL用户名 -p -h 127.0.0.1 -P 3306

这里-h 127.0.0.1一定要加,别写成远程的MySQL_IP,因为隧道已经把本地3306的请求转发到远程的<MySQL_IP>:3306了。

几个实用的排查小技巧
  • 如果隧道建好了但连不上MySQL,在CentOS服务器上抓包看看有没有数据包过来:
    tcpdump -i any port 3306
    
    然后本地发起连接,看看有没有数据包到达服务器的3306端口,这样就能判断是隧道转发的问题,还是MySQL本身的配置问题。
  • 要是你的Fedora本地已经有MySQL/MariaDB服务占用了3306端口,隧道会启动失败。这时候可以把本地端口改成别的,比如3307:
    ssh -i <你的密钥文件路径> serveruser@服务器IP -L 3307:<MySQL_IP>:3306 -N
    
    然后本地连接的时候用-P 3307就行。

内容的提问来源于stack exchange,提问作者user1884372

火山引擎 最新活动