无法通过套接字'/var/mysql/mysql.sock'(38)连接到本地MySQL服务器

459

我在连接mysql时遇到了一个大问题。当我运行以下命令时:

/usr/local/mysql/bin/mysql start
我有以下错误:

Can't connect to local MySQL server through socket '/var/mysql/mysql.sock' (38)

我在/var/mysql目录下有mysql.sock文件。

/etc/my.cnf中,我有以下配置:

[client]
port=3306
socket=/var/mysql/mysql.sock

[mysqld]
port=3306
socket=/var/mysql/mysql.sock
key_buffer_size=16M
max_allowed_packet=8M

/etc/php.ini中,我有以下内容:

; Default socket name for local MySQL connects.  If empty, uses the built-in
; MySQL defaults.
mysql.default_socket = /var/mysql/mysql.sock

我已使用sudo /opt/local/apache2/bin/apachectl restart重新启动了apache。

但我仍然遇到错误。

另外,我不知道是否相关,但当我执行mysql_config --sockets时,会得到以下输出:

--socket         [/tmp/mysql.sock]

67
MySQL 运行了吗? - David
2
这肯定能解释为什么尝试连接它会出错。 正如@Romain提到的那样,MySQL的日志中是否有任何指示(尝试使用/var/log/mysql或附近位置)以说明其未运行的原因? 当您尝试启动它时,是否收到错误消息? - David
6
我也遇到了相同的错误,但我发现是因为磁盘已满,导致mysql无法启动。查看/var/log/mysqld.log会有所帮助。 - yellavon
4
他们询问是否正在运行的原因,我想是因为套接字在服务启动时创建。我安装了MySQL,但从未启动过该服务,因此.sock文件不存在。如果您刚刚安装,请键入“service mysqld start”。希望对您有所帮助。 - changokun
4
以下是shimanyi的答案,sudo service mysql start这个命令帮了我。 - Kiren S
显示剩余9条评论
45个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
3

您可以通过使用--socket选项指定mysql.sock文件的位置来启动MySQL服务器,例如:

mysql --socket=/var/mysql/mysql.sock 
即使在my.cnf文件中指定了套接字文件的不同位置,这也可以正常工作。

3
sudo service mysqld start

对我有用,我正在使用Centos


3

当我尝试启动服务器时,我也遇到了这个问题。这里很多答案仅仅说要启动服务器,但并不起作用。你可以执行以下操作来查看是否有任何配置错误:

/usr/sbin/mysqld --verbose --help 1>/dev/null

我确实遇到了一个错误:

160816 19:24:33 [Note] /usr/sbin/mysqld (mysqld 5.5.50-0ubuntu0.14.04.1-log) starting as process 9461 ...
160816 19:24:33 [Warning] Using unique option prefix myisam-recover instead of myisam-recover-options is deprecated and will be removed in a future release. Please use the full name instead.
160816 19:24:33 [Note] Plugin 'FEDERATED' is disabled.
160816 19:24:33 [ERROR] /usr/sbin/mysqld: unknown variable 'innodb-online-alter-log-max-size=4294967296'
160816 19:24:33 [ERROR] Aborting

一个简单的grep -HR "innodb-online-alter-log-max-size" /etc/mysql/命令向我展示了哪个文件包含了有问题的行,所以我从文件中删除了那一行。

然后,检查我的/var/log/mysql/error.log文件,我发现:

