centos上无法启动mysql,因为找不到mysql.sock
Posted
技术标签:
【中文标题】centos上无法启动mysql,因为找不到mysql.sock【英文标题】:can't start mysqld on centos because I cant find mysql.sock 【发布时间】:2013-12-27 20:18:20 【问题描述】:您好,当我尝试启动我的 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"
我是新手,谁能帮帮我?
【问题讨论】:
目录/var/lib/mysql
是否存在?
尝试 service mysqld status 看看它是否显示除了停止之外的任何输出。 mysqladmin 将不起作用,如果 mysql 已关闭,将显示相同的错误。该错误在许多原因中很常见,并且不是唯一的。让我们知道service mysqld status的O/P
嗨,您是否尝试过更改 /var/lib/mysql 文件夹的所有者和权限?
mysqladmin
日志不能证明 mysqld
无法启动的原因。你找错地方了。
【参考方案1】:
多么痛苦!我偶然发现了同样的问题(在 RedHat 上),这对我有帮助:
service mysqld stop
rm -rf /var/lib/mysql/*
service mysqld start
mysql_secure_installation
希望对您有所帮助。祝你好运!
【讨论】:
如果您需要,请不要忘记备份您的数据!cp -fr /var/lib/mysql /var/lib/mysql.backup
“警告:Barmaley 发布的答案非常危险。它会删除您的所有用户等。除非一切都失败了,否则不要使用他的方法”来自 GRoston【参考方案2】:
“主要原因是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 并搜索“err”。在我的情况下
[pid 26976] open("/XXX/hostname.err", O_WRONLY|O_CREAT|O_APPEND, 0666) = 3
当 open() 失败时
可能发生open()
失败,常见错误是
这样你就可以找到 mysqld 在 '/XXX/hostname.err' 中启动失败的原因。如果您发布错误消息,我们将不胜感激。
附言
我有测试 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
【讨论】:
我没有得到任何回报:$ strace -f > strace.log 2>&1 service mysqld start【参考方案3】:我不是 mysql 专家,但问题是:
mysql 是在侦听套接字、tcp 端口还是两者兼而有之?
检查 my.cnf 配置文件,它通常在 /etc 或 /etc/mysql 中,你会看到这个。此外,如果它已经作为套接字运行,您将看到套接字的路径。
希望对你有帮助。
问候
【讨论】:
【参考方案4】:从你的帖子来看,mysqld 似乎无法启动MySQL Daemon failed to start.
Starting mysqld: [FAILED]
。
检查mysqld是否正在运行service mysqld status
。
配置文件 my.cnf 正在寻找 mysql.sock,而您正在寻找 mysqld.sock。两个不同的名字。
【讨论】:
mysqld 没有运行,因为我无法启动它 这是你第一次尝试启动这个mysql实例吗?如果这是第一次,可能根本没有配置任何数据库。尝试运行 mysqladmin 并创建数据库。【参考方案5】:感谢 Barmaley,提供了很棒的答案。我检查了我的 mysqld.log 文件。
它显示了我的 mysql 服务没有启动的所有原因。在我的例子中,用户 mysql 对 "/var/run/mysqld" 没有写权限。我从 root 用户授予了 mysql 用户的权限,它对我有用。
再次感谢!巴马利
【讨论】:
【参考方案6】:技术设置:
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 - 权限被拒绝)
Permission Denied 是因为默认情况下我们没有写入 /var/log 文件的权限,所以我们应该更改用户的权限。 MySQL 正在尝试向位于/var/log/mysql
的bin-log
或relay-logs
写入内容。
在更改权限之前,我们需要意识到 /var/log 中没有 mysql 目录,所以我们需要先创建该目录,然后再更改权限。 所以,我这样做了:
mkdir mysql
chown mysql: mysql
mysqld 现在应该开始工作了!
【讨论】:
以上是关于centos上无法启动mysql,因为找不到mysql.sock的主要内容,如果未能解决你的问题,请参考以下文章
centos通过yum安装mariadb(mysql)无法启动服务或者找不到mysql.sock
CentOS通过yum安装MariaDB(MySQL)无法启动服务或者找不到mysql.sock
在 Mac OSX 10.6.8 上找不到 mysqladmin
“应用程序无法启动,因为找不到 cxcore210.dll”。为啥会发生这种情况?