在Godaddy服务器执行迁移时遇SQLSTATE[28000] [1045]权限拒绝问题求助
你遇到的SQLSTATE[28000] [1045] Access denied错误,在GoDaddy环境里除了基础的凭据错误外,还有几个容易被忽略的点,我帮你梳理一下:
数据库用户的主机授权不匹配
错误信息里显示用户table从ip-444-444-444-41.ip.secureserver.net发起的连接被拒绝,这说明你创建的用户可能只授权了localhost或者其他IP/主机名访问。登录MySQL控制台,执行以下命令检查并修正:-- 查看当前用户的授权范围 SHOW GRANTS FOR 'table'@'ip-444-444-444-41.ip.secureserver.net'; -- 如果没有授权,添加对应主机的权限 GRANT ALL PRIVILEGES ON db.* TO 'table'@'ip-444-444-444-41.ip.secureserver.net'; -- 刷新权限使更改生效 FLUSH PRIVILEGES;测试阶段也可以用
%临时允许所有主机访问(不推荐生产环境):GRANT ALL PRIVILEGES ON db.* TO 'table'@'%';环境变量未正确加载或生效
即使你修改了.env文件,服务器的应用进程(比如PHP-FPM、Nginx,或者你的框架服务)可能还在使用旧的缓存配置。以Laravel为例,需要清除配置缓存:php artisan config:clear php artisan cache:clear如果是其他应用,尝试重启对应的服务,确保新的环境变量被读取。
GoDaddy数据库主机地址不正确
GoDaddy的数据库通常不会使用你自己的域名作为连接地址,而是提供专门的数据库主机(比如类似dbXXXXXX.hosting-data.io的格式)。登录GoDaddy控制面板,找到数据库管理页面,确认实际的DB_HOST地址,替换你当前配置的example.com。密码包含特殊字符导致解析失败
如果你的DB_PASSWORD包含!@#$%^&*()这类特殊字符,直接写在.env文件里可能会被解析错误。尝试用双引号包裹密码:DB_PASSWORD="password-with-special-chars"用户权限未正确赋予目标数据库
确认你给用户table赋予的是目标数据库db的权限,而不是其他数据库。执行SHOW GRANTS FOR 'table'@'ip-444-444-444-41.ip.secureserver.net';,检查输出里是否有GRANT ALL PRIVILEGES ONdb.*的条目,如果没有,重新执行授权语句并刷新权限。GoDaddy防火墙/安全组限制
GoDaddy的服务器默认可能会限制数据库端口(3306)的访问范围。登录GoDaddy控制面板,检查安全组或防火墙设置,确保你的应用服务器IP被允许访问数据库服务器的3306端口。
内容的提问来源于stack exchange,提问作者Michael Anaman

