Vercel生产环境MySQL连接异常:日志主机名与.env配置不符
问题分析与解决
核心误解澄清
日志里的ec2-3-236-108-51.compute-1.amazonaws.com不是你配置的数据库主机名,而是Vercel服务器发起数据库连接请求时的客户端IP对应的反向解析主机名。MySQL的Access denied for user 'xxx'@'yyy'错误中,yyy指的是发起连接的客户端地址,而非目标数据库地址。
问题本质
你的MySQL数据库未授权Vercel服务器的IP(或对应主机名)访问,导致连接被拒绝,进而触发504网关超时错误。
解决步骤
- 修正环境变量前缀:不要用
NEXT_PUBLIC_前缀存储数据库敏感配置,NEXT_PUBLIC_开头的变量会暴露给前端。改用普通变量名(比如DB_HOSTNAME),并在Vercel应用设置的「环境变量」中手动添加该变量(本地.env中的非NEXT_PUBLIC_变量不会自动同步到Vercel生产环境)。 - 授权Vercel访问MySQL:
- 确认Vercel的出站IP范围(可通过Vercel官方渠道获取固定IP段)。
- 在MySQL中执行授权命令,允许Vercel的IP/主机名访问:
-- 单个主机名授权 GRANT ALL PRIVILEGES ON your_database_name.* TO 'myusername'@'ec2-3-236-108-51.compute-1.amazonaws.com' IDENTIFIED BY 'your_db_password'; -- 或更稳妥的网段授权(以Vercel实际IP段为准) GRANT ALL PRIVILEGES ON your_database_name.* TO 'myusername'@'3.236.0.0/16' IDENTIFIED BY 'your_db_password'; - 刷新MySQL权限:
FLUSH PRIVILEGES;
- 检查防火墙/安全组:确保数据库所在服务器的防火墙或云服务商安全组,允许Vercel的IP段访问3306端口(MySQL默认端口)。
内容的提问来源于stack exchange,提问作者jonu29
相关产品推荐
相关产品推荐

