You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用vibe-d与mysql-native在D语言中连接MySQL失败问题排查

解决vibe-D连接MySQL时出现的IPv6连接拒绝问题

这问题我之前踩过坑!核心原因是vibe-D默认的网络栈会优先尝试IPv6连接,而你的MySQL大概率只开启了IPv4的监听(绑定了127.0.0.1),没配置IPv6支持,所以连接[0:0:0:0:0:0:0:1]:3306(IPv6版的localhost)时被拒绝。

快速解决方法(推荐):强制使用IPv4地址连接

把代码里的"localhost"替换成"127.0.0.1",直接指定IPv4的回环地址,这样vibe-D就不会去尝试IPv6连接了:

import std.stdio;
import mysql;
import vibe.d;
void main() {
    // 把localhost改成127.0.0.1
    MySQLPool db_pool = new MySQLPool("127.0.0.1","root","","dbname",3306);
    Connection db = db_pool.lockConnection();
    // 如果用连接字符串的话,同样修改host:
    // string connectionStr = "host=127.0.0.1;port=3306;user=root;db=dbname";
    // db = new Connection(connectionStr);
}

备选方案:开启MySQL的IPv6监听

如果你希望保留localhost的写法,可以修改MySQL的配置文件(my.cnf或my.ini),把bind-address设置为支持IPv6的地址:

# 允许监听所有IPv4和IPv6地址
bind-address = ::
# 或者只监听回环地址的IPv4和IPv6
bind-address = 127.0.0.1,::1

修改后重启MySQL服务,这样vibe-D尝试IPv6连接时就能成功了。

为什么不用vibe-D时能正常连接?

Phobos(D语言标准库)的套接字实现默认会优先尝试IPv4,或者在IPv6连接失败时自动回退到IPv4;而vibe-core(vibe-D的核心依赖)的网络模块默认优先使用IPv6,当MySQL没监听IPv6的[::1]地址时,就会抛出连接拒绝的错误。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 01:22:40