为旧版本的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没有插件下载

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

底线:在这种情况下,不能执行以下

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

因为Homebrew有5.6、5.7和8.0版本,但这些版本的设置需要caching_sha2_password插件(显然是在5.6周期的某个时候引入的(。尽管root没有密码,但由于这个原因,用户不能以rootmysql -uroot的身份登录。

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

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

解决方案

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

    brew安装mysql@5.6

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

但现在到数据库的连接必须是到下载的应用程序的连接,而不是自制的keg(它允许应用程序的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

继续工作。

人们还可以思考将mysql5.6数据库导入8.0 的无缝结果

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

最新更新