GoDaddy主机CPanel环境下MySQL 1045访问权限错误求助
问题详情
错误信息
'Access denied for user 'Test_UG'@'88.81.84.184' (using password: YES)',code: 'ER_ACCESS_DENIED_ERROR',errno: 1045,sqlState: '28000'
堆栈片段:'Error: Access denied for user 'Test_UG'@'88.…Trampoline (node:internal/async_hooks:130:17)'
环境与背景
- 使用工具:Visual Code、Node.js、PHP、MySQL
- 主机服务:GoDaddy、CPanel
- 程序用途:开发Telegram Bot,通过MySQL存储数据
- 本地状态:本地Wamp Server环境下可正常运行
- 变更操作:仅修改了MySQL连接配置信息
已尝试的排查动作
- 测试过全新创建的、拥有全权限的数据库及用户,也试过2-3天前创建的旧用户
- 参考过多个Stack Overflow相关问题的解决方案(内容省略)
相关Node.js代码
// 创建MySQL连接配置 const dbConnect =({ host: 'xyz.com', user: 'Test_UG', password: 'Xyz@1122!', database: 'xyz_bot', }); // 存储用户消息到数据库的函数 async function storeMsg(msg) { const connection = await mysql.createConnection(dbConnect); try { await connection.execute('INSERT INTO chat_details (username, user_id, msg_date, token_name, token_amount, msg) VALUES (?, ?, NOW(), ?, ?, ?)', [msg.from.username, msg.chat.id, getRandomToken(), getTokenAmount(0.001, 0.2), msg.text]); console.log('用户消息已存储到数据库。'); } catch (error) { console.error('数据库错误:', error); } finally { connection.end(); } }
解决方案
针对GoDaddy+CPanel环境的特性,按以下步骤逐一排查:
授权用户远程访问权限
CPanel创建的MySQL用户默认仅允许本地访问,必须手动添加你的外部IP(即错误中的88.81.84.184)到用户的访问白名单。登录CPanel找到「MySQL数据库」管理界面,选中对应用户,修改权限时指定允许的IP,或临时用%允许所有IP测试(测试完成后改回具体IP保障安全)。修正数据库主机地址
GoDaddy的MySQL主机并非你的网站域名xyz.com,而是CPanel提供的专用数据库地址(格式通常为dbxxxx.hosting-data.io)。去CPanel数据库管理页面复制正确的主机地址替换配置中的host值。处理密码特殊字符
你的密码包含@、!这类特殊字符,虽通常可直接写入配置,但可尝试用单引号包裹密码,或对特殊字符做URL编码(比如@转成%40),排查是否因字符解析导致验证失败。确认用户与数据库的绑定权限
在CPanel中,创建用户后必须将其与目标数据库xyz_bot绑定,并赋予该数据库的INSERT、SELECT等必要权限,仅给全局权限但未绑定到具体库会导致权限验证失败。测试端口连通性
GoDaddy MySQL默认端口为3306,用telnet [正确主机地址] 3306或nc -zv [正确主机地址] 3306测试端口是否能连通。若不通,联系主机商确认防火墙或安全组是否开放该端口。
内容的提问来源于stack exchange,提问作者VikaS GuttE

