Rails应用程序拒绝用户root@localhost访问mysql
我正在运行Linux Ubuntu 18.04.5、mysql服务器版本5.7.31和Rails 6.0.3.4 我用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
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提示符中将密码设置为空字符串时)。不管是什么问题,现在都结束了。非常感谢你的帮助。我很高兴帮助你。:)