错误:用户访问被拒绝'' localhost' (使用密码:否)

时间:2017-05-28 23:27:29

标签: mysql database database-migration knex.js

我正在尝试使用MySQL和Knex进行数据库迁移。

当我运行命令knex migrate:latest时,我得到了

ER_ACCESS_DENIED_ERROR: Access denied for user ''@'localhost' (using password: NO)

我已尝试在代码库上添加密码(对于' 123' NO'),尽管令我最困惑的是,即使我有{{1在我的数据库文件中,错误给出了一个空字符串作为用户...

我分享我想象的相关文件:

// mysql_db.js

user: "root"

// knexfile.js

const knex = require('knex')({
  client: 'mysql',
  connection: {
    host: 'localhost',
    user: 'root',
    password: '',
    database: 'SQL_Data',
  },
});

module.exports = knex;

// knex.js

const path = require('path');

module.exports = {
    development: {
      client: 'mysql',
      connection: {
      filename: '/server/SQL/mysql_db',
    },
    migrations: {
      directory: path.join(__dirname, '/server/SQL/migrations'),
    },
    seeds: {
      directory: path.join(__dirname, '/server/SQL/seeds'),
    },
  },
};

//"迁移定义"

const environment = proces.env.NODE_ENV || 'development';
const config = require('../../knexfile.js')[environment];
module.exports = require(knex)('config');

1 个答案:

答案 0 :(得分:2)

正如错误消息所示,您尝试使用无效凭据登录时,其名称为空的用户不会在DB中存在字符串。

这意味着您的配置错误。你的node-mysql驱动程序配置中有一些奇怪的段,它试图引用其他文件,导出初始化的knex实例

  client: 'mysql',
  connection: {
    filename: '/server/SQL/mysql_db'
  }

这是完全错误的。 knexfile的正确格式与用于创建knex实例的格式基本相同,只是knexfile还支持根据NODE_ENV环境变量选择配置文件。

const path = require('path');

module.exports = {
  development: {
    client: 'mysql',
    connection: {
      host: 'localhost',
      user: 'root',
      password: '',
      database: 'SQL_Data',
    },
    migrations: {
      directory: path.join(__dirname, '/server/SQL/migrations'),
    },
    seeds: {
      directory: path.join(__dirname, '/server/SQL/seeds'),
    },
  },
};

在你的mysql_db中你可能想做类似的事情来初始化knex  能够使用相同的配置:

const knex = require('knex')(
  require('knexfile')[process.env.NODE_ENV || 'development']
);