我正在Ruby on Rails项目中首次尝试MySQL,我试图将它用作默认数据库而不是SQLite。
我已经在Ubuntu计算机上安装了MySQL副本,还安装了mysql2 ruby gem,但是在为项目创建数据库时遇到了困难。
使用所需的密码配置MySQL的root用户后,我刚刚创建了一个新项目,但是当我尝试运行rails db:migrate
时,出现错误:
拒绝用户'root @ localhost'的访问(使用密码:NO)
我尝试了很多技巧,但似乎都没有用。
答案 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
代码,这次运行良好,创建了我的测试和开发数据库。
仅此而已。
我希望这会有所帮助。