Vscode插件SQLTools无法链接mysql: ERROR: Error opening connection connect ECONNREFUSED 127.0.0.1:3306

        今天我在用下面的VS插件SQLTools链接mysql的时候,遇到了无法链接的问题:

 

         MYSQL版本我用的是8.0,经过下面的配置会报如下错误:

配置信息如下:

报错信息如下:ERROR (ls): Connecting error: {"code":-1,"data":{"driver":"MySQL","driverOptions":{"mysqlOptions":{"authProtocol":"default"}}},"name":"Error"}  

解决方法:

        先确保下载了mysql:

        Linux 安装Mysql 详细教程(图文教程)-优快云博客

        如果确认mysql已经下载完成,那么大概率该问题是因为打开了skip-networking。开启该选项可以彻底关闭 MySQL 的 TCP/IP 连接方式,如果 WEB 服务器是以远程连接的方式访问 MySQL 数据库服务器则不要开启该选项!否则将无法正常连接! 如果所有的进程都是在同一台服务器连接到本地的 mysqld, 这样设置将是增强安全的方法。

        我们可以先进入到mysql中来查看skip-networking是否是ON状态。

show variables like 'skip_networking';
show variables like 'port';

        如果是ON那么这就是为什么vs无法链接的原因,我们需要关闭skip_networking。

        我们可以用show variables like 'port';查看端口信息,目前大概率是0。

        知道了问题出在哪后我们就可以来修改my.cnf配置文件,由于我使用的是mysql8.0该版本在/etc/目录下是没有自动生成的my.cnf配置文件,该配置文件在/etc/mysql目录下,所以我们需要进入/etc/mysql运行下面语句

sudo vim my.conf

 

 将下面内容复制到你的my.conf文件中

[mysqld]
bind-address=0.0.0.0
port=3306
user=mysql
basedir=/usr/local/mysql
datadir=/data/mysql
socket=/tmp/mysql.sock
log-error=/data/mysql/mysql.err
pid-file=/data/mysql/mysql.pid
#character config
character_set_server=utf8mb4
symbolic-links=0
explicit_defaults_for_timestamp=true
skip_networking=off

        这里需要注意请确保你的/etc目录下没有你自己创建的my.conf,否则你要把内容加到该文件中,因为。MySQL读取各个my.cnf配置文件的先后顺序是:

        /etc/my.cnf
        /etc/mysql/my.cnf
        /usr/local/mysql/etc/my.cnf
        ~/.my.cnf

        这时我们再运行如下sql语句:

show variables like 'skip_networking';
show variables like 'port';

        可以看到目前已经设置成功了。

        不过很有可能你再进行连接的时候会出现如下错误:

 ERROR: Error opening connection ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading MySQL client..

这时可以参考该链接:

MySQL报错解决:Error: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication_Jack Mai的博客-优快云博客

        最后我们就惊奇的发现可以链接上去了!

         本文到此就结束了!希望本篇文章对大家带来帮助!

### MySQL 连接被拒绝的原因分析 当遇到 `ECONNREFUSED` 错误时,通常表示客户端尝试连接到指定地址和端口的服务失败,因为目标服务未监听该地址或端口。对于 `mysql error ECONNREFUSED 127.0.0.1:5672` 的情况,以下是可能原因及其解决方案: #### 1. **MySQL 是否正在运行** 确认 MySQL 数据库服务器是否已启动并正常运行。如果数据库服务未启动,则会引发此错误。可以通过以下命令检查 MySQL 状态: ```bash sudo systemctl status mysql ``` 如果没有运行,可以使用以下命令启动它: ```bash sudo systemctl start mysql ``` #### 2. **端口号配置不匹配** 默认情况下,MySQL 使用的是 3306 端口而非 5672。5672 是 RabbitMQ 默认使用的端口[^1]。因此,需验证应用程序中的 MySQL 配置文件是否指定了正确的端口号。 在 Node.js 中,通过设置 `port` 参数来指定 MySQL 端口。例如: ```javascript const connection = require('mysql').createConnection({ host : 'localhost', user : 'root', password : 'password', port : 3306, // 正确的 MySQL 端口 database : 'test' }); ``` #### 3. **防火墙阻止访问** 即使 MySQL 已经启动,也可能由于本地防火墙规则阻止了对特定端口的访问。可通过以下命令临时关闭防火墙测试连通性: ```bash sudo ufw disable ``` 或者允许特定端口(如 3306)通过防火墙: ```bash sudo ufw allow 3306/tcp ``` #### 4. **绑定地址问题** MySQL 可能仅绑定了 localhost 地址而无法接受外部请求。检查 MySQL 配置文件 `/etc/mysql/my.cnf` 或 `/etc/my.cnf` 中是否存在如下配置项: ```ini bind-address = 127.0.0.1 ``` 如果是这种情况,修改为 `0.0.0.0` 来支持远程连接(注意安全性风险),然后重启 MySQL 服务: ```bash sudo systemctl restart mysql ``` #### 5. **权限不足** 确保用于连接的 MySQL 用户具有足够的权限。可以在 MySQL 命令行工具中执行以下 SQL 查询授予必要的权限: ```sql GRANT ALL PRIVILEGES ON *.* TO 'your_user'@'%' IDENTIFIED BY 'your_password'; FLUSH PRIVILEGES; ``` #### 6. **代理或网络配置问题** 有时,环境变量或其他配置可能导致代理干扰 MySQL 请求。可按照引用说明清除代理设置[^4]: ```bash npm config set proxy null npm config set https-proxy null ``` --- ### 示例代码:基本查询操作 下面是一个简单的示例,展示如何安全地处理 MySQL 查询并捕获潜在错误: ```javascript const mysql = require('mysql'); // 创建连接对象 const connection = mysql.createConnection({ host : 'localhost', user : 'root', password : 'password', port : 3306, database : 'test' }); // 执行查询 connection.query('SELECT 1 + 1 AS solution', function (error, results, fields) { if (error) throw error; // 抛出异常以便调试 console.log(results); // 输出结果集 }); // 关闭连接 connection.end(); ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

永不秃头的三三

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值