无法通过socket '/var/ MySQL / MySQL .sock&#39(38)

我有一个大问题试图连接到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

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

但还是有误差。

否则,我不知道这是否相关,但当我执行mysql_config --sockets时,我得到

--socket         [/tmp/mysql.sock]
1496593 次浏览

如果你的my.cnf文件(通常在/etc/mysql/文件夹中)被正确配置为:

socket=/var/lib/mysql/mysql.sock

可以使用以下命令检查mysql是否正在运行:

mysqladmin -u root -p status

尝试更改mysql文件夹的权限。如果你在当地工作,你可以尝试:

sudo chmod -R 755 /var/lib/mysql/

这为我解决了问题。

一个快速的解决方案,为我工作:尝试使用本地ip地址(127.0.0.1)而不是'localhost'在mysql_connect()。这将“强制”php通过TCP/IP而不是unix套接字进行连接。

确保你正在运行mysqld: /etc/init.d/mysql start

你确定你安装了MySQL和MySQL服务器吗?

例如,要安装MySQL服务器,我将使用yum或apt安装MySQL命令行工具和服务器:

yum -y install mysql mysql-server (or apt-get install mysql mysql-server)

启动MySQL服务:

/sbin/chkconfig mysqld on

启动MySQL服务器:

/sbin/service mysqld start

然后设置MySQL root密码:

mysqladmin -u root password 'new-password' (with the quotes)

你可以通过指定mysql服务器的位置来启动mysql服务器。袜子文件使用--socket选项像

mysql --socket=/var/mysql/mysql.sock

即使套接字文件的位置指定在my.cnf文件的不同位置,这也可以工作。

我有这个套接字错误,它基本上归结为MySQL没有运行。如果您运行一个新的安装,请确保您安装了1)系统包和2)面板安装程序(mysql.prefPane)。面板安装程序将允许你进入你的系统首选项并打开MySQL,然后让一个实例运行。

请注意,在重新安装时,我需要重置我的计算机以使更改正确生效。在重新启动之后,我得到了一个新的实例,并且能够毫无问题地打开到localhost的连接。

同样值得注意的是,我显然已经安装了以前版本的MySQL,但已经删除了面板,这使得它很容易为mac用户运行MySQL实例。

这个重新安装过程的一个很好的链接:http://www.coolestguyplanettech.com/how-to-install-php-mysql-apache-on-os-x-10-6/

我得到这个错误是因为我正在运行MAMP,而我的.sock文件在不同的位置。我只是在应用程序认为应该指向实际位置的地方添加了一个符号链接,效果很好。

我得到了以下错误:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (111)

尝试了几种方法,最终通过以下方法解决:

sudo gksu gedit /etc/mysql/my.cnf

修改:

#bind-address       = 127.0.0.1

:

bind-address        = localhost

并重新启动:

sudo /etc/init.d/mysql restart

它工作。

添加

--protocol=tcp

跟你联系的那些偷车贼都对我有用。

另一个解决方法是编辑/etc/my.cnf并在[client]部分中包含host

 [client]
#password       = your_password
host            = 127.0.0.1
port            = 3306
socket          = /var/run/mysql/mysql.sock

然后重新启动mysql服务。

该解决方案在服务器版本:5.5.25a-log Source发行版中进行了测试

在我的情况下,我使用Centos 5.5。我发现这个问题是因为mysql服务以某种方式停止了。 所以我启动mysql服务的命令:

 /etc/init.d/mysqld start

所以. .愚蠢的错误。

我有同样的问题,这是由mysql服务器运行时更新mysql驱动程序引起的。 我修复了它只是重新启动mysql和apache2:

Sudo service mysql stop

Sudo服务mysql启动

Sudo服务apache2停止

Sudo服务apache2启动

我还发现这是一个权限问题。我比较了MySQL文件的工作安装(都在Debian 6挤压),并不得不做出以下所有权变更(其中mydatabase是任何数据库)。

mysql:mysql所有权:

