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

时间:2013-02-22 03:34:34

标签: mysql homebrew

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

  

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

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

我搜索过但未找到任何mysql.sock文件。

我该如何解决这个问题?

22 个答案:

答案 0 :(得分:81)

当您通过

运行服务器时
  

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 合作愉快。

信用转到Henry

答案 1 :(得分:50)

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

mysqld stop
mysql.server start

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

答案 2 :(得分:22)

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

答案 3 :(得分:12)

1)如果你能看到" mysql停止"当你在命令下运行时;

brew services list

2)如果你能用下面的命令启动mysql;

mysql server start

然后,将mysql添加到服务将解决您的问题。使用此方法,mysql将在您的操作系统启动时作为服务启动。为此,您可以运行以下命令;

brew services start mysql

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

  

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

我希望这会有所帮助。

答案 4 :(得分:7)

我从另一个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

答案 5 :(得分:3)

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

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

答案 6 :(得分: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

答案 7 :(得分:2)

只是为了添加这些答案,在我的情况下,我没有本地的mySQL服务器,它在docker容器内运行。所以套接字文件不存在,并且不能被" mysql"客户端。

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

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

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

答案 8 :(得分:2)

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

答案 9 :(得分:2)

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

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

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

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

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

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

sudo mysql.server start

答案 10 :(得分:1)

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

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

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

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

答案 11 :(得分:0)

[LINUX]

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

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

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

并且我能够运行 MySQL 服务器

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

答案 12 :(得分:0)

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

mysqld

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

  • mysql -uroot返回“错误2002(HY000):无法通过套接字'/tmp/mysql.sock'(2)连接到本地MySQL服务器”。
  • mysql.server start返回“错误!服务器不更新PID而退出”。
  • Sequel Pro和MySQL Workbench响应说它们无法在本地主机或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

文件在您的〜目录中创建。可能要花一些时间。

完成后,从my.cnf中删除innodb_force_recovery=1,然后以正常模式重启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恢复的更多说明。

答案 13 :(得分: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

完成!

答案 14 :(得分: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

答案 15 :(得分:0)

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


  

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


我在尝试this answer中的以下内容时注意到:

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

这是基于this post的。

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

我希望这对某人有帮助。男人,我讨厌这个东西...

答案 16 :(得分:0)

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

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

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

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

答案 17 :(得分:0)

rm -rf / usr / local / var / mysql / ib_logfile *

答案 18 :(得分:0)

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

答案 19 :(得分:0)

只是为了完成这个帖子。 因此经常使用MAMP(PRO)

这里的路径是

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

答案 20 :(得分:-1)

这对我有用:

brew upgrade mysql

答案 21 :(得分:-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