132

我最近尝试使用 homebrew ( ) 安装 MySQL,brew install mysql当我尝试运行它时,我收到以下错误:

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

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

我已经搜索并没有找到任何mysql.sock文件。

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

4

23 回答 23

112

当您通过以下方式运行服务器时

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

归功于亨利

于 2013-08-06T20:47:20.570 回答
90

警告,这将擦除您的数据库,如果您希望保留它们,请进行备份

我从另一个 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
于 2019-03-21T19:15:14.393 回答
64

看起来你的mysql服务器没有启动。我通常运行停止命令,然后重新启动它:

mysqld stop
mysql.server start

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

于 2013-04-24T22:13:51.953 回答
28

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

于 2013-02-22T03:43:08.270 回答
23
  1. 如果您在运行以下命令时能够看到“mysql已停止”;

    brew services list
    
  2. 如果您能够使用以下命令启动 mysql;

    mysql server start
    

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

brew services start mysql

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

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

我希望这有帮助。

于 2016-01-10T19:23:30.500 回答
7

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

如果我们制作两个程序,并且我们希望一个程序向另一个程序发送消息,我们可以创建一个文本文件。我们让一个程序在文本文件中写入一些内容,而另一个程序读取我们另一个程序所写的内容。管道就是这样,除了它不会将文件写入我们的计算机硬盘之外,IE 也不会永久存储文件(就像我们在创建文件并保存时所做的那样。)

套接字与管道完全相同。不同之处在于套接字通常在网络上使用——在计算机之间。Socket 向另一台计算机发送信息,或从另一台计算机接收信息。Pipes 和 Sockets 都使用一个临时文件来共享,以便它们可以“通信”。

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

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

之后,一个常见的问题可能是 MySql 程序没有权限在你的机器上创建文件,所以你可能必须给它 root 权限

sudo mysql.server start
于 2018-10-27T22:10:02.267 回答
5

安装macos mojave后,必须擦除mysql文件夹/usr/local/var/mysql,然后重新安装,brew install mysql否则与权限相关的事情会到处出现。

于 2018-10-02T19:07:52.630 回答
4

由于我花了很长时间试图解决这个问题,并且在查找此错误时总是返回此页面,所以我将把我的解决方案留在这里,希望有人能节省我失去的时间。尽管就我而言,我使用的是 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. 在某些时候,我还做了其他答案中提到的事情,然后再提出这个问题。

于 2018-05-23T00:53:11.750 回答
3

我遇到了同样的错误,这对我有帮助:

$ln -sfv /usr/local/opt/mysql/*.plist ~/Library/LaunchAgents
$launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist
$mysql -uroot
mysql>
于 2013-10-08T09:18:38.947 回答
3

如果“mysqld”正在运行,则您的数据可能已损坏。尝试运行这个:

mysqld

阅读数据墙,并检查 mysqld 是否报告数据库已损坏。腐败可能以许多不直观的方式出现:

  • mysql -uroot返回“ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)”。
  • mysql.server start返回“错误!服务器退出而不更新 PID”。
  • Sequel Pro 和 MySQL Workbench 响应他们无法连接到 localhost 或 127.0.0.1 上的 MySQL。

要恢复您的数据,请打开 my.cnf 并在该部分中添加以下行[mysqld]

innodb_force_recovery=1

重启mysqld:

$ brew services restart mysql@5.6

现在您可以连接到它,但它处于有限的只读模式。

如果您使用的是 InnoDB,请运行此命令以导出所有数据:

$ mysqldump -u root -p --all-databases --add-drop-database --add-drop-table > data-recovery.sql

该文件是在您的 ~ 目录中创建的。这可能需要一些时间。

完成后,innodb_force_recovery=1从 my.cnf 中删除,然后以正常模式重新启动 mysql:

$ brew services restart mysql@5.6

删除所有数据库。我使用 Sequel Pro 做到了这一点。这将删除您的所有原始数据。在执行此操作之前,请确保您的 data-recovery.sql 看起来不错。还要考虑备份/usr/local/var/mysql要格外小心。

然后使用以下命令恢复数据库、表和数据:

$ mysql -uroot < ~/data-recovery.sql

这可能是一个漫长的导入/恢复过程。完成后,您就可以开始了!

感谢访问https://severalnines.com/database-blog/my-mysql-database-corrupted-what-do-i-do-now获取恢复说明。该链接有关于 MyISAM 恢复的进一步说明。

于 2020-12-02T04:58:10.423 回答
3

只是为了添加这些答案,在我的情况下,我没有本地 mySQL 服务器,它在 docker 容器中运行。所以套接字文件不存在,“mysql”客户端将无法访问。

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

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

mysql --host=127.0.0.1 --port=3306 --user=xyz --password=xyz
于 2017-09-04T11:21:14.553 回答
3

我在我的 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
于 2016-12-27T11:38:08.770 回答
2

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

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

或者,您可以提供mysql_install_db如下basedir参数:

$ mysql_install_db --basedir="$(brew --prefix mysql)"
于 2016-03-01T19:51:08.597 回答
2

运行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 密码并继续其他设置首选项。

于 2019-08-25T08:42:30.870 回答
2

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

$ 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
于 2019-09-19T13:35:45.213 回答
2

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

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

这是自制软件的一个已知错误,在那里进行了描述和解决。https://github.com/Homebrew/homebrew-core/issues/36801

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

于 2019-08-05T10:51:38.707 回答
1

如果 brew 没有完成“postinstall”,我只需要使用:

sudo chown -R $(whoami) /usr/local/*

然后通过以下方式完成安装后:

brew postinstall mysql@5.7

下一步只需启动 mysql@5.7 服务。

它在 MacOS Monterey 上对我有用。

于 2022-01-12T02:08:08.207 回答
0

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

这里的路径是

/Applications/MAMP/tmp/mysql/mysql.sock
于 2017-10-19T07:32:04.367 回答
0

[ Linux ]

虽然答案预计仅适用于 MacOS,但在 Linux 中我们可能会面临同样的错误。

我在 Linux 中遇到了同样的问题。我运行了这个命令:

sudo /etc/init.d/mysql.server start

我能够运行 MySQL 服务器

参考。https://gist.github.com/vinodpandey/1a4b5b8228f9a000ca236820185fc3bc

于 2021-04-12T09:58:23.523 回答
0

这对我有用:

brew upgrade mysql
于 2020-07-06T23:14:03.120 回答
0

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

于 2019-04-18T10:57:55.467 回答
0

我有同样的问题。在尝试了所有这些方法都没有成功后,我做了以下事情:

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

在另一个控制台中:

brew services restart mariadb

我看到以下错误:

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

所以我将扩展更改tc.logtc.log.txt并重新启动 mariadb

brew services restart mariadb

并做了!

于 2019-11-29T11:33:51.747 回答
-1

对我来说,我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

于 2020-07-23T14:49:31.607 回答