chown mysql:mysql /var/lib/mysql
chown mysql:mysql /var/lib/mysql/ib*
chown mysql:mysql /var/lib/mysql/mydatabase
chown mysql:mysql /var/lib/mysql/mydatabase/*
chown mysql:mysql /var/lib/mysql/mysql/*

mysql:root所有权:

chown mysql:root /var/lib/mysql/mysql
chown mysql:root /var/run/mysqld

mysql:adm所有权:

chown mysql:adm /var/log/mysql
chown mysql:adm /var/log/mysql.err
chown mysql:adm /var/log/mysql.log*

这对我来说已经足够好了

sudo /etc/init.d/mysql restart

如果您使用的是AWS (Amazon Web Services)微型版本,则是内存问题。当我奔跑

mysql

从终端它会说

ERROR 2002 (HY000): Can't connect to local MySQL server through socket /var/run/mysqld/mysqld.sock' (111)

所以我尝试了下面的方法,但它会失败。

service mysqld restart

经过大量的搜索,我发现你必须为MySQL创建一个交换文件以获得足够的内存。指令被列出:http://www.prowebdev.us/2012/05/amazon-ec2-linux-micro-swap-space.html

然后,我可以重新启动mysqld。

为了防止出现这个问题,您必须从命令行优雅地关闭服务器,而不是直接下电服务器。

shutdown -h now

这将在关闭机器之前停止正在运行的服务。

基于Centos,当你遇到这个问题时,一个额外的方法是移动mysql.sock:

mv /var/lib/mysql/mysql.sock /var/lib/mysql/mysql.sock.bak


service mysqld start

重新启动服务将创建一个名为mqsql.sock的新条目

我今天遇到了这个问题。这些答案都不能解决问题。我需要做以下命令(在这里找到https://stackoverflow.com/a/20141146/633107)为我的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的命令时。如果权限检查失败,则报告磁盘已满(即使您的分区还没有接近满)。

如果一切正常,并且您刚刚开始看到这个错误,在执行其他操作之前,请确保您没有耗尽磁盘空间:

df -h

如果正在创建mysql.sock的卷的使用率为100%,MySql将无法创建它,这将是导致此错误的原因。你需要做的就是删除一些不需要的东西,比如旧的日志文件。

CentOS 7, 64位。新的安装。< br > 在我的情况下,这个错误是因为我没有安装正确的MySQL服务器和MySQL客户端 使用yum,我删除了mariadb和mysql-community edition。我从MySQL官方网站下载了客户端和服务器的rpm,并安装了服务器和客户端。< / p >

在安装服务器时,我看到一条消息,MySQL根帐户的密码存储在一个文件中,我可以用sudo cat /root/.mysql_secret查看。

所以在安装客户端和服务器后,我用sudo service mysql status命令检查MySQL是否正常工作(我想我在这样做之前重新启动了),我得到了结果。

MySQL运行(2601)[OK]

我使用mysql_secret文件中的密码登录MySQL mysql -uroot -pdxM01Xfg3DXEPabpf。注意,dxM01Xfg3DXEPabpf是.mysql_secret文件中提到的密码。< / p >

然后在mysql提示符下输入以下命令修改root的密码:

mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('somePassword');

从那以后,一切都很顺利。

对于那些任何方法都不起作用的人,试试:

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保存并使用相同的文件)

sudo service mysql start

这应该对你很有用。有可能您更改了一些影响mysql配置的命令。

我已经删除了mysql。袜子锉成功了。给它加上版权根本没用。既不是重启,也不是别的……

尝试使用-h(主机)和-P(端口):

mysql -h 127.0.0.1 -P 3306 -u root -p

我使用127.0.0.1为-h代替localhost,一切正常。在其他情况下有什么-错误上面。

尝试执行以下命令:

sudo /etc/init.d/mysql start

从这里的许多答案可以看出,在启动MySQL服务时,有许多问题会导致这个错误消息。问题是,MySQL通常会告诉你哪里出了问题,如果你只查看适当的日志文件。

例如,在Ubuntu上,你应该检查/var/log/syslog。由于很多其他东西也可能记录到这个文件中,你可能想使用grep来查看mysql消息,而tail只查看最近的消息。所有这些加在一起,可能是这样的:

grep mysql /var/log/syslog | tail -50

不要因为别人说“这适用于我的系统”就盲目地更改您的配置。找出你的系统到底出了什么问题,你就能更快地得到更好的结果。

sudo service mysqld start

对我有用,我用Centos

编辑你的配置文件/etc/mysql/my.cnf:

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

这并没有直接回答你的问题,而是它的一个子集,即使用PythonAnywhere。在寻找解决方案时,我一直在无意中遇到这个问题,所以我在这里添加了它,希望它能帮助其他处于我这种情况的人。


PythonAnywhere决定改变数据库连接主机名,以提高效率和可靠性,如详细的在这里:

您应该用于连接到您的帐户的正式主机名 MySQL数据库实例由MySQL更改。服务器 < em > yourusername < / em > .mysql.pythonanywhere-services.com。这绕过了我们的基础设施的一部分,最近开始出现问题 几周,它应该比旧的更有效和可靠 方式。< / p >

因此,您需要将主机名更新为上面突出显示的值。

当我试图启动服务器时,我也遇到了这个问题,这里的许多答案只是说启动服务器不起作用。你可以做的第一件事是执行以下命令,看看是否有任何配置错误:

/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

现在一切似乎都在按预期进行。

这个问题有很多解决方案,但对于我的情况,我只需要纠正机器/服务器上的日期 (Ubuntu 16.04服务器)。

i)检查服务器的日期并改正。

ii)执行sudo /etc/init.d/mysql restart命令

这样就可以开始了。

当我为我的文件设置cron job时,我得到了这个错误。我将文件的权限更改为777,但它仍然不适合我。最后我找到了解决办法。也许它会对其他人有帮助。

试试这个命令:

mysql -h 127.0.0.1 -P 3306 -u root -P

记住-h表示宿主, -P表示港口, -P表示密码。

我刚刚遇到了这个问题。经过一天的检查,我终于得到了答案,mysql。sock文件在MariaDB启动时创建,在MariaDB关闭时删除。如果MariaDB不运行,它就不存在。 也许你没有安装MariaDB。 你可以按照下面的说明操作: https://www.linode.com/docs/databases/mariadb/how-to-install-mariadb-on-centos-7 最好的< / p >

对我来说,这只是一个MySQL需要很长时间加载的情况。我的一个数据库中有超过10万个表,它最终启动了,但显然在这种情况下需要很长时间。

如果有人在寻找初始化错误

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

当运行civicrm &Drupal只需要做下面的修改

settings。php和civil。settings。php

只有在你试图建立数据库连接的地方

Localhost到127.0.0.1 #本地安装

我在Freebsd上也有同样的问题,我通过删除my.cnf文件来解决它。 Mysql版本是5.6.

. 似乎从5.5升级后,旧的my.cnf仍然存在,一些不兼容的参数迫使一个错误。 旧的my.cnf有很多参数,但新的只有一个

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
但是如果你这样做了,请记住这可能是一个安全风险,因为没有任何进一步的输入可能会将你的数据库向世界其他地方开放;-) 如果你不这样做,至少添加这一行

bind-address = 127.0.1.1

在我的情况下,解决方案是我安装了mariadb,别名为mysql。所以所有与mysql相关的service命令都无法识别…我只需要:

service mariadb start

另外:

chkconfig mariadb on

搞了两天之后,我想说说我的看法,

你在使用hhvm吗?

如果是,在/etc/hhvm/server.ini中追加下一行

hhvm.mysql.socket = /var/run/mysqld/mysqld.sock

我通过删除tc.log到/var/lib/mysql目录来解决,因为它在满磁盘后被腐蚀。然后,当我启动mysql时,日志文件被创建为新的。

您可能想要检查硬盘是否已满(控制台上的df),这就是最终触发此错误的原因。

有很多潜在的问题会导致这个错误。正如另一个回答中所建议的,最好的方法是检查日志文件。这可以在不同的位置找到,这取决于平台。对我来说,它位于/var/log/mysqld.错误是“设备上没有剩余空间”。在做了一些清理之后,我可以启动服务,问题就解决了。

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

如果你正在重新安装mariadb,你必须检查mysql的旧进程是否还在运行,找到并杀死这个进程

ps ax | grep mysql


sudo kill -9 mysql
因为InnoDB会自动重启,你可以使用kill -15 如果是新的安装*删除目录

sudo rm -rf /var/lib/mysql

创建一个默认的数据库结构并引导mariadb读取数据目录

sudo mysql_install_db --user=mysql --basedir=/usr --datadir=/var/lib/mysql

然后重新配置

sudo mysql_secure_installation