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

Flutter连接Plesk服务器MariaDB数据库的问题求助

解决Flutter通过mysql1包连接Plesk远程MySQL的问题

我之前也踩过类似的坑,折腾了好一阵才搞定远程连接的问题,给你梳理下完整的步骤和需要注意的细节:

第一步:确认Plesk服务器端的配置是否到位

别光看Plesk界面的远程权限开关,还有几个关键点要检查:

  • 数据库用户的远程访问权限:
    除了在Plesk的「数据库」模块里给你的数据库用户添加允许访问的IP(测试阶段可以暂时填%允许所有IP,生产环境一定要限制特定IP),还要登录MySQL控制台确认用户的host设置:
    SELECT user, host FROM mysql.user WHERE user = '你的数据库用户名';
    
    确保结果里的host是你的设备公网IP或者%,如果不是,需要执行:
    GRANT ALL PRIVILEGES ON 你的数据库名.* TO '你的用户名'@'%' IDENTIFIED BY '你的密码';
    FLUSH PRIVILEGES;
    
  • 服务器防火墙放行3306端口:
    1. 在Plesk的「工具与设置」→「防火墙」里,添加规则允许入站的3306端口访问;
    2. 还要检查服务器系统层面的防火墙(比如Linux的ufw/iptables),确保3306端口没有被拦截;
  • 确认MySQL端口和SSL设置:
    在Plesk的「数据库」→「你的数据库」→「远程访问」里,确认MySQL的端口是默认的3306(如果改过要记下来),同时注意是否强制要求SSL连接。

第二步:Flutter端mysql1包的正确连接代码

先在pubspec.yaml里添加依赖:

dependencies:
  mysql1: ^0.20.0 # 建议用pub.dev上的最新版本

然后写连接和查询的代码,一定要加异常处理和SSL配置(Plesk的MySQL大多默认开启SSL):

import 'package:mysql1/mysql1.dart';

Future<void> fetchRemoteData() async {
  // 配置连接参数
  final connSettings = ConnectionSettings(
    host: '你的Plesk服务器公网IP',
    port: 3306, // 如果服务器改了端口就填对应的
    user: '数据库用户名',
    password: '数据库密码',
    db: '目标数据库名称',
    // 关键:SSL配置,Plesk的MySQL一般要求SSL
    sslSettings: SslSettings(
      // 测试阶段可以先跳过证书验证,生产环境要配置合法证书
      insecure: true,
      allowedCipherSuites: [],
    ),
  );

  try {
    // 建立连接
    final connection = await MySqlConnection.connect(connSettings);
    print('✅ 远程数据库连接成功!');

    // 执行查询获取数据
    final results = await connection.query('SELECT * FROM 你的表名 LIMIT 5');
    // 遍历输出数据
    for (var row in results) {
      print('📋 行数据:${row.fields}');
      // 获取特定字段示例:row['id'], row['username']
    }

    // 关闭连接
    await connection.close();
  } catch (e) {
    print('❌ 连接/查询失败:$e');
    // 根据错误信息排查:比如"Access denied"是权限问题,"Connection timed out"是网络/防火墙问题
  }
}

常见坑点排查

  1. SSL连接失败:如果报错和SSL相关,先确认服务器是否强制SSL,测试阶段可以先设置insecure: true跳过验证,生产环境要获取服务器的SSL证书并配置到sslSettings里;
  2. 网络不通:用你的设备测试能不能访问服务器的3306端口,比如在终端执行telnet 服务器IP 3306,如果连接不上就是防火墙或者服务商安全组的问题;
  3. 权限不足:确保数据库用户拥有目标数据库的SELECT等必要权限,在Plesk的用户权限设置里可以直接配置;
  4. 生产环境提醒:直接在Flutter客户端连接MySQL非常不安全,会暴露数据库账号密码,建议搭建一个后端API(比如用Node.js/PHP/Go),Flutter通过API和数据库交互,这才是正规的生产环境做法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 00:24:08