无法通过socket homebrew连接到本地MySQL服务器

soc*_*man 97 mysql homebrew

我最近尝试使用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一起工作愉快.

归功于亨利

  • 当我尝试`mysql.server start`时,我得到了'错误!服务器退出而不更新PID文件(/usr/local/var/mysql/lyahdav-C02R32HCG8WM.pid)`.我需要一个旧版本的MySQL,通过`brew install mysql @ 5.6`安装. (16认同)
  • 运行.`mysql.server start`为我修复了它 (3认同)

jes*_*uis 62

看起来你的mysql服务器没有启动.我通常运行s​​top命令,然后再次启动它:

mysqld stop
mysql.server start
Run Code Online (Sandbox Code Playgroud)

同样的错误,这对我有用.

  • .错误!服务器退出而不更新PID文件(/usr/local/var/mysql/myHostName.pid).? (81认同)

Isw*_*San 26

尝试使用"127.0.0.1"而不是"localhost"进行连接.

  • @Esteban MySQL会尝试连接到unix套接字,如果你告诉它连接到"localhost".如果您告诉它连接到127.0.0.1,则强制它连接到网络套接字.因此,您可能已将MySQL配置为仅侦听网络套接字而不是文件系统套接字.(来源:http://serverfault.com/a/295300/59101) (2认同)

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)

  • 这个对我有用。从8版本降到5.6版本 (2认同)
  • 对我来说问题似乎是在上次安装后我仍然有 /usr/local/var/mysql 。删除就成功了!感谢您的建议。 (2认同)

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)

我希望这有帮助.


din*_*dum 9

由于我花了相当多的时间试图解决这个问题,并且在查找这个错误时总是回到这个页面,所以我将我的解决方案留在这里,希望有人能节省我失去的时间。尽管就我而言,我使用的是 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)

笔记:

  1. 我不太确定必须添加套接字的组,首先我有它[客户端-服务器],但后来我认为[客户端]应该足够了。所以我改变了它,它仍然有效。

  2. 运行时mariadb_config | grep socket我得到: --socket [/tmp/mysql.sock] 这有点令人困惑,因为这似乎/usr/local/mariadb/data/mariadb.sock是实际的地方(至少在我的机器上)

  3. /usr/local/mariadb/data/mariadb.sock我想知道我可以在哪里配置它,/tmp/mysql.sock这样我就可以使用默认设置,而不必编辑我的.my.cnf(但我现在太累了,无法弄清楚......)

  4. 在提出这个之前,我有时也做了其他答案中提到的事情。


Gnr*_*zik 5

安装macos mojave后,必须擦除下面的mysql文件夹/usr/local/var/mysql,然后通过重新安装brew install mysql,否则权限相关的东西会出现在各处。

  • 注意:删除 `/usr/local/var/mysql` 您还将删除所有现有数据库! (2认同)

Tyl*_*ers 5

该文件/tmp/mysql.sock可能是一个命名管道,因为它位于一个临时文件夹中。命名管道是一个永不永久存储的特殊文件。

如果我们创建两个程序,并且希望一个程序向另一个程序发送消息,则可以创建一个文本文件。我们有一个程序在文本文件中写东西,而另一个程序读了我们另一个程序写的东西。这就是管道,只是管道不会将文件写入我们的计算机硬盘,IE不会永久存储文件(就像我们在创建并保存文件时所做的那样)。

套接字与管道完全相同。区别在于套接字通常在计算机之间的网络上使用。套接字将信息发送到另一台计算机,或从另一台计算机接收信息。管道和套接字都使用一个临时文件进行共享,以便它们可以“通信”。

在这种情况下,很难分辨正在使用哪个MySql。没关系。

该命令mysql.server start应使“服务器”(程序)运行无限循环,该循环将创建该特殊文件并等待更改(listen用于写入)。

之后,一个常见的问题可能是MySql程序没有在您的计算机上创建文件的权限,因此您可能必须赋予它root特权。

sudo mysql.server start
Run Code Online (Sandbox Code Playgroud)