macOS brew 安装两个版本的MySQL

05-17 10:59 字数 3741 阅读 296 已编辑

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启用成功

注意

如果安装第二个版本的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

参考

https://www.shiqidu.com/d/358

1人点赞>
关注 收藏 改进 举报
0 条评论
排序方式 时间 投票
快来抢占一楼吧
请登录后发表评论
站长 @ 十七度
文章
382
粉丝
23
喜欢
194
收藏
31
排名 : 1
访问 : 132.54万
私信