我最近尝试使用自制软件(brew install mysql
)安装MySQL,当我尝试运行它时出现以下错误:
ERROR 2002(HY000):无法通过socket'/tmp/mysql.sock'连接到本地MySQL服务器(2)
没有/tmp/mysql.sock
也没有/var/lib/mysql.sock
。
我搜索过但未找到任何mysql.sock
文件。
我该如何解决这个问题?
答案 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服务器没有启动。我通常运行stop命令,然后再次启动它:
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而退出”。要恢复数据,请打开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