首页 > 解决方案 > 为旧版本的 Rails 安装旧版 mysql

问题描述

我需要使用 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

解决这个问题的方法是什么?

标签: mysqlruby-on-rails

解决方案


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

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

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

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

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

解决方案

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

    酿造安装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 的有趣无缝结果

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


推荐阅读