VB连接GLPI的MySQL数据库报无法连接指定主机异常如何解决
GLPI对接MySQL连接异常排查
问题基础信息
编写代码连接GLPI使用的MySQL数据库时,程序启动阶段触发连接报错,相关信息如下:
- GLPI对应的MySQL数据库日志截图:

- 现有数据库连接实现代码:
'Charger Liste ConnectionString = "server=10.14.242.190;port=3307;userid=root;database=GLPI;" Dim conn As New MySqlConnection conn.ConnectionString = ConnectionString conn.Open() Dim Query As String Query = "SELECT * FROM glpi_computers" MessageBox.Show(Query) End If End Sub
- 核心报错信息:
MySql.Data.MySqlClient.MySqlException : 'Unable to connect to any of the specified MySQL hosts.'
异常原因与对应解决方案
按照优先级从高到低排查:
1. 连接字符串配置错误
- 现有连接串缺失必填的
password参数,MySQL root账号默认配置访问密码,空密码未手动授权的情况下会直接被服务端拒绝连接 - 核对端口配置:3307不是MySQL默认监听端口,先登录数据库服务器执行
ss -tulnp | grep mysql确认MySQL实际监听的端口号,避免端口填写错误 - 核对库名大小写:Linux环境下MySQL默认对库名、表名大小写敏感,GLPI默认创建的业务库名为全小写
glpi,当前配置的database=GLPI如果和实际库名大小写不匹配,也会导致鉴权失败,先登录数据库核对实际库名。
修正后的标准连接串格式参考:
server=10.14.242.190;port=MySQL实际端口;userid=root;password=root账号实际密码;database=glpi;
2. 网络连通性故障
这是该报错最常见的触发原因,按顺序排查:
- 先在运行代码的客户端机器做端口连通性校验:Windows环境打开PowerShell执行
Test-NetConnection 10.14.242.190 -Port MySQL实际端口,Linux环境执行telnet 10.14.242.190 MySQL实际端口,如果端口连通失败,继续排查后续两项 - 检查MySQL监听地址:打开MySQL配置文件(常见路径为
/etc/my.cnf或/etc/mysql/mysql.conf.d/mysqld.cnf),找到bind-address配置项,如果值为127.0.0.1,修改为0.0.0.0后重启MySQL服务,否则MySQL仅允许本机访问,会拒绝所有外部连接请求 - 放行访问端口:如果是物理机/虚拟机部署,根据服务器使用的防火墙添加放行规则:firewalld执行
firewall-cmd --add-port=MySQL实际端口/tcp --permanent && firewall-cmd --reload,ufw执行ufw allow MySQL实际端口/tcp;如果是云服务器部署,还要额外检查控制台安全组是否放行对应端口的入站规则。
3. 数据库账号权限不足
MySQL的root账号默认仅允许本机localhost登录,没有配置远程访问权限,需要在数据库服务器本地登录MySQL执行授权命令:
-- 生产环境建议将%替换为运行代码的客户端机器固定IP,缩小权限暴露范围 GRANT ALL PRIVILEGES ON glpi.* TO 'root'@'%' IDENTIFIED BY 'root账号的实际密码'; FLUSH PRIVILEGES;
执行完成后重试连接即可。
4. 驱动版本不兼容
检查项目引用的MySql.Data驱动版本和服务器部署的MySQL大版本是否匹配,比如MySQL 8.0及以上版本不要使用6.x系列的老旧驱动,版本不兼容会导致连接握手失败抛出该异常,通过Nuget升级驱动到和服务端匹配的版本即可。
内容的提问来源于stack exchange,提问作者Dorian Giraud
相关产品推荐
相关产品推荐

