无法通过socket home连接到本地MySQL服务器
我最近尝试用自制软件安装MySQL(mysql.sock),当我尝试运行它时,我收到以下错误:
ERROR 2002(HY000):无法通过套接字'/tmp/mysql.sock'连接到本地MySQL服务器(2)
没有mysql.sock也没有/var/lib/mysql.sock。
我搜索过,但未找到任何mysql.sock文件。
我怎样才能解决这个问题?
socketman asked 2019-06-16T18:08:56Z
12个解决方案
71 votes
当你让服务器运行时
sudo ln -s /tmp/mysql.sock /var/mysql/mysql.sock
你应该在/tmp/mysql.sock中看到套接字。 但是,系统似乎期望它在/var/mysql/mysql.sock中。 要解决这个问题,你必须在/ var / mysql中创建一个符号链接:
sudo ln -s /tmp/mysql.sock /var/mysql/mysql.sock
sudo ln -s /tmp/mysql.sock /var/mysql/mysql.sock
这解决了我。 现在我的phpMyAdmin与localhost和127.0.0.1一起工作愉快。
归功于亨利
AAGD answered 2019-06-16T18:09:39Z
48 votes
看起来你的mysql服务器没有启动。 我通常运行stop命令,然后再次启动它:
mysqld stop
mysql.server start
同样的错误,这对我有用。
jesuis answered 2019-06-16T18:10:10Z
21 votes
尝试使用“127.0.0.1”而不是“localhost”进行连接。
Iswanto San answered 2019-06-16T18:10:34Z
11 votes
1)如果你在以下命令下运行时能够看到“mysql stopped”;
brew services list
2)如果你能用下面的命令启动mysql;
mysql server start
然后,将mysql添加到服务将解决您的问题。 使用此方法,mysql将在您的操作系统启动时作为服务启动。 为此,您可以运行以下命令;
brew services start mysql
之后,您可以重新启动操作系统并尝试连接到mysql。 我做了同样的事情并停止接收以下错误;
ERROR 2002(HY000):无法通过套接字连接到本地MySQL服务器 '/tmp/mysql.sock'(2)
我希望这有帮助。
Berk answered 2019-06-16T18:11:28Z
3 votes
我得到了同样的错误,这对我有所帮助:
$ln -sfv /usr/local/opt/mysql/*.plist ~/Library/LaunchAgents
$launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist
$mysql -uroot
mysql>
gouravtiwari21 answered 2019-06-16T18:11:52Z
2 votes
我在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
Hany Sakr answered 2019-06-16T18:12:31Z
2 votes
由于我花了很长时间试图解决这个问题,并且在查找此错误时总是回到此页面,我会在此处留下我的解决方案,希望有人能节省我丢失的时间。 虽然在我的情况下我使用的是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)
我的解决方案
找出/tmp/mysql.sock中所使用的/usr/local/mariadb/data/mariadb.sock文件(如本评论中所述):
$ 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
(你可能想要/usr/local/mariadb/data/mariadb.sock而不是mariadb)
将找到的套接字文件添加到/usr/local/mariadb/data/mariadb.sock(必要时创建文件)(假设从上面运行.my.cnf命令时列出了/tmp/mysql.sock):
[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)]>
笔记:
我不太确定你必须添加套接字的组,首先我有它[客户端 - 服务器],但后来我认为[客户端]应该足够了。 所以我改变它,它仍然有效。
运行/usr/local/mariadb/data/mariadb.sock时,我得到:/tmp/mysql.sock这有点令人困惑,因为它似乎是.my.cnf的实际位置(至少在我的机器上)
我想知道我在哪里可以配置/usr/local/mariadb/data/mariadb.sock实际上是/tmp/mysql.sock所以我可以使用默认设置而不是编辑我的.my.cnf(但我现在太累了,想出来......)
在某些时候,我在做出这个之前也做了其他答案中提到的事情。
dingalapadum answered 2019-06-16T18:14:42Z
1 votes
您需要运行mysql_install_db - 最简单的方法是,如果您在安装目录中:
$ cd /usr/local/Cellar/mysql//
$ mysql_install_db
或者,您可以输入mysql_install_db basedir参数,如下所示:
$ mysql_install_db --basedir="$(brew --prefix mysql)"
Kelley Robinson answered 2019-06-16T18:15:14Z
0 votes
只是为了添加这些答案,在我的情况下,我没有本地的mySQL服务器,它在docker容器内运行。 因此套接字文件不存在,并且“mysql”客户端无法访问。
sock文件由mysqld创建,mysql使用它与之通信。但是,如果您的mySql服务器未运行本地,则不需要sock文件。
通过指定主机名/ ip,不需要sock文件,例如
mysql --host=127.0.0.1 --port=3306 --user=xyz --password=xyz
Wayne answered 2019-06-16T18:15:54Z
0 votes
只是为了完成这个线程。因此经常使用MAMP(PRO)
这里的道路是
/Applications/MAMP/tmp/mysql/mysql.sock
alexdd55 answered 2019-06-16T18:16:25Z
0 votes
安装macos mojave后,不得不擦除/usr/local/var/mysql下的mysql文件夹,然后通过brew install mysql重新安装,否则权限相关的东西会出现在各处。
GnrlBzik answered 2019-06-16T18:16:51Z
0 votes
文件mysql.server start可能是命名管道,因为它位于临时文件夹中。 命名管道是永远不会永久存储的特殊文件。
如果我们制作两个程序,并且我们希望一个程序将消息发送到另一个程序,我们就可以创建一个文本文件。 我们有一个程序在文本文件中写一些东西,另一个程序读取我们的其他程序写的东西。 这就是管道,除了它不会将文件写入我们的计算机硬盘,IE不会永久存储文件(就像我们创建文件并保存它时一样)。
套接字与管道完全相同。 不同之处在于套接字通常用于网络 - 计算机之间。 套接字将信息发送到另一台计算机,或从另一台计算机接收信息。 管道和套接字都使用临时文件进行共享,以便它们可以“通信”。
在这种情况下很难辨别MySql正在使用哪一个。 不过没关系。
命令mysql.server start应该让'server'(程序)运行其无限循环,该循环将创建该特殊文件并等待更改(listen用于写入)。
之后,一个常见问题可能是MySql程序没有在您的计算机上创建文件的权限,因此您可能必须为其授予root权限
sudo mysql.server start
Tyler Curtis Jowers answered 2019-06-16T18:17:54Z