无法启动mysql主进程:无法执行:没有这个文件或目录

我在MySQL方面是个新手,所以请多包涵。
我刚刚完成了从11.10升级到12.04的操作。
除了MySQL之外,其他软件和设置似乎都正常工作,没有出现任何问题。
当我尝试运行以下命令时:
sudo start mysql

我收到一个错误消息:
start: Job failed to start

我到哪里可以找到问题的诊断?然后(希望能够)解决它?
(我根据这里的建议禁用了自动启动,如果这有一定重要性的话)
更新1:
两个输出结果为:
cat /var/log/mysql.err 
cat /var/log/mysql.log

是空的。

dmesg | grep mysql 的输出:

[ 1401.785141] type=1400 audit(1335619832.181:25): apparmor="STATUS" operation="profile_replace" name="/usr/sbin/mysqld" pid=16165 comm="apparmor_parser"
[ 1401.791089] init: Failed to spawn mysql main process: unable to execute: No such file or directory

更新2:
正如下面AWinter所指出的 - 在升级后,似乎MySQL自动消失了,需要重新安装。
14个回答

检查一下mysql-server-5.1包是否已被卸载,似乎在升级后可能会保留。我遇到了同样的错误,不得不彻底清除MySQL服务器5.1和5.5,然后重新安装。

首先,为了安全起见,请备份您的/var/lib/mysql/目录。

sudo cp -R /var/lib/mysql/ ~/mysql

下一步是清除MySQL(这将同时删除php5-mysql和phpmyadmin以及其他一些库,所以在此之后要准备重新安装一些项目)。
sudo apt-get purge mysql-server-5.1 mysql-common

删除文件夹/etc/mysql/及其内容
sudo rm /etc/mysql/ -R

请检查一下你的旧数据库文件是否仍然在/var/lib/mysql/目录中,如果不在的话,请将它们复制回该文件夹,并使用chown root:root命令更改所有者为root。(只有在文件不存在的情况下才运行这些命令)
sudo mkdir /var/lib/mysql/
sudo chown root:root /var/lib/mysql/ -R
sudo cd ~/mysql/
sudo cp * /var/lib/mysql/ -R

下一步安装mysql服务器。
sudo apt-get install mysql-server

最后重新安装任何缺失的软件包,如phpmyadmin和php5-mysql。

1很棒。运行得很顺利。一切都正常工作了。需要说明一点:我不必删除这个目录 sudo rm /etc/mysql/ -R - 在我的情况下它根本不存在。无论如何 - 幸运的是,这只是一个用来测试WordPress的本地安装...不知道在真实服务器上会发生什么 o_O - radek
apt-get --reinstall install mysql-server-x.x 对我来说解决了问题。 - Yashima
这对我来说起作用了,但是在此之前我应该先执行apt-get update,因为它会移除dovecot和php5-mysql。只有在更新后我才能重新安装它们。一旦我完成了这些步骤,一切又恢复正常了。 - AntonChanning
我得到了“-bash: cd: /var/lib/mysql/: Permission denied”这个错误,并且使用“sudo -i”也无法解决。 - Belladonna
@LittleBigBot 我做了一个修改,应该可以修复那个问题。 - Andrew Winter
使用MySQL的add-apt工具从5.5升级到5.6。我所需要做的只是sudo apt-get purge mysql-server-5.5,然后sudo apt-get install mysql-server。我甚至没有丢失任何数据库!太棒了! - Nostalg.io

sudo dpkg-reconfigure mysql-server-5.5

