mysql - 为旧版本的 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 周期的某个时间引入)。mysql -uroot
虽然 root 没有密码,但由于这个原因,人们无法以 root 身份登录。
一旦人们承认这是一个该死的如果你做,该死的如果你不做的情况,是时候采取非常规的行动了……
我尝试通过自制软件安装 5.6 和 8.0 以导入 8 下的 mysql 数据库,但以 5.6 访问它。鲸鱼失败。完全相同的行为:root 总是需要通过 sha2_password 访问。
解决方案
mysql2 gem 需要一个版本来连接。鉴于应用程序上的版本
0.4.2
,这意味着酿造安装mysql@5.6
转到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 的有趣无缝结果
[发布给任何必须挖掘旧材料并使其进化并记住这些箍的人。]
推荐阅读
- symfony - 将 Service Worker 集成到 Symfony 项目中的问题
- java - Java 8 Streams - 从流中对类型中的多个值求和
- c - 如何修复函数的隐式声明?
- python - 如何运行 Docker 映像以查看对脚本所做的更改?
- python-3.x - 散景列可按数字排序
- c - 将 int 交换为 c 中的常量
- mysql - 通过 Powershell 在 MySQL 中插入 Null 值
- android - 如何在片段生命周期中仅调用一次 onCreateOptionsMenu
- python - Python - MySQL SELECT 查询使用动态表名获取特定数据
- json - 如果字符串末尾包含“:”,如何用我的键值对替换我的字典键