【问题标题】:installing legacy mysql for older version of Rails为旧版本的 Rails 安装旧版 mysql
【发布时间】:2020-08-26 10:15:59
【问题描述】:

我需要使用 mysql 及其相关数据运行旧的 Rails 4.0 应用程序。 Rails gem 是mysql2 (0.4.2) 数据库数据来自服务器版本5.6.44

bash_profile 有

export PATH="/usr/local/opt/mysql@5.6/bin:$PATH"

捆绑安装过程按预期完成,但在启动服务器时,与数据库的连接失败

rbenv/versions/2.2.10/lib/ruby/gems/2.2.0/gems/mysql2-0.4.2/lib/mysql2/client.rb:87:in `connect': Access denied for user

我尝试通过sql命令调整我的连接机制:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '<password>';

然而,在:

sudo mysql
Password:
ERROR 2059 (HY000): Authentication plugin 'caching_sha2_password' cannot be loaded: dlopen(/usr/local/Cellar/mysql@5.6/5.6.47/lib/plugin/caching_sha2_password.so, 2): image not found

看来我处于某种逻辑循环中,因为caching_sha2_password 没有插件下载

解决办法是什么?

【问题讨论】:

    标签: mysql ruby-on-rails


    【解决方案1】:

    底线:在这种情况下,无法执行以下操作

    create user 'USER_NAME'@'localhost' identified by 'PASSWORD';
    

    因为 Homebrew 有 5.6、5.7 和 8.0 版本,但设置需要 caching_sha2_password 插件(显然是在 5.6 周期的某个时间引入)。虽然 root 没有密码,但由于这个原因,无法以 root mysql -uroot 登录。

    一旦人们承认这是一个该死的如果你做,该死的如果你不做的情况,是时候采取非常规的行动了......

    我尝试通过自制软件安装 5.6 和 8.0 以导入 8 下的 mysql 数据库,但以 5.6 访问它。鲸鱼失败。完全相同的行为:root 总是需要通过 sha2_password 访问。

    解决方案

    1. mysql2 gem 需要一个版本来连接。鉴于应用程序 0.4.2 上的版本,这意味着

      brew install mysql@5.6

    2. 转到https://downloads.mysql.com 并找到合适的社区服务器安装程序以供操作系统运行。安装。此应用程序将允许 root 登录。

    但是现在到数据库的连接必须是下载的应用程序的连接,而不是自制酒桶(那里是为了让应用程序的 gem 运行)。所以.bash_profile需要有

    export PATH=$PATH:/usr/local/mysql/bin
    

    它指向已安装的版本而不是自制版本。

    现在:

    create user 'deploy'@'localhost' identified by 'some_nasty_string';
    bundle exec rails db < my_db.sql
    rails s
    

    继续工作。

    人们还可以思考将 mysql 5.6 数据库导入 8.0 的有趣无缝结果

    [发布给那些必须挖掘旧材料并使其进化并记住这些箍的人。]

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-07
      • 1970-01-01
      • 2018-01-20
      • 2013-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多