MacOS Catalina下mysqldump 5.7与mysql2 0.5.3的OpenSSL版本冲突求助
解决MacOS Catalina下mysql2 0.5.3与mysqldump 5.7的OpenSSL版本冲突问题
我来帮你搞定这个棘手的版本冲突问题,这在老版本Ruby+Rails搭配MySQL5.7的场景里挺常见的。下面是几个经过验证的可行方案,你可以根据自己的习惯选一个:
方案1:给mysql2 gem指定OpenSSL 1.1路径编译(推荐)
这个方法的核心是让mysql2 gem单独链接OpenSSL 1.1,而系统里的mysqldump继续用OpenSSL 1.0,互不干扰:
- 先通过Homebrew重新安装OpenSSL 1.1:
brew install openssl@1.1 - 配置bundle让mysql2 gem编译时使用这个OpenSSL版本:
bundle config set mysql2.with-openssl-dir $(brew --prefix openssl@1.1) - 重新安装mysql2 gem:
bundle install
这样一来,你的Rails应用调用mysql2的时候会用OpenSSL 1.1,而mysqldump 5.7还是会使用系统默认的OpenSSL 1.0,完美解决冲突。
方案2:用Docker隔离MySQL 5.7(彻底避开本地依赖)
如果不想在本地折腾多个OpenSSL版本,用Docker跑MySQL 5.7是最省心的方式:
- 安装Docker Desktop for Mac(如果你还没装的话)
- 启动一个MySQL 5.7容器:
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=你的数据库密码 --name mysql57 mysql:5.7 - 修改Rails项目的
config/database.yml,指向Docker里的MySQL:default: &default adapter: mysql2 encoding: utf8mb4 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> username: root password: 你的数据库密码 host: localhost port: 3306 - 以后用mysqldump的时候,直接调用容器里的命令:
docker exec -it mysql57 mysqldump -u root -p 你的数据库名 > dump.sql
这个方案完全隔离了本地的OpenSSL依赖,再也不用担心版本冲突问题。
方案3:临时切换环境变量(适合临时调试)
如果你只是偶尔需要切换版本,可以用临时环境变量的方式:
- 先安装OpenSSL 1.1:
brew install openssl@1.1 - 创建一个启动Rails的脚本(比如
start_rails.sh),内容如下:#!/bin/bash export PATH=$(brew --prefix openssl@1.1)/bin:$PATH export LDFLAGS="-L$(brew --prefix openssl@1.1)/lib" export CPPFLAGS="-I$(brew --prefix openssl@1.1)/include" rails s - 给脚本加执行权限:
chmod +x start_rails.sh - 每次启动Rails的时候运行这个脚本,平时用mysqldump直接在普通终端里操作就行。
这个方法适合不想修改全局配置的场景,每次启动Rails时临时加载OpenSSL 1.1的环境。
内容的提问来源于stack exchange,提问作者Christiano Matos
相关产品推荐
相关产品推荐

