微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决Rails应用程序拒绝用户root @ localhost访问mysql

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

我用rails new classic_models -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'] %>

当我运行bundle exec rails db:createrails db:create和其他db:命令时,出现此错误

Access denied for user 'root'@'localhost'
Couldn't create 'classic_models_development' database. Please check your configuration.
rails aborted!
MysqL2::Error: Access denied for user 'root'@'localhost'

我认为配置文件不为开发数据库指定密码是可以的,因为当我运行sudo MysqL -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也会出现,我认为这表示它正在正确的端口上监听。

我想提及的唯一可能与之相关的另一件事是,当我运行MysqLMysqL -p时,前面没有sudo时,出现的错误包含以下相同的字符串: Access denied for user 'root'@'localhost'

我已经花了几个小时来梳理其他问题,试图解决这里遇到的相同问题,但是尝试了不同的方法,但是还没有找到解决方案。请不要将此问题标记为重复,并链接到其他任何页面

如果有人可以提出我可以尝试的其他建议,我将非常感激。

解决方法

您必须首先在mysql中为root用户设置密码。为此,请按照以下步骤操作。

步骤1:以root用户登录MySQL。当mysql要求输入密码时,请按Enter。

$ sudo mysql -u root -p

步骤2:为root用户设置密码。请用您想要的密码替换NewPassword。设置此命令后,请按照步骤1进行操作,当系统要求输入密码时,请输入新密码并按Enter。

ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassword';

第3步:在您的database.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'] %>

我认为这会对您有所帮助。谢谢:-)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。