虽然回答不太友好,但对我来说还是有效的 :-) - Joseph
1对我没用 :[ - ThomasReggi

我遇到了同样的问题,对我来说,问题出在InnoDB日志文件的大小与mysql期望的不一致,在升级过程中默默地失败了。
在升级到12.04时,我的自定义配置文件被清空了,这个配置文件设置了日志文件的大小与默认配置不同。
你需要删除以下文件:/var/lib/mysql/ib_logfile*
文件删除后,mysql就可以重新启动并创建默认大小的新日志文件。

Bingo,在我们的情况下,一位开发人员修改了一些innodb的配置设置(他和我都不知道这可能会引起问题)。这导致MySQL无法启动。删除那些配置文件使MySQL能够启动。 - gaoshan88
Bingo - 已更改innodb_log_file_size的配置设置。 - tweak2

大多数错误将通过以详细非守护模式启动服务器并观察输出来显示出来。
sudo mysqld --verbose

我遇到了同样的问题,但是上面的答案都没有帮助到我。所以作为最后的希望,我尝试释放一些磁盘空间。我只是从/var/log中删除了一些不必要的日志文件,这样释放了大约2.5G的空间。然后MySQL正常启动了。

是的,这也是我的问题。mysql在启动时没有像以前那样启动。后来系统信息显示在终端上:“/: 95.1% 的使用率”。所以,没有足够的空闲空间让mysql(和其他进程)启动。我需要进行一些文件清理,然后mysql就能正常启动了。 - Screenack
这是我的情况。进行磁盘清理后,Mysql开始正常工作。 - Sergey Romanov

这种情况有时会发生,虽然可能有几个不同的问题导致mysql无法启动,但我将在这里列出一些我所知道的最常见的问题:
注意 - 因为解释了最常见的问题,我假设您已经尝试过删除和安装,或者仅仅重新安装mysql服务,如下所示:
安装 - sudo apt-get install mysql-server mysql-client
卸载 - sudo apt-get remove mysql-server mysql-client
清除(删除文件+配置)- sudo apt-get purge mysql-server mysql-client
重新安装 - sudo apt-get install --reinstall mysql-server mysql-client 1.

my.cnf文件不在默认目录中。它应该(默认情况下)位于/etc/my.cnf/etc/mysql/my.cnf

2. 硬盘上存储mysql数据文件的空间不足。如果数据库变得太大并占用了硬盘的100%,服务将会失败。 3. 升级后,请检查my.cnf文件是否放置在正确的位置。根据您是如何进行升级以及从哪个版本进行升级,它可能位于之前提到的/etc/my.cnf/etc/mysql/my.cnf。还要记住,该文件也可以命名为mysql.conf而不仅仅是my.cnf。这种情况通常发生在您从mysql.com下载二进制文件的情况下。 4. 运行dmesg命令查看mysql服务抛出的错误消息有助于确定加载错误的原因。它可能还会说明为什么会发生这种情况。如果您在终端中只输入dmesg,它将显示所有信息。我们想要的是关于mysql的信息,所以可以像这样执行:dmesg | grep mysql,这将显示包含mysql的所有行。 5. 检查my.cnfmysql.conf文件是否正确。在12.04版本中,MySQL的版本是5.5,在11.10版本中,它是5.1。配置文件可能有一些更改(我没有实际检查过),听起来可能很愚蠢,但确实可能会引发一些问题。 6. 与套接字问题相关的错误通常是由于my.cnfmysql.conf文件指向错误位置造成的,错误通常显示为:

无法通过套接字'/var/run/mysqld/mysqld.sock'连接到本地MySQL服务器

这个问题的另一个来源与/etc/init.d目录中的mysql文件有关,它可能指向错误的文件夹,因为它可能使用的是旧版本的脚本而不是系统上实际所需的脚本(可能没有正确更新、未覆盖配置文件等)。因此,只需编辑这两个文件中的任何一个,然后执行sudo service mysql restart以检查是否解决了问题。 7. 要查看mysql的特定错误输出,请执行以下操作:

cat /var/log/mysql.err - 将显示mysql的错误。如果您看到太多信息飞过,可以像这样使用cat /var/log/mysql.err | less,因为less将帮助您浏览cat的输出。

cat /var/log/mysql.log也是一样。如果在那里看到错误,将其放在问题或评论中可能有助于更快地回答。 8. 如果您遇到连接问题并且服务实际上正在运行,请尝试查看服务器防火墙是否允许通过3306端口进行连接(入站连接)。然后检查路由器(如果适用)是否已阻止3306端口。基本上,进行网络测试以确定与mysql分配的端口相关的问题的来源。

如果一切正常,要测试mysql服务是否正在运行,请输入以下命令:service mysql status

作为最后的尝试。如果您正在运行mysql但无法登录,请尝试以下操作:

  1. 停止MySQL服务器:

    sudo /etc/init.d/mysql stopsudo service mysql stop

  2. 手动以手动配置方式启动mysqld服务

    sudo mysqld --skip-grant-tables &

    (记得添加&,否则您将需要打开另一个终端窗口。& 将进程发送到后台,您可以使用同一终端窗口杀死进程)。

  3. ROOT身份登录mysql数据库

    mysql -u root mysql

  4. 用您的新密码替换下面的内容

    UPDATE user SET Password=PASSWORD('MyPASSWORD') WHERE User='root';
    FLUSH PRIVILEGES;
    EXIT;

这应该足够让您再次以root身份登录到您的Mysql服务。希望能对您有所帮助。

感谢您的及时反馈。在我的情况下,my.cnf文件位于/etc/mysql/my.cnf。这个位置正确吗?dmesg给出了很多超出我理解范围的输出:/ 我确实安装了5.1版本 - 这会有什么后果吗? - radek
1不要担心文件的位置,如果你找到了它。让我更新答案,以便更好地查看dmesg中的mysql输出。 - Luis Alvarado

我在升级到Ubuntu Server 12.04 LTS后遇到了同样的问题,正在运行。
sudo apt-get install mysql-server 

足够修复它,尽管它抱怨了一个旧的spotweb数据库。我通过移除spotweb来解决这个问题。
sudo apt-get purge spotweb

重新配置mysql。
sudo dpkg-reconfigure mysql-server-5.5

我会添加这个,以防有人遇到类似的问题。我尝试了所有的卸载和重新安装,但都没有效果。 找到解决方案的关键是,upstart将其错误日志放在这个文件夹中:
/var/log/upstart/
对于mysql来说。

/var/log/upstart/mysql.log

当我打开时,它显示了以下信息:
AppArmor解析器在/etc/apparmor.d/tunables/global的第15行中出现错误:无法打开'tunables/home'
我查看了/etc/apparmor.d/tunables/文件夹,发现其中缺少home文件,所以我创建了一个。
使用gedit /etc/apparmor.d/tunables/home命令,并从另一台电脑上复制了以下非注释行的内容:
@{HOME}=@{HOMEDIRS}/*/ /root/ @{HOMEDIRS}=/home/
这里有人遇到了类似的问题。

https://bugs.launchpad.net/ubuntu/+source/mysql-5.5/+bug/982303

然后在那之后,我能够重新启动服务。

在我的情况下,比起这里的一些答案要容易得多。我在launchpad上找到了相关的错误,修复方法就如评论9中所提到的那样。
sudo touch /etc/apparmor.d/local/usr.sbin.mysqld
sudo service apparmor restart

在我的情况下,我尝试在全新安装的Ubuntu 12.04上安装MySQL,但我不明白为什么在设置“root”用户密码时会出现错误。我尝试了以上所有解决方案,但都没有用。
然后我决定清除/删除所有内容,卸载MySQL服务器并删除其所有文件夹(/etc/mysql/和/var/lib/mysql/),最终由于某种随机性,在重新安装过程中没有出现任何错误,我能够设置密码并启动服务器实例。