限时福利领取


最近在做一个Web项目,后端部署在阿里云ECS上,数据库用的是宝塔面板管理的MySQL。在连接过程中踩了不少坑,今天把完整的配置流程和优化经验分享给大家。

阿里云ECS服务器

一、为什么连接总出问题?

刚开始配置时遇到过几个典型问题:

  1. 网络不通:ECS安全组没放行数据库端口(宝塔默认3306)
  2. 权限拒接:数据库用户没有配置远程访问权限
  3. 性能瓶颈:高并发时频繁创建连接导致资源耗尽

二、连接方案选型

常见的有两种连接方式:

  • 内网连接(推荐)
  • 优点:延迟低(1-3ms)、免费、更安全
  • 要求:ECS和数据库必须在同一地域同一VPC

  • 公网连接

  • 优点:跨地域可用
  • 缺点:需要暴露端口、有带宽费用、延迟高(50ms+)

网络拓扑示意图

三、手把手配置流程

1. 安全组配置

  1. 登录阿里云ECS控制台
  2. 找到实例所属的安全组
  3. 添加入方向规则:
  4. 协议类型:MySQL(3306)
  5. 授权对象:宝塔服务器内网IP(如果是公网连接填0.0.0.0/0)

2. 宝塔数据库设置

  1. 打开宝塔面板 → 数据库
  2. 点击对应数据库的【权限管理】
  3. 添加访问主机为ECS的内网IP(公网连接填%)
  4. 建议创建专用账户,不要直接使用root

3. 测试连接(Python示例)

import pymysql

# 连接配置
config = {
    'host': 'bt-mysql-internal-ip',  # 内网地址
    'port': 3306,
    'user': 'your_username',
    'password': 'your_password',
    'database': 'your_db',
    'charset': 'utf8mb4'
}

try:
    # 建议使用连接池替代直接连接
    connection = pymysql.connect(**config)
    with connection.cursor() as cursor:
        cursor.execute("SELECT VERSION()")
        print(f"MySQL版本: {cursor.fetchone()[0]}")
finally:
    connection.close()

四、性能优化技巧

  1. 必用连接池:
  2. Python推荐使用DBUtils或SQLAlchemy
  3. 合理设置max_connections(建议20-100)

  4. 启用SSL加密:

    config['ssl'] = {
        'ca': '/path/to/ca.pem',
        'cert': '/path/to/client-cert.pem',
        'key': '/path/to/client-key.pem'
    }
  5. 长连接保活:

  6. 设置wait_timeout=28800(8小时)
  7. 应用层定期执行简单查询保持连接

五、常见问题排查

  • ERROR 1130: 检查数据库用户host是否包含ECSIP
  • ERROR 2003: 确认安全组和宝塔防火墙都已放行
  • 连接缓慢: 尝试添加skip-name-resolve到my.cnf

六、最佳实践建议

  1. 生产环境务必使用内网连接
  2. 为每个应用创建独立数据库账号
  3. 定期检查慢查询日志
  4. 重要操作启用事务

这套方案在我们日活10W+的电商系统中稳定运行了半年多,希望对你有帮助。如果有其他实战技巧,欢迎在评论区分享交流~

Logo

音视频技术社区,一个全球开发者共同探讨、分享、学习音视频技术的平台,加入我们,与全球开发者一起创造更加优秀的音视频产品!

更多推荐