brew 默认安装的MySQL版本是最新版,但是因为测试需要,得安装一个5.7版本的,brew search mysql之后,看到了mysql@5.7。
==> Formulae
automysqlbackup mysql++ mysql-client@5.7 mysql-connector-c++ mysql@5.7 ✔ mysqltuner
mysql ✔ mysql-client mysql-client@8.0 mysql-search-replace mysql@8.0 qt-mysql
于是直接安装5.7版本
brew install mysql@5.7
安装一切顺利没什么意外,于是尝试开启一下服务,但是无意外的失败了。
因为刚安装的5.7版本用的cnf配置文件和datadir和以前的8.1用的是同一个,等于5.7占用了以前8.1的配置文件和数据目录,暂且不说8.1的文件能不能用,就是这俩哥们公用一个数据目录页是不能接受的啊。
于是研究怎么在本地安装两个版本MySQL,其实说白了就是两个版本各用各的配置文件和数据目录。
配置文件
拷贝一份出来命名为my@5.7.cnf
cp /opt/homebrew/etc/my.cnf /opt/homebrew/etc/my@5.7.cnf
然后修改下配置文件
# 注释掉这一行(如果有)
#mysqlx-bind-address = 127.0.0.1
# 因为要两个MySQL共存,同时启用,所以要修改下5.7版本的端口号和socket
port = 3307
socket = /tmp/mysql.sock2
配置文件的改动就这些
数据目录
这部分因为我安装5.7的时候没有用了以前8.1的数据目录,并没有创建5.7自己的目录,所以得先初始化下这个目录
# 先把目录创建出来(也可能不用手动创建,我没试)
mkdir /opt/homebrew/var/mysql@5.7
# 初始化目录
./mysqld --defaults-file=/opt/homebrew/etc/my@5.7.cnf --initialize --user=mysql --datadir=/opt/homebrew/var/mysql@5.7 --basedir=/opt/homebrew/opt/mysql@5.7
brew service修改
因为要靠brew管理MySQL的启用和停止,所以还得修改下brew相关脚本
主要是两个文件
- /opt/homebrew/opt/mysql@5.7/homebrew.mysql@5.7.service
- /opt/homebrew/opt/mysql@5.7/homebrew.mxcl.mysql@5.7.plist
homebrew.mysql@5.7.service修改如下
[Unit]
Description=Homebrew generated unit for mysql@5.7
[Install]
WantedBy=default.target
[Service]
Type=simple
ExecStart=/opt/homebrew/opt/mysql@5.7/bin/mysqld_safe --defaults-file=/opt/homebrew/etc/my@5.7.cnf --datadir\=/opt/homebrew/var/mysql@5.7
Restart=always
WorkingDirectory=/opt/homebrew/var/mysql@5.7
homebrew.mxcl.mysql@5.7.plist修改如下
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>KeepAlive</key>
<true/>
<key>Label</key>
<string>homebrew.mxcl.mysql@5.7</string>
<key>LimitLoadToSessionType</key>
<array>
<string>Aqua</string>
<string>Background</string>
<string>LoginWindow</string>
<string>StandardIO</string>
<string>System</string>
</array>
<key>ProgramArguments</key>
<array>
<string>/opt/homebrew/opt/mysql@5.7/bin/mysqld_safe</string>
<string>--defaults-file=/opt/homebrew/etc/my@5.7.cnf</string>
<string>--datadir=/opt/homebrew/var/mysql@5.7</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>WorkingDirectory</key>
<string>/opt/homebrew/var/mysql@5.7</string>
</dict>
</plist>
到此如无意外就可以用brew分别启用两个MySQL了。
brew services start mysql
brew services start mysql@5.7
注意
如果安装第二个版本的MySQL时把原先版本的cnf文件和datadir目录污染了,可能需要下面的命令修复
修复datadir
./mysqld --defaults-file=/opt/homebrew/etc/my@5.7.cnf --initialize --user=mysql --datadir=/opt/homebrew/var/mysql@5.7 --basedir=/opt/homebrew/opt/mysql@5.7
./mysqld --defaults-file=/opt/homebrew/etc/my.cnf --initialize --user=mysql --datadir=/opt/homebrew/var/mysql --basedir=/opt/homebrew/opt/mysql
这个命令执行后会清空datadir目录,注意提前备份数据,且这个命令会重新生成密码,注意保存。
修复cnf
mysql8.1的配置文件被重置后,pdo连接MySQL可能会报下面的错误
PDO::__construct(): The server requested authentication method unknown to the client [caching_sha2_password]
修复方式
编辑my.cnf在[mysqld]中添加下边的代码
default_authentication_plugin=mysql_native_password
参考
