Mac同时安装5.6和5.7

背景

同时开发多个项目,老项目使用的是mysql5.6,新项目用的mysql5.7版本,通过homebrew安装之后,只能启动其中一个,另一个会失败。

安装

失败原因分析

brew 安装的mysql默认端口号都是3306,数据目录也都是一样的/usr/local/var/mysql,同时启动两个一定会冲突。
所以就要解决方案就是修改他们启动的参数。

mysql默认安装参数

basedir

通过brew安装的软件,路径默认都是在/usr/local/Cellar下边,
我的mysql安装路径是:

  • 5.6
    /usr/local/Cellar/mysql@5.6/5.6.51
  • 5.7
    /usr/local/Cellar/mysql@5.7/5.7.37
启动脚本

在mac上,一般通过brew services list列出所有已安装的软件,通过brew services start mysql@5.6启动mysql。

在mysql的安装路径下,我们可以找到两个文件

  • homebrew.mxcl.mysql@5.6.plist
  • homebrew.mysql@5.6.service

这两个文件配置了我们通过brew start mysql时的默认参数,比如homebrew.mxcl.mysql@5.6.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.6</string>
        <key>ProgramArguments</key>
        <array>
                <string>/usr/local/opt/mysql@5.6/bin/mysqld_safe</string>
                <string>--datadir=/usr/local/var/mysql56</string>
        </array>
        <key>RunAtLoad</key>
        <true/>
        <key>WorkingDirectory</key>
        <string>/usr/local/var/mysql56</string>
</dict>
</plist>

可以看到配置了--datadir参数,也就是mysql数据目录,我们可以通过修改这些参数,达到mysql5.6和5.7使用不同路径的目的

修改5.6和5.7的配置
  • 修改homebrew.mxcl.mysql@5.6.plist
    • 添加<string>--port=3306</string>
    • 修改<string>--datadir=/usr/local/var/mysql56
  • 修改homebrew.mysql@5.7.service
    • 添加ExecStart=/usr/local/opt/mysql@5.6/bin/mysqld_safe --datadir=/usr/local/var/mysql56
    • 修改WorkingDirectory=/usr/local/var/mysql56

同样的,修改mysql5.7的配置

启动失败问题

修改完之后,尝试启动brew services start mysql@5.6,不出意外的话,应该会失败。

可以到对应的数据目录查看启动日志,找到失败原因~~

我的日志在/usr/local/var/mysql56/captain.local.err,报错如下

[ERROR] Fatal error: Can't open and lock privilege tables: Table 'mysql.user' doesn't exist

失败原因
由于这个数据目录是我新建的空目录,里边缺少了mysql自带的权限相关的表,所以需要先对mysql做初始化操作。
在mysql5.6和5.7的初始化操作命令是不同的

  • 5.6
bin/mysql_install_db --user=mysql --basedir=. --datadir=/usr/local/var/mysql56
  • 5.7
bin/mysqld --datadir=/usr/local/var/mysql57/ --initialize --user=mysql

重新启动两个数据库

brew services start mysql@5.6
brew services start mysql@5.7
image.png
修改密码

重置完,mysql没有密码,可以连接mysql,进去之后set password for root@localhost=password("abc123")修改密码

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容