我最近尝试使用 homebrew ( ) 安装 MySQL,brew install mysql
当我尝试运行它时,我收到以下错误:
ERROR 2002 (HY000): 无法通过套接字 '/tmp/mysql.sock' 连接到本地 MySQL 服务器 (2)
没有/tmp/mysql.sock
也没有/var/lib/mysql.sock
。
我已经搜索并没有找到任何mysql.sock
文件。
我怎样才能解决这个问题?
当您通过以下方式运行服务器时
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一起愉快地工作。
归功于亨利
警告,这将擦除您的数据库,如果您希望保留它们,请进行备份
我从另一个 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
看起来你的mysql服务器没有启动。我通常运行停止命令,然后重新启动它:
mysqld stop
mysql.server start
同样的错误,这对我有用。
尝试使用“127.0.0.1”而不是“localhost”进行连接。
如果您在运行以下命令时能够看到“mysql已停止”;
brew services list
如果您能够使用以下命令启动 mysql;
mysql server start
这表示; mysql可以手动启动,但是在操作系统启动时不会自动启动。将 mysql 添加到服务将解决此问题。为此,您可以运行以下命令;
brew services start mysql
之后,您可以重新启动操作系统并尝试连接到 mysql 以查看它是否自动启动。我做了同样的事情并停止收到以下错误;
ERROR 2002 (HY000): 无法通过套接字 '/tmp/mysql.sock' 连接到本地 MySQL 服务器 (2)
我希望这有帮助。
该文件/tmp/mysql.sock
可能是命名管道,因为它位于临时文件夹中。命名管道是永远不会永久存储的特殊文件。
如果我们制作两个程序,并且我们希望一个程序向另一个程序发送消息,我们可以创建一个文本文件。我们让一个程序在文本文件中写入一些内容,而另一个程序读取我们另一个程序所写的内容。管道就是这样,除了它不会将文件写入我们的计算机硬盘之外,IE 也不会永久存储文件(就像我们在创建文件并保存时所做的那样。)
套接字与管道完全相同。不同之处在于套接字通常在网络上使用——在计算机之间。Socket 向另一台计算机发送信息,或从另一台计算机接收信息。Pipes 和 Sockets 都使用一个临时文件来共享,以便它们可以“通信”。
在这种情况下,很难辨别哪个 MySql 正在使用。不过没关系。
该命令mysql.server start
应该让“服务器”(程序)运行其无限循环,该循环将创建该特殊文件并等待更改(listen
写入)。
之后,一个常见的问题可能是 MySql 程序没有权限在你的机器上创建文件,所以你可能必须给它 root 权限
sudo mysql.server start
安装macos mojave后,必须擦除mysql文件夹/usr/local/var/mysql
,然后重新安装,brew install mysql
否则与权限相关的事情会到处出现。
由于我花了很长时间试图解决这个问题,并且在查找此错误时总是返回此页面,所以我将把我的解决方案留在这里,希望有人能节省我失去的时间。尽管就我而言,我使用的是 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)]>
笔记:
我不太确定您必须添加套接字的组,首先我有它 [client-server] 但后来我认为 [client] 应该足够了。所以我改变了它,它仍然有效。
运行时mariadb_config | grep socket
我得到:
--socket [/tmp/mysql.sock]
这有点令人困惑,因为它似乎/usr/local/mariadb/data/mariadb.sock
是实际位置(至少在我的机器上)
我想知道我可以在哪里配置它/usr/local/mariadb/data/mariadb.sock
,/tmp/mysql.sock
这样我就可以使用默认设置而不必编辑我的.my.cnf
(但我现在太累了,无法弄清楚......)
在某些时候,我还做了其他答案中提到的事情,然后再提出这个问题。
我遇到了同样的错误,这对我有帮助:
$ln -sfv /usr/local/opt/mysql/*.plist ~/Library/LaunchAgents
$launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist
$mysql -uroot
mysql>
如果“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”。要恢复您的数据,请打开 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 恢复的进一步说明。
只是为了添加这些答案,在我的情况下,我没有本地 mySQL 服务器,它在 docker 容器中运行。所以套接字文件不存在,“mysql”客户端将无法访问。
sock 文件由 mysqld 创建,mysql 使用它与它通信。但是,如果您的 mySql 服务器不在本地运行,则不需要 sock 文件。
通过指定主机名/IP,不需要 sock 文件,例如
mysql --host=127.0.0.1 --port=3306 --user=xyz --password=xyz
我在我的 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
您需要运行mysql_install_db
- 最简单的方法是如果您在安装目录中:
$ cd /usr/local/Cellar/mysql/<version>/
$ mysql_install_db
或者,您可以提供mysql_install_db
如下basedir
参数:
$ mysql_install_db --basedir="$(brew --prefix mysql)"
运行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 密码并继续其他设置首选项。
就我而言,罪魁祸首是在日志文件中找到的:
$ 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
重新启动后我无法连接到本地 mariadb,搜索也将我带到此页面,我想与您分享我的解决方案。
我注意到 /usr/local/etc/ 中的目录 my.cnf.d 丢失了。
这是自制软件的一个已知错误,在那里进行了描述和解决。https://github.com/Homebrew/homebrew-core/issues/36801
快速修复方法:mkdir /usr/local/etc/my.cnf.d
如果 brew 没有完成“postinstall”,我只需要使用:
sudo chown -R $(whoami) /usr/local/*
然后通过以下方式完成安装后:
brew postinstall mysql@5.7
下一步只需启动 mysql@5.7 服务。
它在 MacOS Monterey 上对我有用。
只是为了完成这个线程。因此 MAMP (PRO) 经常被使用
这里的路径是
/Applications/MAMP/tmp/mysql/mysql.sock
[ Linux ]
虽然答案预计仅适用于 MacOS,但在 Linux 中我们可能会面临同样的错误。
我在 Linux 中遇到了同样的问题。我运行了这个命令:
sudo /etc/init.d/mysql.server start
我能够运行 MySQL 服务器
参考。https://gist.github.com/vinodpandey/1a4b5b8228f9a000ca236820185fc3bc
这对我有用:
brew upgrade mysql
我通过初始化数据库然后启动它在系统首选项窗格中手动启动了 mysql。这解决了我的问题。
我有同样的问题。在尝试了所有这些方法都没有成功后,我做了以下事情:
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
并做了!
对我来说,我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