无法在centos上启动mysqld,因为我无法找到mysql.sock

时间:2013-12-10 10:47:46

标签: mysql linux centos6 mysql.sock

您好,当我尝试启动我的mysqld时,我收到此错误:

[root@localhost /]# service mysqld restart
Stopping mysqld:                                           [  OK  ]
MySQL Daemon failed to start.
Starting mysqld:                                           [FAILED]

主要原因是my.cnf文件找不到我的mysql.sock文件。

[root@localhost /]# mysqladmin -u root -p status

mysqladmin: connect to server at 'localhost' failed

error: 'Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)'
Check that mysqld is running and that the socket: '/var/lib/mysql/mysql.sock' exists!

当我尝试用以下方法搜索时:

sudo find / -type s | grep mysqld.sock

我会得到

find: ‘/proc/3253/task/3253/fd/5’: Bestand of map bestaat niet 
find: ‘/proc/3253/task/3253/fdinfo/5’: Bestand of map bestaat niet
find: ‘/proc/3253/fd/5’: Bestand of map bestaat niet
find: ‘/proc/3253/fdinfo/5’: Bestand of map bestaat niet

"Bestand of map bestaat niet" == "File or directory don't exists"

我是新手,所以有人可以帮我吗?

6 个答案:

答案 0 :(得分:19)

多么痛苦!我偶然发现了同样的问题(在RedHat上),这对我有所帮助:

service mysqld stop
rm -rf /var/lib/mysql/*
service mysqld start
mysql_secure_installation

希望有所帮助。祝你好运!

答案 1 :(得分:3)

  

“主要原因是my.cnf文件找不到我的mysql.sock文件。”

不。 “主要原因”是mysqld has not started,因此没有mysql.sock,任何客户端都无法建立连接。

目前“为什么mysqld failds”是一个广泛的问题。 MySQL错误日志的原因是“为什么MySQL失败”。如果您知道mysql错误日志的位置,只需打开它,并将错误消息发布到您的问题中。

但可能我猜你不知道mysql错误日志在哪里....

确定mysql错误日志的位置

因此,我们需要确定它的位置。我们可以猜到某个地方......但确切的方法是使用strace

$ strace -f > strace.log 2>&1 service mysqld start

现在strace.log拥有与MySQL Deamon相关的所有系统调用。用任何编辑器打开strace.log并搜索'err''。在我的情况下

[pid 26976] open("/XXX/hostname.err", O_WRONLY|O_CREAT|O_APPEND, 0666) = 3

当open()失败时

可能发生open()失败,常见错误

  • '2'表示'没有这样的文件或目录'意味着'没有/ XXX目录。
  • '3'表示'允许拒绝'表示您(或my.cnf中的用户)没有'XXX'的书面许可

所以你可以找到mysqld无法在'/XXX/hostname.err'中启动的原因。如果您发布错误消息,我们非常感谢。

P.S。

我有

的测试版
$ strace -f > strace.log 2>&1 mysql.server start

不确定是否使用service mysqld,但没有理由不使用

更新

  

“我得不到任何回报:$ strace -f> strace.log 2>& 1 service mysqld start”

实际上service mysqld start调用/etc/rc.d/init.d/mysqld start(假设是CentOS或Fedora)。所以,你可以试试。

$ strace -f > strace.log 2>&1 /etc/rc.d/init.d/mysqld start

如果您引用的my.cnf是mysqld的正确文件,请将其打开并搜索[mysqld]部分。它看起来如下

[mysqld]
user    = username
port    = 1111
basedir = /path/
datadir = /path/data

MySQL错误日志位于/path/data

答案 2 :(得分:1)

我不是mysql的专家,但问题是:

mysql是在侦听套接字,tcp端口还是两者上监听?

检查通常在/ etc或/ etc / mysql中的my.cnf配置文件,你会看到这个。此外,如果它已作为套接字运行,您将看到套接字的路径。

希望它有所帮助。

此致

答案 3 :(得分:1)

从你的帖子来看,似乎mysqld无法启动MySQL Daemon failed to start. Starting mysqld: [FAILED]

检查mysqld是否正在运行service mysqld status

配置文件my.cnf正在寻找mysql.sock,你正在寻找mysqld.sock。两个不同的名字。

答案 4 :(得分:1)

感谢Barmaley,感谢您的回答。我检查了我的mysqld.log文件。

它显示了我的mysql服务无法启动的所有原因。在我的情况下,用户mysql没有“/ var / run / mysqld”的写权限。我从root用户那里获得了mysql用户的许可,它对我有用。

再次感谢! Barmaley

答案 5 :(得分:0)

技术设置:

Vagrant (Centos 6.6, MySQL 6.6) on top of MacOS Captain

每次当我尝试在Centos上运行mysql时,我都会看到这个问题,我不确定如果这个问题仅针对OS和MySQL版本。

如果您打开日志文件并检查,您会看到类似这样的内容

  

/ usr / sbin / mysqld:找不到文件'/var/log/mysql-bin.index'(错误代码:   13 - 许可被拒绝)

权限被拒绝是因为默认情况下我们没有权限写入/ var / log文件,因此我们应该更改用户的权限。 MySQL正在尝试将内容写入位于bin-log的{​​{1}}或relay-logs

在我们更改权限之前,我们需要意识到/ var / log中没有mysql目录,所以我们需要首先创建它然后更改权限。 所以,我这样做了:

/var/log/mysql

mysqld现在应该开始工作了!