无法通过套接字自制程序连接到本地MySQL服务器


109

我最近尝试使用自制软件(brew install mysql)安装MySQL,当我尝试运行它时,出现以下错误:

错误2002(HY000):无法通过套接字'/tmp/mysql.sock'连接到本地MySQL服务器(2)

没有/tmp/mysql.sock也没有/var/lib/mysql.sock

我已经搜索过,但是没有找到任何mysql.sock文件。

我怎样才能解决这个问题?


您可以看到此链接GeekHades的答案。stackoverflow.com/questions/4847069/…–
GeekHades

在我的笔记本电脑电池耗尽并强制不完全关机后,我brew安装了mysql并遇到了同样的问题。值得运行mysqld检查并确保MySQL上次正确关闭。如果关机“脏”(例如,如果笔记本电池强制关闭系统),则应将其清除。然后,您可以再次启动MySQL服务器:mysql.server start
戴夫·埃弗里特

1
这个答案对我
有用

从Time Machine备份还原新的Mac Mini后,这对我来说是发生了。我必须卸载mysql@5.7并重新安装它才能开始工作。咬了一下锤子,但由于我的所有配置都得以保留,因此相对而言比较轻松。
约书亚品特

Answers:


93

当您通过运行服务器时

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一起愉快地工作。

归功于亨利


1
这也解决了我的问题,Wordpress无法连接到mySQL。再次感谢
Ayoub

20
当我尝试mysql.server start,我得到ERROR! The server quit without updating PID file (/usr/local/var/mysql/lyahdav-C02R32HCG8WM.pid)。我需要通过进行安装的旧版MySQL brew install mysql@5.6
Liron Yahdav

3
运行。mysql.server start为我修复了该问题
ivange94

@Liron,您是否解决了您面临的问题?我没有帮助也面临着同样的问题。
好友

@EB已经有一段时间了,因为我遇到了这个问题,但是回头看我的评论,您尝试了解决方法来安装旧版本的MySQL?除此之外,不幸的是我没有想法。
利隆·雅达夫

61

看起来您的mysql服务器未启动。我通常运行s​​top命令,然后再次启动它:

mysqld stop
mysql.server start

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


89
。错误!服务器退出而不更新PID文件(/usr/local/var/mysql/myHostName.pid)。?
Pesulap

我在mysqld &上面的评论中做了一个评论,但我认为它可能会做同样的事情,因为mysqld stop 我很确定这是由于关闭不当造成的。
米奇·范杜因

54

我从另一个mysql(8.0)安装中保留了一些目录,这些目录未删除。

我通过执行以下操作解决了这个问题:

首先卸载mysql

brew uninstall mysql@5.6

删除未删除的文件夹/文件

rm -rf /usr/local/var/mysql
rm /usr/local/etc/my.cnf

重新安装mysql并链接

brew install mysql@5.6
brew link --force mysql@5.6

启用并启动服务

brew services start mysql@5.6

3
非常感谢:)所有指令都失败了,但是您的指令失败了
Vyacheslav Loginov '19

1
谢谢你-这个答案结束了24小时的头部撞墙
vladiim

1
在尝试了所有其他方法之后,这也对我有用!谢谢!!!!:)
Eric

1
对我来说,问题似乎是在先前的安装之后我仍然有/ usr / local / var / mysql。去除了把戏!感谢您的建议。
themantimes8 '19

在此错误消失之前,我需要运行homebrew提到的“ mysql_secure_installation”步骤。
searaig

27

尝试使用“ 127.0.0.1”而不是“ localhost”进行连接。


2
@Esteban如果您告诉它连接到“ localhost”,MySQL将尝试连接到Unix套接字。如果告诉它连接到127.0.0.1,则将强制其连接到网络套接字。因此,可能您已将MySQL配置为仅侦听网络套接字,而不侦听文件系统套接字。(资料来源:serverfault.com/a/295300/59101
Ardee Aram

当我在本地主机上运行到我的远程MySQL数据库的SSH隧道时,这帮助我强制mysql客户端使用TCP套接字。
Iow

22

1)如果在执行以下命令时能够看到“ mysql stop”;

brew services list

2)并且如果您能够使用以下命令启动mysql;

mysql server start

这表示; mysql能够手动启动,但是在操作系统启动时它不会自动启动。将mysql添加到服务将解决此问题。为此,可以在命令下面运行;

brew services start mysql

