我在尝试连接到mysql时遇到了很大的问题。我跑的时候:
/usr/local/mysql/bin/mysql start
我有以下错误:
Can't connect to local MySQL server through socket '/var/mysql/mysql.sock' (38)
我在mysql.sock
目录下有/var/mysql
。
在/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
但我仍然有错误。
否则,我不知道这是否相关,但当我mysql_config --sockets
我得到
--socket [/tmp/mysql.sock]
答案 0 :(得分:209)
如果您的文件my.cnf(通常位于 / etc / mysql / 文件夹中)已正确配置
socket=/var/lib/mysql/mysql.sock
您可以使用以下命令检查mysql是否正在运行:
mysqladmin -u root -p status
尝试将您的权限更改为mysql文件夹。如果您在本地工作,可以尝试:
sudo chmod -R 755 /var/lib/mysql/
为我解决了这个问题
答案 1 :(得分:89)
你确定你安装了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)
我希望它有所帮助。
答案 2 :(得分:71)
一个对我有用的快速解决方法:尝试在mysql_connect()中使用本地IP地址(127.0.0.1)而不是“localhost”。这“迫使”php通过TCP / IP而不是unix套接字连接。
答案 3 :(得分:48)
我收到以下错误
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
它有效
答案 4 :(得分:22)
确保您正在运行mysqld:/etc/init.d/mysql start
答案 5 :(得分:18)
要防止问题发生,您必须从命令行正常关闭服务器,而不是关闭服务器电源。
shutdown -h now
这将在关闭机器之前停止正在运行的服务。
基于Centos,遇到此问题时再次备份它的另一种方法是移动mysql.sock:
mv /var/lib/mysql/mysql.sock /var/lib/mysql/mysql.sock.bak
service mysqld start
重新启动服务会创建一个名为mqsql.sock
的新条目答案 6 :(得分:12)
从这里的许多答案可以看出,当你启动MySQL服务时,会出现许多可能导致此错误消息的问题。问题是,如果您查看相应的日志文件,MySQL通常会告诉您确切的错误。
例如,在Ubuntu上,您应该检查/var/log/syslog
。由于许多其他内容也可能会记录到此文件,因此您可能希望使用grep
查看mysql消息,而tail
仅查看最新消息。总之,这可能看起来像:
grep mysql /var/log/syslog | tail -50
答案 7 :(得分:11)
另一种解决方法是编辑/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源分发
答案 8 :(得分:9)
当我为我的文件设置cron作业时出现此错误。我将文件的权限更改为 777 ,但它仍然无效。最后我得到了解决方案。可能会对其他人有所帮助。
尝试使用此命令:
mysql -h 127.0.0.1 -P 3306 -u root -p
请记住-h表示主机,-p表示端口。
答案 9 :(得分:6)
尝试使用-h(主机)和-P(端口):
mysql -h 127.0.0.1 -P 3306 -u root -p
答案 10 :(得分:6)
就我而言,我使用的是Centos 5.5。我发现问题是因为mysql服务被停止了一些如何。 所以我用命令启动了mysql服务:
/etc/init.d/mysqld start
那么......愚蠢的错误。
答案 11 :(得分:6)
我有同样的问题,它是由mysql服务器运行时更新mysql驱动程序引起的。 我修复了它只是重新启动mysql和apache2:
sudo service mysql stop
sudo service mysql start
sudo service apache2 stop
sudo service apache2 start
答案 12 :(得分:6)
如果一切正常并且您刚刚开始看到此错误,那么在执行任何其他操作之前,请确保您没有磁盘空间不足:
df -h
如果正在创建 mysql.sock 的卷是100%使用,MySql将无法创建它,这将是导致此错误的原因。您需要做的就是删除不需要的东西,比如旧的日志文件。
答案 13 :(得分:5)
sudo service mysql start
这应该对你很好。您可能有可能更改了一些影响mysql配置的命令。
答案 14 :(得分:5)
这个问题有很多解决方案但是对于我的情况,我只需要纠正机器/服务器上的 DATE ( Ubuntu 16.04服务器)。
i)检查服务器的日期并更正它。
ii)运行sudo /etc/init.d/mysql restart
应该开始。
答案 15 :(得分:4)
我还发现这是一个权限问题。我将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*
答案 16 :(得分:4)
我收到错误是因为我正在运行MAMP而我的.sock文件位于不同的位置。我刚刚添加了一个符号链接,应用程序认为它应该指向实际位置,它就像一个魅力。
答案 17 :(得分:3)
如果您使用的是AWS(亚马逊网络服务)微型版,那么这是一个内存问题。我跑的时候
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。
答案 18 :(得分:3)
对我来说 - 这只是MySQL需要很长时间才能加载的情况。我的一个数据库中有超过100,000个表,它最终启动但显然需要花费很长时间才能实现。
答案 19 :(得分: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保存并使用同一个文件)
答案 20 :(得分:3)
你总是可以通过使用--socket
选项指定mysql.sock文件的位置来启动mysql服务器,例如
mysql --socket=/var/mysql/mysql.sock
即使套接字文件的位置在my.cnf文件中的不同位置指定,这也会起作用。
答案 21 :(得分: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
基于this question,已接受的解决方案无效,因为我甚至无法启动服务器,因此我按照了一些评论说的内容删除了/var/lib/mysql/ib_logfile0
和{{1}文件。
这允许服务器启动,我能够连接并执行查询,但是检查我的错误日志文件很快就会填满数万行,如下所示:
/var/lib/mysql/ib_logfile1
根据here的建议,为了解决这个问题,我做了一个mysqldump并恢复了所有数据库(参见其他几个解决方案的链接)。
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.
现在一切似乎都按预期工作了。
答案 22 :(得分:2)
我今天遇到了这个问题。这些答案都没有提供修复。我需要执行以下命令(在此处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的命令时。如果权限检查失败,则报告磁盘已满(即使您的分区甚至没有接近完整)。
答案 23 :(得分:2)
我刚刚遇到这个问题。经过一天的检查后,我得到了答案,当MariaDB启动时创建mysql.sock文件,并在MariaDB关闭时删除。如果MariaDB没有运行,它就不会存在。 也许你没有安装MariaDB。 您可以遵循以下说明: https://www.linode.com/docs/databases/mariadb/how-to-install-mariadb-on-centos-7 BEST
答案 24 :(得分:2)
这不是直接回答你的问题,而是它的一个子集,即使用PythonAnywhere。在寻找修复时我一直绊倒这个问题,所以我在这里添加它,希望它能在我的情况下帮助其他人。
PythonAnywhere决定更改数据库连接主机名,以提高效率和可靠性,detailed here:
您应该用来连接帐户的官方主机名 MySQL数据库实例已从mysql.server更改为 的 yourusername .mysql.pythonanywhere-services.com 即可。这绕过了我们最近开始出现问题的基础设施的一部分 几个星期,它应该比旧的更有效和可靠 方式。
因此,您需要将主机名更新为上面突出显示的值。
答案 25 :(得分:2)
sudo service mysqld start
为我工作,我使用Centos
答案 26 :(得分:2)
添加
--protocol=tcp
连接的参数列表。
答案 27 :(得分:2)
CentOS 7,64位。全新安装。
在我的情况下,错误是因为我没有安装正确的MySQL服务器和MySQL客户端
使用yum
,我删除了mariadb
和mysql-community edition。我从official MySQL website下载了客户端和服务器的rpm,并安装了服务器和客户端。
在安装服务器时,我看到一条消息,MySQL的root帐户的密码存储在我可以使用sudo cat /root/.mysql_secret
查看的文件中。
所以在安装客户端和服务器后,我使用命令sudo service mysql status
检查了MySQL是否正常工作(我想我在重新启动之前),我得到了结果。
运行MySQL(2601)[确定]
我使用.mysql_secret文件中的密码登录MySQL:
mysql -uroot -pdxM01Xfg3DXEPabpf
。请注意,dxM01Xfg3DXEPabpf
是.mysql_secret文件中提到的密码。
然后键入在mysql提示符下输入以下命令以更改root的密码:
mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('somePassword');
从那时起,一切都运转良好。
答案 28 :(得分:2)
这对我来说已经足够了
sudo /etc/init.d/mysql restart
答案 29 :(得分:1)
我使用127.0.0.1代替-h而不是localhost,一切正常。在其他情况下有什么 - 上面的错误。
答案 30 :(得分:1)
如果有人在寻找初始化错误
无法连接数据库" /var/run/mysql/mysql.sock"
运行civicrm&
中的drupal只会进行以下更改settings.php和civicrm.settings.php
仅在您尝试建立数据库连接的地方
localhost到127.0.0.1 #local installation
答案 31 :(得分:0)
尝试运行以下命令:
sudo /etc/init.d/mysql start
答案 32 :(得分:0)
我有这个套接字错误,它基本上归结为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/
答案 33 :(得分:0)
我删除了mysql.sock文件,但它确实有效。把权利放在上面根本不起作用。无论是重启还是其他......
答案 34 :(得分:0)
我在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
答案 35 :(得分:0)
经过一个通宵达旦的半夜之后,这是我的故事故事,
您正在使用 hhvm 吗?
如果是这样,请在 /etc/hhvm/server.ini
hhvm.mysql.socket = /var/run/mysqld/mysqld.sock
答案 36 :(得分:0)
我解决了通过将tc.log删除到/ var / lib / mysql目录中来解决问题,因为它在装满磁盘后已损坏。然后,当我启动mysql时,日志文件被创建为新文件。
答案 37 :(得分:0)
您可能想检查一下硬盘是否已满(控制台上的versions= [
"aaa/bbb/202007/cc/dd/v20",
"aaa/bbb/202007/cc/dd/v22",
"aaa/bbb/202007/cc/dd/v35",
"aaa/bbb/202008/cc/dd/v15",
"aaa/bbb/202008/cc/dd/v20",
"aaa/bbb/202009/cc/dd/v5",
"aaa/bbb/202009/cc/dd/v8"
]
import json
result = dict()
for s in versions:
l = s.split('/')
if not l[2][:4] in result:
result[l[2][:4]] = dict()
if not l[2][4:] in result[l[2][:4]]:
result[l[2][:4]][l[2][4:]] = []
result[l[2][:4]][l[2][4:]].append(l[5])
json.dumps(result)
),这才是最终触发我此错误的原因。
答案 38 :(得分:0)
有很多潜在的问题将导致此错误。另一个答案中建议的最好的办法是检查日志文件。可以在不同位置找到此文件,具体取决于平台。对我来说,它位于/var/log/mysqld.err,错误是“设备上没有剩余空间”。进行一些清理后,我可以启动服务,问题已解决。
答案 39 :(得分:-1)
修改配置文件/etc/mysql/my.cnf
:
[client]
host = 127.0.0.1
port = 3306
socket =/var/run/mysql/mysql.sock
答案 40 :(得分:-2)
对于我来说,解决方案是我安装了mariadb
,别名为mysql
。因此所有与service
相关的mysql
命令都未被识别...我只需要:
service mariadb start
好的措施:
chkconfig mariadb on