Rails应用程序拒绝用户root@localhost访问mysql

Rails应用程序拒绝用户root@localhost访问mysql,mysql,ruby-on-rails,Mysql,Ruby On Rails,我正在运行Linux Ubuntu 18.04.5、mysql服务器版本5.7.31和Rails 6.0.3.4 我用rails新的经典模式-d mysql-T制作了我的新应用程序 这是它为我生成的database.yml文件: default: &default adapter: mysql2 encoding: utf8mb4 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> usern

我正在运行Linux Ubuntu 18.04.5、mysql服务器版本5.7.31和Rails 6.0.3.4

我用
rails新的经典模式-d mysql-T制作了我的新应用程序

这是它为我生成的
database.yml
文件:

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

development:
  <<: *default
  database: classic_models_development

test:
  <<: *default
  database: classic_models_test

production:
  <<: *default
  database: classic_models_production
  username: classic_models
  password: <%= ENV['CLASSIC_MODELS_DATABASE_PASSWORD'] %>
我认为配置文件没有为开发数据库指定密码是可以的,因为当我运行
sudomysql-p
时,只要在提示我输入密码时按ENTER键,就可以访问mysql提示符。我还运行了一些其他命令来显式地将密码设置为空字符串,以确保这不是问题所在

我尝试将
host:localhost
添加到配置文件的默认部分,但没有改变任何内容。我还尝试将
host:127.0.0.1
添加到配置文件中,但也没有帮助

当我运行
sudo mysqladmin variables | grep socket
时,显示的套接字字符串是:
/var/run/mysqld/mysqld.sock
,我认为这意味着配置文件的套接字位是正确的

当我运行
netstat-an | grep 3306
时,会出现地址
127.0.0.1:3306
LISTEN
,我想这意味着它正在正确的端口上侦听

我能想到的另一件可能相关的事情是,当我运行
mysql
mysql-p
时,前面没有
sudo
,我得到的错误包含相同的字符串:
拒绝用户'root'@'localhost'的访问。

几个小时以来,我一直在梳理其他关于同一问题的线索,尝试不同的方法,但没有找到解决方案。请不要将此问题标记为重复问题并链接到任何其他页面


如果有人能建议我做些别的尝试,我将不胜感激。

您必须先在mysql中为root用户设置密码。为此,请遵循以下步骤

步骤1:使用root用户登录MySQL。当mysql要求输入密码时,只需按enter键

$ sudo mysql -u root -p
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassword';
步骤2:为根用户设置密码。请用所需密码替换
NewPassword
。设置此命令后,请执行步骤1,当系统询问密码时,请输入新密码并按enter键

$ sudo mysql -u root -p
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassword';
步骤3:在
数据库.yml
文件中使用此密码

# config/database.yml

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

development:
  <<: *default
  database: classic_models_development

test:
  <<: *default
  database: classic_models_test

production:
  <<: *default
  database: classic_models_production
  username: classic_models
  password: <%= ENV['CLASSIC_MODELS_DATABASE_PASSWORD'] %>
#config/database.yml
默认值:&默认值
适配器:mysql2
编码:utf8mb4
游泳池:
用户名:root
密码:NewPassword
套接字:/var/run/mysqld/mysqld.sock
发展:

嗨,这没用。我遵循了这些步骤,但在尝试运行“railsdb:create”时仍然出现“拒绝用户'root'@'localhost'访问”错误。我确保将文件中的密码设置为我在查询中输入的相同字符串。我还确保在运行查询后离开mysql提示符,并使用新密码重新登录。我注意到,当我在mysql提示符中运行“ALTER USER[…]”查询时,结果是:“查询OK,0行受影响(0.00秒)”。这是否意味着什么都没有发生?我仍然能够在没有密码的情况下登录mysql提示符(以及使用新的pw)。您好,您可以卸载mysql并重新安装。然后按照步骤进行。我卸载了mysql,重新安装了它,在安装过程中设置了根密码,安装完成后发现一切正常,我在Rails文件中设置了新密码。我一定是在第一次安装mysql时出错了(或者后来在mysql提示符中将密码设置为空字符串时)。不管是什么问题,现在都结束了。非常感谢你的帮助。我很高兴帮助你。:)