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

Flutter使用mysql1连接本地MySQL报错SocketException:连接被拒绝

Flutter mysql1包连接本地MySQL被拒绝的解决方案

问题描述

使用Flutter的mysql1包连接本地MySQL数据库时,出现SocketException: Connection refused错误,尝试修改host为127.0.0.1或10.0.2.2、重启MySQL服务均无效,但MySQL Workbench能正常执行SQL语句。

解决步骤

1. 调整MySQL的绑定地址

MySQL默认可能仅监听本地回环地址,需修改配置让它监听所有可用网络接口:

  • 找到MySQL配置文件(Windows为my.ini,Linux/macOS为my.cnf)
  • 找到bind-address配置项,将其值改为0.0.0.0,或直接注释掉该行
  • 重启MySQL服务

2. 配置MySQL用户的远程连接权限

默认root用户可能仅允许本地连接,需授权其从任意IP访问目标数据库:

  • 打开MySQL Workbench,执行以下SQL:
GRANT ALL PRIVILEGES ON company.* TO 'root'@'%' IDENTIFIED BY '';
FLUSH PRIVILEGES;

注:%表示允许所有IP连接,测试环境可用;生产环境建议替换为具体IP以保证安全,密码需与代码中保持一致(此处为空)

3. 根据运行环境设置正确的Host地址

不同运行环境对应不同的主机地址:

  • Android模拟器:使用10.0.2.2(模拟器内置的本地主机映射地址)
  • iOS模拟器:直接使用localhost或127.0.0.1
  • 真机设备:使用电脑的局域网IP(如192.168.1.100),需确保手机与电脑在同一WiFi网络下

修改后的连接代码示例(以Android模拟器为例):

import 'package:mysql1/mysql1.dart';

class Mysql {
  Future<MySqlConnection> getConnection() async {
    var settings = ConnectionSettings(
        host: '10.0.2.2',
        port: 3306,
        user: 'root',
        password: '',
        db: 'company');
    return await MySqlConnection.connect(settings);
  }
}

4. 检查防火墙设置

确保本地防火墙允许3306端口的入站连接,可临时关闭防火墙测试,若连接成功再配置相应的端口规则。

注意事项

移动端直接连接MySQL存在安全风险,生产环境建议搭建API中间层,通过接口与数据库交互,避免暴露数据库账号密码及连接信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 03:53:19