mysql - MySQL:用户“root@localhost”的访问被拒绝(使用密码:否)
问题描述
我在 Ruby on Rails 项目中第一次尝试 MySQL,我试图将它用作我的默认数据库而不是 SQLite。
我已经在我的 Ubuntu 机器上安装了 MySQL 的副本,并且还安装了 mysql2 ruby gem,但是我在为我的项目创建数据库时遇到了困难。
在使用所需密码配置 MySQL 的 root 用户后,我刚刚创建了一个新项目,但是当我尝试运行时rails db:migrate
,出现错误:
用户“root@localhost”的访问被拒绝(使用密码:否)
我尝试了很多技巧,但似乎都没有奏效。
解决方案
这是我尝试过的解决方案;
我尝试通过在终端中运行以下代码来更改 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
再次运行代码,这次它运行良好,创建了我的测试和开发数据库。
就这样。
我希望这有帮助。
推荐阅读
- python - 重复,drop_duplicates 故障
- rust - Jemalloc、Debug Symbol 和 Panic 消耗了多少内存?怎么找到这个?它位于哪里?
- c# - 实体框架类型中的每个属性名称必须是唯一的
- python - 使用霍夫变换检测圆
- python - 熊猫合并中的vlookup行为
- logging - 根据日期前缀拆分文件?
- javascript - 我收到“第 2 行错误,字符 4:解析错误。预期的主表达式”
- networking - C#如何获取网络适配器指标?
- xamarin.forms - Xamarin iOS 中的 PayUMoney 集成
- asp.net-core - 使用 IdentityServer4 使用授权中间件保护静态文件