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

部署AdonisJS到DigitalOcean时MySQL正确凭据仍被拒绝访问如何解决

问题修复步骤

1. 校验MySQL用户权限匹配规则

MySQL中localhost和127.0.0.1是完全独立的权限主体,你的.env配置里用的是MYSQL_HOST=127.0.0.1,如果创建用户时只授权了noble@localhost,就会触发访问拒绝报错。
执行以下命令确认用户权限:

SELECT user, host, plugin FROM mysql.user WHERE user='noble';

如果查询结果里只有host为localhost的记录,执行以下命令补充127.0.0.1的授权,同时指定mysql_native_password插件:

CREATE USER 'noble'@'127.0.0.1' IDENTIFIED WITH mysql_native_password BY '你的实际数据库密码';
GRANT ALL PRIVILEGES ON adonisapp.* TO 'noble'@'127.0.0.1';
FLUSH PRIVILEGES;

2. 确认Adonis数据库配置未覆盖环境变量

检查项目config/database.ts(AdonisJS v5/v6)或config/database.js(v4)中的mysql连接配置,确保字段和.env变量完全对应,没有硬编码值覆盖:

// 正确配置示例(v5/v6)
mysql: {
  client: 'mysql2',
  connection: {
    host: env.get('MYSQL_HOST'),
    port: env.get('MYSQL_PORT'),
    user: env.get('MYSQL_USER'),
    password: env.get('MYSQL_PASSWORD'),
    database: env.get('MYSQL_DB_NAME'),
  }
}

如果使用的是旧版mysql驱动而非mysql2,需要额外在配置中添加auth插件参数适配mysql_native_password:

connection: {
  // 其他配置不变
  authPlugins: {
    mysql_native_password: () => require('mysql2/lib/auth_plugins/mysql_native_password'),
  }
}

3. 本地连接有效性测试

直接在服务器命令行用和.env完全一致的参数测试连接,排除数据库侧问题:

mysql -h 127.0.0.1 -P 3306 -u noble -p adonisapp

输入密码后如果能正常进入数据库,说明数据库侧配置正常,问题出在Adonis项目配置;如果仍报错,继续排查以下项:

  • 检查MySQL配置文件my.cnf(通常在/etc/mysql/或/etc/目录下),确认bind-address没有只绑定公网IP,skip-networking参数未开启
  • 如果服务器使用CentOS/RHEL系发行版,执行setsebool -P httpd_can_network_connect_db 1关闭SELinux对数据库连接的限制

4. 缓存清理

配置修改后执行以下命令清理Adonis的环境缓存,避免旧配置生效:

node ace config:clear
node ace cache:clear
# 生产环境需要重启服务
pm2 restart 你的Adonis服务名

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 14:24:04