InnoDB: Error: log file ./ib_logfile0 is of different size 0 5242880 bytes
InnoDB: than specified in the .cnf file 0 671088640 bytes!
160816 22:46:46 [ERROR] Plugin 'InnoDB' init function returned error.
160816 22:46:46 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
160816 22:46:46 [ERROR] Unknown/unsupported storage engine: InnoDB
160816 22:46:46 [ERROR] Aborting
基于这个问题,已接受的解决方案行不通,因为我甚至无法启动服务器,所以我按照一些评论所说的删除了我的/var/lib/mysql/ib_logfile0/var/lib/mysql/ib_logfile1文件。 这使得服务器能够启动,我能够连接并执行查询,但是检查我的错误日志文件时,它很快被填满了数万行像这样的内容:
160816 22:52:15  InnoDB: Error: page 1415 log sequence number 82039318708
InnoDB: is in the future! Current system log sequence number 81640793100.
InnoDB: Your database may be corrupt or you may have copied the InnoDB
InnoDB: tablespace but not the InnoDB log files. See
InnoDB: http://dev.mysql.com/doc/refman/5.5/en/forcing-innodb-recovery.html
InnoDB: for more information.

根据这里的建议,为了解决这个问题,我进行了所有数据库的mysqldump和恢复操作(请参阅链接获取其他解决方案)。

$ mysqldump -u root -p --allow-keywords --add-drop-database --comments --hex-blob --opt --quote-names --databases db_1 db_2 db_3 db_etc > backup-all-databases.sql
$ mysql -u root -p < backup-all-databases.sql

现在一切似乎都按预期工作。


在我的情况下,检查/var/log/mysql/error.log有所帮助。其中出现了[ERROR] Can't init tc log,但是很快就通过以下答案进行了修复:https://dba.stackexchange.com/a/185006/163583 - Juraj.Lorinc

3

对于那些没有解决方案可用的人,请尝试:

cd /etc/mysql

检查是否存在my.cnf

nano my.cnf

请确保以下只有一个绑定地址:

bind-address = 127.0.0.1

如果不是这样,可能就是问题所在,请退出nano并保存文件。

然后运行service mysql start命令。

请注意,如果您没有安装nano(它是一个文本编辑器),请使用apt-get install nano安装,安装完成后按Ctrl+X退出编辑器,记得要输入Y保存更改并使用同一文件名。


很遗憾,这并没有起作用。这基本上意味着只有本地机器可以访问mysql,无法进行远程连接。 - tread

3

当你使用 localhost 连接到MySQL时,操作系统会使用套接字连接器。然而,如果你使用 127.0.0.1 IP地址,操作系统将使用TCP/IP连接器。因此,当你在使用套接字连接器时遇到问题时,一个可能的解决方案是尝试通过指定 127.0.0.1 IP地址而不是 localhost 来建立TCP/IP连接。


2

添加

--protocol=tcp 
在您的连接参数列表中添加这个参数对我有帮助。

2
今天我遇到了这个问题。这些答案都没有提供解决方法。我需要执行以下命令(在此处找到https://dev59.com/32445IYBdhLWcg3wpb4P#20141146)来启动我的mysql服务:
sudo /etc/init.d/mysql stop
cd /var/lib/mysql/
ls ib_logfile*
mv ib_logfile0 ib_logfile0.bak
mv ib_logfile1 ib_logfile1.bak
... etc ...
/etc/init.d/mysql restart

以下是/var/log/mysql/error.log中部分指示错误的内容:

140319 11:58:21 InnoDB: Completed initialization of buffer pool
InnoDB: Error: log file ./ib_logfile0 is of different size 0 50331648 bytes
InnoDB: than specified in the .cnf file 0 5242880 bytes!
140319 11:58:21 [ERROR] Plugin 'InnoDB' init function returned error.
140319 11:58:21 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
140319 11:58:21 [ERROR] Unknown/unsupported storage engine: InnoDB
140319 11:58:21 [ERROR] Aborting
我也看到磁盘满错误提示,但仅在没有sudo权限运行命令时。如果权限检查失败,会报告磁盘已满(即使您的分区远未满)。

2

如果有人遇到初始化错误

无法连接到数据库"/var/run/mysql/mysql.sock"

在运行civicrm & drupal时,只需在以下位置的settings.php和civicrm.settings.php中进行以下更改,仅适用于尝试建立数据库连接的地方:

将localhost更改为127.0.0.1 #本地安装


2

2

这对我来说已经足够好了。

sudo /etc/init.d/mysql restart

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,