我正在尝试使用Homebrew设置多个MySQL版本。我已经使用了MySQL 8.*,它运行良好。但是,由于今天的一些旧的项目需求,我已经安装了另一个版本的MySQL (5.7)。现在,当我切换到mysql@5.7时,它会给出以下错误。
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
两个版本的MySQL都是使用国产安装的。
/usr/local/Cellar/mysql/8.0.33/*
/usr/local/Cellar/mysql@5.7/5.7.42/*
它们的符号链接在/usr/local/opt/*
中
我修改了 have brew.mxcl.mysql@5.7.plist,如下所示。
...
...
/usr/local/opt/mysql@5.7/bin/mysqld_safe
--datadir=/usr/local/var/mysql
RunAtLoad
WorkingDirectory
/usr/local/var/mysql
...
...
/usr/local/opt/mysql@5.7/bin/mysqld_safe
--datadir=/usr/local/var/mysql57
RunAtLoad
WorkingDirectory
/usr/local/var/mysql57
为了在不同版本之间切换,我在~/.zhsrc
中设置了一个别名
# MySQL Version Switching
mysqlv() {
brew services stop mysql
brew services stop mysql@5.7
brew unlink mysql mysql@5.7
brew link --force --overwrite $1
brew services start $1
}
alias mysql57="mysqlv mysql@5.7"
alias mysql80="mysqlv mysql"
export PATH="/usr/local/opt/mysql@5.7/bin:$PATH"
稍后,我将根用户的密码设置为none,并使用以下查询。
SET PASSWORD FOR root@localhost='';
现在,当我运行别名mysql57
时,它切换并链接了MySQL版本,但是当我尝试登录到mysql -uroot
时,它会出现以下错误。
ERROR 2002 (HY000): Can't connect to local MySQL server through socket
有人能帮我解决这个问题吗?这样我就可以切换和使用任何版本的MySQL。
发布于 2023-06-02 16:45:03
我认为这个问题与以下事实有关:两个mysqld实例似乎都配置为使用相同的套接字文件/tmp/mysql.sock。如果其中一个实例停止时套接字文件未正确删除,则可能会在启动另一个实例时引发问题。
要解决这个问题,有不同的选择:
[mysqld]
socket=/tmp/mysql2.sock
https://serverfault.com/questions/1132501
复制相似问题