之后,您可以重新启动操作系统,然后尝试连接到mysql以查看它是否自动启动。我做了同样的事情,不再收到以下错误;

错误2002(HY000):无法通过套接字'/tmp/mysql.sock'连接到本地MySQL服务器(2)

我希望这有帮助。


@berk对我的情况有所帮助,但是却提示另一个错误“错误1045(28000):用户'user'@'localhost'的访问被拒绝(使用密码:NO)'
Pratik Khadka

@PratikKhadka,您好,您现在遇到的错误表明mysql正在运行,并且您存在身份验证问题。根据您发布的错误消息,您使用用户名作为“用户”,并且不使用密码。您应该使用有效的用户名和密码。我建议您检查以下链接;“ forums.mysql.com/read.php?34,140320,140324
伯克

无需重新启动操作系统,只需运行“ brew services start mysql”即可。谢谢!
AKS

嗨,@ AKS,您是对的。不需要重新启动就可以正常工作。我编辑了答案,以解释为什么需要重新启动。启动操作系统时,需要查看mysql是否自动启动。感谢您的反馈!
Berk

5

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

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

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

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

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

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

sudo mysql.server start

很好,谢谢。我只是运行了mysql.server startmysql.server stop然后通过再次通过自制程序启动了服务brew services start mysql@5.7,一切运行顺利。
taylorthurlow

4

在安装macos mojave之后,必须先擦除mysql文件夹/usr/local/var/mysql,然后通过brew install mysql其他方式重新安装,否则权限相关的事情将随处出现。


我用您的答案解决了我的问题,我以前安装了mysql,然后尝试降级到mysql@5.6
Rodrirokr

多谢,伙计。它也解决了我的问题。删除/ usr / local / var / mysql并重新安装对我来说是解决方案。
奥古兹灿Sertel

1
当心:删除/usr/local/var/mysql您还将删除所有现有数据库!
Leonardo

3

我遇到了同样的错误,这就是帮助我的原因:

