【问题标题】:MySQL: Access denied for user 'root@localhost' (using password:NO)MySQL:用户“root@localhost”的访问被拒绝(使用密码:否)
【发布时间】:2019-08-27 16:28:04
【问题描述】:

我在 Ruby on Rails 项目中第一次尝试 MySQL,我试图将它用作我的默认数据库而不是 SQLite。

我已经在我的 Ubuntu 机器上安装了 MySQL 的副本,并且还安装了 mysql2 ruby​​ gem,但是我在为我的项目创建数据库时遇到了困难。

我在用我想要的密码配置 MySQL 的 root 用户后刚刚创建了一个新项目,但是当我尝试运行 rails db:migrate 时,我得到了错误:

拒绝用户“root@localhost”访问(使用密码:否)

我尝试了很多技巧,但似乎都没有奏效。

【问题讨论】:

    标签: mysql ruby-on-rails


    【解决方案1】:

    这是我尝试过的解决方案;

    我尝试通过在终端中运行以下代码来更改 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
    

    但不幸的是,这些都不适合我。

    这对我有用;

    我后来打开了我的 Ruby on Rails 项目的config/database.yml 文件,发现没有为默认 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 代码,这次它运行良好,创建了我的测试和开发数据库

    就是这样。

    我希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-27
      • 2012-06-17
      • 1970-01-01
      • 2020-03-28
      • 1970-01-01
      相关资源
      最近更新 更多