返回

解决 DigitalOcean LEMP 环境 Workbench 无法连接 MySQL

mysql

DigitalOcean LEMP 环境下无法通过 Workbench 连接 MySQL 的解决方案

在尝试将网站迁移到 DigitalOcean 上的 LEMP 环境时,一个常见的问题出现了:尽管可以通过终端成功连接 MySQL 数据库,但无法通过 MySQL Workbench 等 GUI 工具进行连接。本文分析这种情况出现的潜在原因并给出对应的排查方法和详细步骤。

一、原因分析

这类连接失败主要包括三个层面问题:网络层、认证层、配置层。首先必须确保能使用 SSH 连接 Digital Ocean 的服务器;接着确定是网络无法连接,还是验证无法通过,或是配置文件本身有错误。网络层连接不上,防火墙和网络地址绑定往往需要最先排查;认证层错误的话,应关注 ssh 和 mysql 的密码和秘钥的对应性。配置层有误可以查看是否有语法和逻辑上的纰漏,例如多配置空格符等;也需要关注端口绑定有误,或是远程账户创建失败的现象。下面会就这些可能原因逐一剖析。

二、解决方案

以下列举了一些可能帮助用户排查及解决问题的方法,注意,执行这些操作之前最好先进行数据库备份,以免操作不当造成不必要损失:

1. 防火墙配置

需要确保防火墙允许了来自本地计算机的针对 MySQL 端口(默认为 3306)的连接请求。如果使用了 UFW (Uncomplicated Firewall),可以通过以下命令允许连接:

sudo ufw allow 3306/tcp

还可以根据实际情况配置更具体的规则。例如仅允许特定的 IP 地址访问:

sudo ufw allow from [your_local_ip] to any port 3306 proto tcp

通过运行以下指令重新载入UFW配置,并查看状态确保更改正确应用:

sudo ufw reload
sudo ufw status

2. MySQL 服务器地址绑定

确保 MySQL 服务器绑定到正确的网络接口上。为了允许远程连接,不应该仅绑定到 localhost (127.0.0.1)。

编辑 MySQL 配置文件。通常位于 /etc/mysql/mysql.conf.d/mysqld.cnf/etc/mysql/my.cnf。使用 nano 或者 vim 打开文件:

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

找到 bind-address 行。如果它被设置为 127.0.0.1,MySQL 将只允许本地连接。要允许来自任意地址的连接,将该行更改为:

bind-address = 0.0.0.0

或更改为特定的外部服务器 IP:

bind-address = [your_server_ip]

然后保存文件。然后重启 MySQL 服务:

sudo systemctl restart mysql

3. MySQL 用户权限

为远程访问创建并授权一个 MySQL 用户。首先通过SSH登入服务器,打开命令行。

mysql -u root -p

之后使用类似以下 SQL 语句创建新用户并授权:

CREATE USER 'newuser'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'newuser'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

上面语句里,'newuser' 是您要创建的用户名,'password' 是为该用户设置的密码,'%' 表示允许从任何主机连接。可以把 '%' 替换成您的特定IP,可以提升数据库的安全性。运行上述命令以后请再次测试 Workbench 的连接。

4. SSH 隧道配置排查

连接方式选为: Standard TCP/IP over SSH。仔细核查 Workbench 的 SSH 连接配置。

  • SSH Hostname: 填写服务器的公网 IP 地址或已解析的域名。
  • SSH Username: 填写用于 SSH 登录服务器的用户名,确保该用户有权限连接 MySQL。不建议用root用户,这样会增加不必要的安全隐患。
  • SSH Password/SSH Key File: 使用正确的 SSH 密码,或配置了对应公钥的私钥文件路径。
  • MySQL Hostname: 使用 127.0.0.1。由于使用 SSH 隧道,应连接到 SSH 服务器本地回环地址,而不是MySQL 服务器本身。
  • MySQL Server Port: 3306。通过 SSH 隧道连接时,这个是固定为3306,确保此端口正确无误。
  • Username: 填写在步骤3中创建的、具有远程访问权限的 MySQL 用户名。
  • Password: 填写该 MySQL 用户的密码。

这些细节很容易出小纰漏,比如符号不匹配,格式错乱,等等,建议一步步细致排查。

5. 排查SSH连接问题

很多时候直接连接不上数据库是由于底层的SSH链接也出现了错误。用如下指令,可以尝试用命令测试能否连接 SSH 服务器。其中,[email protected] 应替换为您自己的 SSH 用户名和服务器 IP。-p 是可选的指定 ssh 端口。

ssh [email protected]
ssh -v [email protected] -p 22 #用于调试的输出,包含很多细节

同时注意:密钥文件权限问题 。如果使用的是 SSH 密钥文件,请确保本地机器上的私钥文件具有正确的权限。推荐配置:

chmod 600 ~/.ssh/your_private_key

如果还是连不上,有可能是ssh服务端配置有问题,注意检查服务端配置文件 /etc/ssh/sshd_config 。确保如下几个配置项是否打开并填写正确:

Port 22  #自定义的话换成自己的ssh端口
PasswordAuthentication yes
PubkeyAuthentication yes

最后确保 SSH 服务已重启使上述更改生效,通常使用命令:

sudo systemctl restart ssh

这样操作过后应该能解决绝大部分问题,建议再次连接。如失败,可从以上几个步骤重新审视可能存在的问题并反复测试,找出纰漏。

如果上述步骤都没有办法解决,建议安装 TeamViewer 等远控工具让具备这方面丰富经验的技术人员来排查错误。