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

为何Perl DBI/DBD无法连接本地MariaDB(MySQL)?

解决Perl DBI连接MariaDB时出现"Can't connect to MySQL server on 'localhost' (10061)"的问题

既然你能用命令行正常连接MariaDB,但Perl脚本却连不上,说明数据库服务本身没问题,问题大概率出在Perl连接的配置细节或者驱动兼容性上,试试下面这些排查和解决步骤:

1. 把localhost换成127.0.0.1试试

Windows系统下,localhost有时候会优先解析到IPv6的::1地址,而你的MariaDB可能只监听了IPv4的127.0.0.1。修改连接字符串后再测试:

use DBI; 
my $dbh = DBI->connect('DBI:mysql:host=127.0.0.1;database=test', 'user', 'password') 
    or die "failed to connect\n";

2. 检查MariaDB的绑定地址配置

打开你的MariaDB配置文件(Windows上通常是安装目录下的my.ini,比如C:\Program Files\MariaDB 10.2\my.ini),找到bind-address这一行:

  • 如果它被设置为127.0.0.1,那没问题;如果被注释或者设置成了其他网卡IP,可能会导致本地TCP连接失败,建议改回127.0.0.1。

3. 确认DBD::mysql驱动的兼容性

你已经安装了DBI 1.641,但还要确保配套的DBD::mysql驱动版本和你的MariaDB 10.2.14兼容。先查看当前驱动版本:

perl -MDBI -e "print DBI->installed_versions"

如果版本偏旧,建议更新驱动:

cpan DBD::mysql

要是Windows下编译失败,可以尝试用Perl Package Manager(PPM)安装预编译好的版本。

4. 调整连接字符串格式

有时候连接字符串的参数顺序或写法会影响连接,试试这两种格式:

  • 把数据库名放在前面:
my $dbh = DBI->connect('DBI:mysql:test;host=127.0.0.1', 'user', 'password') 
    or die "failed to connect\n";
  • 显式指定端口号(默认3306,如果你没修改过端口的话):
my $dbh = DBI->connect('DBI:mysql:host=127.0.0.1;port=3306;database=test', 'user', 'password') 
    or die "failed to connect\n";

5. 测试TCP/IP连接是否正常

命令行默认可能用socket连接,而Perl DBI默认用TCP/IP,所以手动测试TCP连接确认网络层面没问题:

mysql -h 127.0.0.1 -P 3306 -u user -p test

如果这个命令能连上,说明TCP/IP通路正常,问题还是在Perl驱动或配置上;如果连不上,那就要检查MariaDB的TCP监听配置了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:38:52