我最近尝试使用homebrew(brew install mysql
)安装MySQL,当我尝试运行它时,我收到以下错误:
ERROR 2002(HY000):无法通过套接字'/tmp/mysql.sock'连接到本地MySQL服务器(2)
没有/tmp/mysql.sock
也没有/var/lib/mysql.sock
.
我搜索过,但没有找到任何mysql.sock
文件.
我怎样才能解决这个问题?
AAG*_*AGD 87
当你让服务器运行时
mysql.server start
你应该在/tmp/mysql.sock中看到套接字.但是,系统似乎期望它在/var/mysql/mysql.sock中.要解决这个问题,你必须在/ var/mysql中创建一个符号链接:
sudo mkdir /var/mysql
sudo ln -s /tmp/mysql.sock /var/mysql/mysql.sock
这解决了我.现在我的phpMyAdmin与localhost 和 127.0.0.1一起工作愉快.
归功于亨利
jes*_*uis 62
看起来你的mysql服务器没有启动.我通常运行stop命令,然后再次启动它:
mysqld stop
mysql.server start
Run Code Online (Sandbox Code Playgroud)
同样的错误,这对我有用.
Isw*_*San 26
尝试使用"127.0.0.1"而不是"localhost"进行连接.
Roy*_*l.O 24
我从另一个mysql(8.0)安装中保留了一些目录,这些目录未删除。
我通过执行以下操作解决了这个问题:
首先卸载mysql
brew uninstall mysql@5.6
Run Code Online (Sandbox Code Playgroud)
删除未删除的文件夹/文件
rm -rf /usr/local/var/mysql
rm /usr/local/etc/my.cnf
Run Code Online (Sandbox Code Playgroud)
重新安装mysql并链接
brew install mysql@5.6
brew link --force mysql@5.6
Run Code Online (Sandbox Code Playgroud)
启用并启动服务
brew services start mysql@5.6
Run Code Online (Sandbox Code Playgroud)
Ber*_*erk 20
1)如果你在以下命令下运行时能够看到"mysql stopped";
brew services list
Run Code Online (Sandbox Code Playgroud)
2)如果你能用下面的命令启动mysql;
mysql server start
Run Code Online (Sandbox Code Playgroud)
然后,将mysql添加到服务将解决您的问题.使用此方法,mysql将在您的操作系统启动时作为服务启动.为此,您可以运行以下命令;
brew services start mysql
Run Code Online (Sandbox Code Playgroud)
之后,您可以重新启动操作系统并尝试连接到mysql.我做了同样的事情并停止接收以下错误;
ERROR 2002(HY000):无法通过套接字'/tmp/mysql.sock'连接到本地MySQL服务器(2)
我希望这有帮助.
由于我花了相当多的时间试图解决这个问题,并且在查找这个错误时总是回到这个页面,所以我将我的解决方案留在这里,希望有人能节省我失去的时间。尽管就我而言,我使用的是 mariadb 而不是 MySql,但您仍然可以根据您的需求调整此解决方案。
是一样的,但我的设置有点不同(mariadb 而不是 mysql):
使用自制软件安装 mariadb
$ brew install mariadb
Run Code Online (Sandbox Code Playgroud)
启动了守护进程
$ brew services start mariadb
Run Code Online (Sandbox Code Playgroud)
尝试连接并出现上述错误
$ mysql -uroot
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
Run Code Online (Sandbox Code Playgroud)
找出哪些my.cnf
文件被使用mysql
(按照此评论中的建议):
$ mysql --verbose --help | grep my.cnf
/usr/local/etc/my.cnf ~/.my.cnf
order of preference, my.cnf, $MYSQL_TCP_PORT,
Run Code Online (Sandbox Code Playgroud)
检查 Unix 套接字文件正在运行的位置(几乎如此处所述):
$ netstat -ln | grep mariadb
.... /usr/local/mariadb/data/mariadb.sock
Run Code Online (Sandbox Code Playgroud)
(你可能想要grep mysql
代替 mariadb)
添加您找到的套接字文件~/.my.cnf
(如有必要,创建该文件)(假设在运行上面的 - 命令~/.my.cnf
时列出):mysql --verbose ...
[client]
socket = /usr/local/mariadb/data/mariadb.sock
Run Code Online (Sandbox Code Playgroud)
重新启动你的 mariadb:
$ brew services restart mariadb
Run Code Online (Sandbox Code Playgroud)
之后我可以运行 mysql 并得到:
$ mysql -uroot
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
Run Code Online (Sandbox Code Playgroud)
因此,我使用超级用户权限运行命令,输入密码后,我得到:
$ sudo mysql -uroot
MariaDB [(none)]>
Run Code Online (Sandbox Code Playgroud)
笔记:
我不太确定必须添加套接字的组,首先我有它[客户端-服务器],但后来我认为[客户端]应该足够了。所以我改变了它,它仍然有效。
运行时mariadb_config | grep socket
我得到:
--socket [/tmp/mysql.sock]
这有点令人困惑,因为这似乎/usr/local/mariadb/data/mariadb.sock
是实际的地方(至少在我的机器上)
/usr/local/mariadb/data/mariadb.sock
我想知道我可以在哪里配置它,/tmp/mysql.sock
这样我就可以使用默认设置,而不必编辑我的.my.cnf
(但我现在太累了,无法弄清楚......)
在提出这个之前,我有时也做了其他答案中提到的事情。
安装macos mojave后,必须擦除下面的mysql文件夹/usr/local/var/mysql
,然后通过重新安装brew install mysql
,否则权限相关的东西会出现在各处。
该文件/tmp/mysql.sock
可能是一个命名管道,因为它位于一个临时文件夹中。命名管道是一个永不永久存储的特殊文件。
如果我们创建两个程序,并且希望一个程序向另一个程序发送消息,则可以创建一个文本文件。我们有一个程序在文本文件中写东西,而另一个程序读了我们另一个程序写的东西。这就是管道,只是管道不会将文件写入我们的计算机硬盘,IE不会永久存储文件(就像我们在创建并保存文件时所做的那样)。
套接字与管道完全相同。区别在于套接字通常在计算机之间的网络上使用。套接字将信息发送到另一台计算机,或从另一台计算机接收信息。管道和套接字都使用一个临时文件进行共享,以便它们可以“通信”。
在这种情况下,很难分辨正在使用哪个MySql。没关系。
该命令mysql.server start
应使“服务器”(程序)运行无限循环,该循环将创建该特殊文件并等待更改(listen
用于写入)。
之后,一个常见的问题可能是MySql程序没有在您的计算机上创建文件的权限,因此您可能必须赋予它root特权。
sudo mysql.server start
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
130692 次 |
最近记录: |