Homebrew: brew upgrade broke mysql
Homebrew: brew upgrade broke mysql
how to fix it
- if your old mysql-version is 8.0 or 8.4
just uninstall new version ,and reinstall the old one. `
brew uninstall mysql
# when uninstall is done, then
brew install [email protected]
if old version is 8.3 (or any version between 8.0 ~ 8.4)
well, this will be a little tricky.
Step1: brew uninstall MySQL
Step2: find the raw
mysql.rb
of your old version MySQL in homebrew-github histroysomething like this:
https://raw.githubusercontent.com/Homebrew/homebrew-core/7ad73d43746c58a74ad73fc33718e2a153af5963/Formula/m/mysql.rb
then download this file(wget or curl or whatever you like), then :
brew install ./the-file-you-just-download
Don't just run
brew install {url}
, brew don't allow that anymore.Step3: if mysql still not working, check log
log file usually is
/usr/local/var/mysql/localhost.err
, read it and try to find.../lib/libicuuc.73.dylib' (no such file)
something like this.It means
brew upgrade
also break MySQL's Depend on, this will be awful.For Example,
.../lib/libicuuc.73.dylib' (no such file)
means icu4c dependency is also broke. MySQL 8.3 needicu4c@73
, but brew will auto install the latest version which isicu4c@76
. so U need installicu4c@73
or upgrade your MySQL to a new version which depend onicu4c@76
.well, the
upgrade
way obvious will not work, that's why we are here.So, install
icu4c@73
, you need searchhttps://github.com/Homebrew/homebrew-core/tree/master/Formula/i
histroy to findicuc@73
's raw file.Once U find it, download it, uninstall icu4c@76 and install icu4c@73 by this file.
If there is anther dependency problem, U can fix it just like this: check the log, find what's broken, reinstall it.
if your old version is below 8.4, but you want upgrade to 9.0(latest version)
first, your need install [email protected],and at least run it once. so MySQL can update your date to 8.4.
Once the [email protected] is working, stop it and
brew upgrade mysql
。other ways may work
delete mysql completely, include your data(back up first),then reinstall it.
this will skip "mysql update data into new verion" part, and some plugin missing issue. so your new mysql will work.
MacOS old version
If u can't install [email protected] (even 9.0), because cmake progress get errors.
Use Docker.
中文
建议最近不要通过 brew upgrade
升级 MySQL,会因为各种原因导致 MySQL 无法启动。
造成这个影响的原因简单的说就是: brew 的默认行为 + MySQL 近期的迷之版本迭代导致的。
brew 默认拉最新版本,然后 MySQL 最近 8.0 不兼容高版本,9.0 安装前必须至少运行过一次 8.4 版本。 一但你手欠运行了一次 brew upgrade
并且本地版本处于一个尴尬的位置,比如8.3,那就很麻烦了,你会发现 MySQL 无法运行... 如果再叠加老 mac 的 macOS 版本太低(< macOS 14)且无法更新,那新版本你很可能还装不了,会遇到各种编译错误。
个人建议解决办法,退回到自己的老版本,pin 住先用着,适用于老系统安装 [email protected]
时直接编译错误无法安装的情况。
以 8.3 版本为例,先 brew uninstall mysql
,然后去 brew 的 github 仓库(链接上面有)找 mysql.rb 的历史版本,然后下载该 raw 文件,然后 brew install 你下载的文件
。
老版本安装后依然无法运行,那大概率是依赖也坏了,检查 mysql 的日志 /usr/local/var/mysql/localhost.err
,看看启动失败的原因是什么,有可能是什么 version 无法降级/升级,那就是我前面说的 MySQL 自动升级/降级数据时遇到错误了,说明你安装的版本跟你原来的不兼容。如果是类似 .../lib/libicuuc.73.dylib' (no such file)
这种,说明依赖版本有问题,比如这个就是 MySQL 8.3 需要 icu4c@73
,但 brew 在安装 icu4c
依赖时默认安装了最新的 icu4c@76
,那必然找不到文件,还是去翻仓库的历史纪录,找到 icu4c@73
对应的 raw 文件,下载并安装。
注意: 必须先把 raw 文件下载到本地再安装,因为 brew 出于安全原因已经不允许 brew install {url}
这种方式了。
如果老 mac 还想用 MySQL 8.4 以上版本咋办? 在 Docker 里装然后把数据导过去。
另外一种情况,你可以安装新版本,只是无法完成数据自动升级的环节。那么你只要在老版本把数据导出,将旧的 MySQL 以及数据完全删除,重新装新版本,重新设置并导入数据即可。
补充
通过 brew install
安装 MySQL 时,它的数据和程序是分离的,也就是说你通过 brew uninstall mysql
并不会删除你数据库的内容,包括账号密码这些。
当你通过 brew 更新 MySQL 时,尤其是跨版本更新时,新的 MySQL 首次运行时会自动加载原有数据,如果发现版本不对就会自动把数据转换为当前版本格式,有时是升级有时是降级,但这个过程并不是所有情况都能正确转换,就比如 8.0 ~ 8.4 ~ 9.0 就会遇到各种问题,然后它转换不了就打个日志退出了,看起来就是无法启动。
除此之外还涉及的到一些插件的缺失也会导致无法启动 or 无法链接数据库的情况,这是因为不同版本登录方式不同,你升级前还是旧的登录方式,升级后 MySQL 压根不支持这种方式登录了,自然也会失败。