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

同网络下Flutter通过mysql1拉取电脑端MySQL数据问题求助

同局域网下Flutter模拟器访问本地MySQL实操方案

1. 先配置本地MySQL允许外部访问

默认MySQL只允许本机回环访问,要先改配置:

  • 找到MySQL配置文件:Windows下为MySQL安装目录/ProgramData目录下的my.ini,macOS/Linux下为/etc/mysql/my.cnf或/usr/local/mysql/etc/my.cnf
  • 找到配置里的bind-address项,把默认值127.0.0.1改成0.0.0.0,保存后重启MySQL服务
  • 给测试账号开放远程访问权限,登录本地MySQL命令行执行以下SQL,把占位符换成你自己的账号密码:
-- 测试环境用%允许所有IP访问没问题,生产环境禁止这么配置
CREATE USER 'test_user'@'%' IDENTIFIED BY 'your_test_pwd';
GRANT ALL PRIVILEGES ON *.* TO 'test_user'@'%';
FLUSH PRIVILEGES;
  • 临时关闭本地电脑防火墙,或者在防火墙入站规则里放开3306端口的TCP访问权限,避免被拦截。

2. 选对模拟器访问宿主机的IP地址

模拟器自身的127.0.0.1指向的是模拟器本身,不是你跑MySQL的电脑,不同模拟器对应地址不一样:

  • Android Studio官方模拟器:固定用10.0.2.2,这是官方做的宿主机映射地址,不需要额外配置
  • 第三方安卓模拟器(雷电、夜神、MuMu等):优先试172.16.0.1,如果不通就查你电脑当前在局域网的实际IPv4地址(Windows执行ipconfig、macOS/Linux执行ip a查看对应网卡的IPv4,一般是192.168.x.x段)
  • iOS模拟器:直接用127.0.0.1即可,iOS模拟器和宿主机共用网络栈,不需要特殊地址

3. Flutter端mysql1连接代码示例

直接替换对应参数即可使用:

import 'package:mysql1/mysql1.dart';

Future<MySqlConnection> initDb() async {
  final connSettings = ConnectionSettings(
    host: '10.0.2.2', // 替换成上一步查到的对应IP
    port: 3306,
    user: 'test_user', // 替换成你自己的数据库账号
    password: 'your_test_pwd', // 替换成对应密码
    db: 'your_target_db', // 替换成要访问的数据库名
    timeout: const Duration(seconds: 10)
  );
  return await MySqlConnection.connect(connSettings);
}

调用时执行final dbConn = await initDb();拿到连接实例,就可以正常执行SQL拉取数据。

常见问题排查

  • 连接超时先测网络通断:打开模拟器自带浏览器,访问http://你配置的IP:3306,如果页面有响应(哪怕是乱码)说明网络层通,问题出在账号权限或连接参数;如果完全无响应,回头查防火墙、MySQL监听配置
  • MySQL8.0+版本如果报认证插件错误,执行以下SQL调整用户认证方式即可:
ALTER USER 'test_user'@'%' IDENTIFIED WITH mysql_native_password BY 'your_test_pwd';
FLUSH PRIVILEGES;
  • 重要提醒:直连MySQL的方式仅适用于本地调试,正式上线的应用必须通过后端服务接口中转访问数据库,禁止把数据库账号直接写在客户端代码里,否则会有严重的数据泄露风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 22:33:23