首页 > 解决方案 > MySQL:用户“root@localhost”的访问被拒绝(使用密码:否)

问题描述

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

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

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

用户“root@localhost”的访问被拒绝(使用密码:否)

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

标签: mysqlruby-on-rails

解决方案


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

我尝试通过在终端中运行以下代码来更改 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;

我尝试通过在终端中运行以下代码将当前密码策略要求从 MEDIUM 更改为 LOW

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

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

sudo systemctl stop mysql
sudo systemctl start mysql

但不幸的是,这些都不适合我。

这对我有用;

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

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再次运行代码,这次它运行良好,创建了我的测试和开发数据库

就这样。

我希望这有帮助。


推荐阅读