11

您好,当我尝试启动我的 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"

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

4

6 回答 6

24

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

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

希望有帮助。祝你好运!

于 2014-12-06T01:38:20.520 回答
5

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

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

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

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

确定mysql错误日志在哪里

所以,我们需要确定它在哪里。我们可以在某个地方猜测......但确切的方法是使用strace

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

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

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

当 open() 失败时

它可能会open()失败,常见的错误是

  • '2' for 'no such file or directory' 表示'没有 /XXX 目录。
  • '3' for 'permission denied' 表示您(或 my.cnf 中的用户)没有对 'XXX' 的写权限

所以你可以找到为什么mysqld无法在'/XXX/hostname.err'中启动。如果您发布错误消息,我们将不胜感激。

ps

我有测试 strace

$ 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

于 2013-12-11T04:03:16.827 回答
1

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

mysql 是在侦听套接字、tcp 端口还是两者兼而有之?

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

希望能帮助到你。

问候

于 2013-12-10T11:25:55.167 回答
1

从您的帖子中,似乎 mysqld failed to start MySQL Daemon failed to start. Starting mysqld: [FAILED]

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

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

于 2013-12-11T01:25:19.963 回答
1

感谢 Barmaley,给出了很棒的答案。我检查了我的 mysqld.log 文件。

它显示了我的 mysql 服务没有启动的所有原因。在我的情况下,用户 mysql 对"/var/run/mysqld"没有写权限。我从 root 用户授予了 mysql 用户的权限,它对我有用。

再次感谢!巴马利

于 2015-01-29T08:19:02.917 回答
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-logrelay-logs位于/var/log/mysql.

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

mkdir mysql
chown mysql: mysql

mysqld 现在应该开始工作了!

于 2016-03-22T23:22:13.963 回答