$ln -sfv /usr/local/opt/mysql/*.plist ~/Library/LaunchAgents
$launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist
$mysql -uroot
mysql>

3

只是为了补充这些答案,就我而言,我没有本地的mySQL服务器,它在docker容器中运行。因此套接字文件不存在,“ mysql”客户端将无法访问。

sock文件由mysqld创建,并且mysql使用它与之通信。但是,如果您的mySql服务器不在本地运行,则不需要sock文件。

通过指定主机名/ IP,不需要袜子文件,例如

mysql --host=127.0.0.1 --port=3306 --user=xyz --password=xyz

3

由于我花了很多时间尝试解决此问题,并且在查找此错误时总是返回此页面,因此我将解决方案留在这里,希望有人可以节省我失去的时间。尽管就我而言,我使用的是mariadb而不是MySql,但您仍然可以根据自己的需求调整此解决方案。

我的问题

是相同的,但是我的设置有点不同(用mariadb代替mysql):

用自制软件安装mariadb

$ brew install mariadb

启动守护程序

$ brew services start mariadb

尝试连接并出现上述错误

$ mysql -uroot
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

我的解决方案

找出使用了哪些my.cnf文件mysql(如本注释中所建议):

$ mysql --verbose --help | grep my.cnf
/usr/local/etc/my.cnf ~/.my.cnf
                        order of preference, my.cnf, $MYSQL_TCP_PORT,

检查Unix套接字文件运行的位置(几乎为描述这里):

$ netstat -ln | grep mariadb
.... /usr/local/mariadb/data/mariadb.sock

(您可能希望grep mysql代替mariadb)

将找到的套接字文件添加到~/.my.cnf(如果需要,请创建该文件)(假设从上面~/.my.cnf运行mysql --verbose ...-command 时列出了该文件):

[client]
socket = /usr/local/mariadb/data/mariadb.sock

重新启动您的mariadb:

$ brew services restart mariadb

之后,我可以运行mysql并得到:

$ mysql -uroot
ERROR 1698 (28000): Access denied for user 'root'@'localhost'

因此,我改为使用超级用户特权运行命令,并在输入密码后得到:

$ sudo mysql -uroot
MariaDB [(none)]>

笔记:

  1. 我对必须在何处添加套接字的组不太确定,首先我有[client-server],但后来我认为[client]应该足够了。因此,我对其进行了更改,但它仍然有效。

  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. 在提出这一点之前,我有时还会做其他答案中提到的事情。


2

您需要运行mysql_install_db-最简单的方法是如果您位于安装目录中:

$ cd /usr/local/Cellar/mysql/<version>/ 
$ mysql_install_db

或者,您可以mysql_install_db输入basedir类似以下的参数:

$ mysql_install_db --basedir="$(brew --prefix mysql)"

2

通过遵循以下教程,我在Mac上遇到了相同的问题并解决了该问题

https://mariadb.com/resources/blog/installing-mariadb-10116-mac-os-x-homebrew

但是在继续操作之前,请不要忘记杀死或卸载旧版本。

命令:

brew uninstall mariadb

xcode-select --install

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" - See more at: https://mariadb.com/resources/blog/installing-mariadb-10116-mac-os-x-homebrew#sthash.XQoxRoJp.dpuf

brew doctor

brew update

brew info mariadb

brew install mariadb

mysql_install_db

mysql.server start

1
请通过一些简短的示例来说明您提供的链接如何帮助您。链接可能会消失,因此这可能是您的答案可能被删除的原因。
Kurt Van den Branden

2

重新启动后,我无法连接到本地mariadb,搜索也将我带到了此页面,我想与您分享我的解决方案。

我注意到/ usr / local / etc /中的目录my.cnf.d丢失了。

这是自制软件的一个已知错误,此处已描述并解决。https://github.com/Homebrew/homebrew-core/issues/36801

快速修复方法:mkdir /usr/local/etc/my.cnf.d


这对我有用。brew update重新启动后无法连接到本地mariadb 。brew services list结果started以黄色显示mariadb状态。谢谢你的提示。
nterms

1

当运行mysql_secure_installation并输入新密码时,我得到了:


错误:无法通过套接字“ /tmp/mysql.sock”连接到本地MySQL服务器(2)


我从这个答案尝试以下内容时注意到:

netstat -ln | grep mysql

它没有返回任何内容,我认为这意味着没有.sock文件。

因此,我在my.cnf文件中添加了以下内容(在/etc/my.cnf中,或者在我的情况下为/usr/local/etc/my.cnf中)。

下:

[mysqld]
socket=/tmp/mysql.sock

下:

[client]
socket=/tmp/mysql.sock

这是基于这篇文章

然后再次停止/启动mysql 并重mysql_secure_installation,最后让我输入新的root密码并继续其他设置首选项。

我希望这可以帮助别人。老兄,我讨厌这个东西


0

只是为了完成该线程。因此MAMP(PRO)经常使用

这里的路径是

/Applications/MAMP/tmp/mysql/mysql.sock

0

我通过初始化数据库然后启动它,在系统首选项窗格中手动启动了mysql。这解决了我的问题。


0

就我而言,罪魁祸首是在日志文件中找到的:

$ tail /usr/local/var/mysql/<hostname>.lan.err
2019-09-19  7:32:21 0 [ERROR] InnoDB: redo log file './ib_logfile0' exists. Creating system tablespace with existing redo log files is not recommended. Please delete all redo log files before creating new system tablespace.
2019-09-19  7:32:21 0 [ERROR] InnoDB: Database creation was aborted with error Generic error. You may need to delete the ibdata1 file before trying to start up again.

因此,我改名ib_logfile0以消除错误(ib_logfile1此后,我必须做同样的事情)。

mv /usr/local/var/mysql/ib_logfile0 /usr/local/var/mysql/ib_logfile0_bak
mv /usr/local/var/mysql/ib_logfile1 /usr/local/var/mysql/ib_logfile1_bak
brew services restart mariadb

0

我有同样的问题。在尝试所有这些方法均未成功后,我执行了以下操作:

tail -f the-mysql-or-maria-db-error-file.err

在另一个控制台中:

brew services restart mariadb

我看到以下错误:

“ MAC HOMEBREW崩溃恢复失败。请纠正问题(例如,由于内存不足错误)并重新启动,或者删除tc日志并使用mysqld启动”

所以我改变了tc.log种族tc.log.txt,重新启动mariadb

brew services restart mariadb

并做了!



0

对我来说,我mariadb很久以前就安装了,然后又安装了mysql@5.7

执行时mysql -uroot,出现错误: ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

阅读答案:

  • 我卸载了 mariadb
  • 删除文件夹 /usr/local/var/mysql
  • 跑命令 mysqld --initialize

然后我能够 mysql -uroot -p


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.