我正在尝试使用 Homebrew 设置多个 MySQL 版本。我已经在使用 MySQL 8.*,它运行良好。但是,由于今天的一些旧项目要求,我安装了另一个版本的 MySQL (5.7)。现在当我切换到[电子邮件保护],它给了我以下错误。
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
请查看以下详细信息
两个版本的 MySQL 均使用以下方式安装自制。
MySQL 8.*(最新)位置
/usr/local/Cellar/mysql/8.0.33/*
MySQL 5.7 位置
/usr/local/Cellar/[email protected]/5.7.42/*
他们的符号链接位于/usr/local/opt/*
我已经修改了[电子邮件保护]如下。
原来的
...
<plist version="1.0">
<dict>
...
<array>
<string>/usr/local/opt/[email protected]/bin/mysqld_safe</string>
<string>--datadir=/usr/local/var/mysql</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>WorkingDirectory</key>
<string>/usr/local/var/mysql</string>
</dict>
</plist>
修改的
...
<plist version="1.0">
<dict>
...
<array>
<string>/usr/local/opt/[email protected]/bin/mysqld_safe</string>
<string>--datadir=/usr/local/var/mysql57</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>WorkingDirectory</key>
<string>/usr/local/var/mysql57</string>
</dict>
</plist>
为了在版本之间切换,我设置了一个别名~/.zhsrc
# MySQL Version Switching
mysqlv() {
brew services stop mysql
brew services stop [email protected]
brew unlink mysql [email protected]
brew link --force --overwrite $1
brew services start $1
}
alias mysql57="mysqlv [email protected]"
alias mysql80="mysqlv mysql"
export PATH="/usr/local/opt/[email protected]/bin:$PATH"
后来我设定密码为了根使用以下查询将用户设置为无。
SET PASSWORD FOR root@localhost='';
现在,当我运行别名时mysql57
,它会切换并链接 MySQL 版本,但是当我尝试登录时mysql -uroot
会出现以下错误。
ERROR 2002 (HY000): Can't connect to local MySQL server through socket
有人能帮我解决这个问题,以便我可以切换并使用任何版本的 MySQL
答案1
我认为这个问题与两个 mysqld 实例似乎都配置为使用相同的套接字文件有关/tmp/mysql.sock。如果在其中一个实例停止时未正确删除套接字文件,则可能会在启动另一个实例时导致问题。
有不同的选项可以解决这个问题:
- 使用 TCP 连接 mysqld 服务器,而不是使用套接字
- 使用 Docker 容器作为 mysql 服务器实例。如果你正在进行 Web 开发,我强烈建议你看一下ddev这使得设置不同版本的 mysqld 变得非常容易。
- 通过修改至少一个实例的 mysqld 配置来为实例配置不同的套接字文件:
[mysqld]
socket=/tmp/mysql2.sock