MySQL:用户'root @ localhost'的访问被拒绝(使用密码:NO)

时间:2019-08-27 16:28:04

标签: mysql ruby-on-rails

我正在Ruby on Rails项目中首次尝试MySQL,我试图将它用作默认数据库而不是SQLite。

我已经在Ubuntu计算机上安装了MySQL副本,还安装了mysql2 ruby​​ gem,但是在为项目创建数据库时遇到了困难。

使用所需的密码配置MySQL的root用户后,我刚刚创建了一个新项目,但是当我尝试运行rails db:migrate时,出现错误:

  

拒绝用户'root @ localhost'的访问(使用密码:NO)

我尝试了很多技巧,但似乎都没有用。

1 个答案:

答案 0 :(得分:0)

这是我尝试过的解决方案;

我尝试通过在终端中运行以下代码来更改root用户的root密码

mysql -u root -p
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
FLUSH PRIVILEGES;
quit;

我尝试通过在终端中运行以下代码来删除root用户并使用新密码创建新用户

sudo mysql -u root
DROP USER 'root'@'localhost';
CREATE USER 'root'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
FLUSH PRIVILEGES;
quit;

我尝试通过在终端中运行以下代码,将当前密码策略要求从“中”更改为“低”。

SHOW VARIABLES LIKE 'validate_password%';
SET GLOBAL validate_password_policy = 0;

我尝试通过在终端中运行以下代码来停止并重新启动Ubuntu计算机上的MySQl服务

sudo systemctl stop mysql
sudo systemctl start mysql

但不幸的是,这些都不对我有用。

这是对我有用的;

后来我打开了 Ruby on Rails 项目的config/database.yml文件,意识到没有为默认的根用户名定义密码(密码字段为空)

default: &default
  adapter: mysql2
  encoding: utf8
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: root
  password:
  socket: /var/run/mysqld/mysqld.sock

我要做的就是在密码字段中输入为root用户配置的密码,然后保存。

default: &default
  adapter: mysql2
  encoding: utf8
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: root
  password: mypassword
  socket: /var/run/mysqld/mysqld.sock

然后我再次运行rails db:migrate代码,这次运行良好,创建了我的测试和开发数据库

仅此而已。

我希望这会有所帮助。