无法为mysql的"root"用户设置密码

我是Ubuntu的新手。我正在运行Ubuntu 12.10版本。我正在尝试安装apache、php和mysql。然而,我已经成功安装了apache,并且它运行得非常完美。
sudo apt-get install apache2

但是当我尝试使用以下命令安装mysql时
sudo apt-get install mysql-server 

下载后,它要求输入密码,但在输入和确认密码后,我收到以下错误信息。
无法为Mysql的"root"用户设置密码
在设置mysql管理用户的密码时发生错误。这可能是因为该账户已经有密码,或者与Mysql服务器之间存在通信问题。 在安装软件包后,您应该检查该账户的密码。 请阅读/usr/share/doc/mysql-server-5.5/README.Debian文件获取更多信息。

在提示框上点击确定按钮后,我在终端上收到以下消息。

Setting up mysql-server-5.5 (5.5.29-0ubuntu0.12.10.1) ...
start: Job failed to start
invoke-rc.d: initscript mysql, action "start" failed.
dpkg: error processing mysql-server-5.5 (--configure):
subprocess installed post-installation script returned error exit status 1
Errors were encountered while processing:
mysql-server-5.5
E: Sub-process /usr/bin/dpkg returned an error code (1)

Mysql错误日志显示
130209 14:26:37 [Note] Plugin 'FEDERATED' is disabled.
130209 14:26:37 InnoDB: The InnoDB memory heap is disabled
130209 14:26:37 InnoDB: Mutexes and rw_locks use GCC atomic builtins
130209 14:26:37 InnoDB: Compressed tables use zlib 1.2.7
130209 14:26:37 InnoDB: Using Linux native AIO
mysqld: Can't create/write to file '/tmp/ibNuz7q0' (Errcode: 13)
130209 14:26:37  InnoDB: Error: unable to create temporary file; errno: 13
130209 14:26:37 [ERROR] Plugin 'InnoDB' init function returned error.
130209 14:26:37 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
130209 14:26:37 [ERROR] Unknown/unsupported storage engine: InnoDB
130209 14:26:37 [ERROR] Aborting

我已经搜索了这个问题,但是对我来说没有任何有效的解决方法。请帮忙。

1通过运行ps -e | grep mysqld检查你是否已经安装了mysql-server。如果你看到任何输出,那就意味着它已经安装好了。 - green
我对这个没有任何输出。 - Devendra Verma
你发布的MySQL错误可能表示/etc/mysql/my.cnf存在问题。如果你修改了该文件或者/etc/mysql目录中的任何文件,请恢复原始文件然后重试。 - Richard Ayotte
Nathan,我在这篇帖子中面临同样的问题,并且已经按照green7和你给出的相同指示进行了操作。我甚至不明白为什么MySQL停止工作。如果你能给我进一步的帮助,我将非常高兴。编辑:只是告诉你,所有这些的原因是因为当我尝试安装MySQL时,从无处接收到以下消息:错误:1146 表 'mysql.user' 不存在。提前感谢你。 - user156280
由于声誉不高,无法回答您的问题。这个要点对我很有帮助。https://gist.github.com/ervinb/63138a504da11a9c27af - gayavat
7个回答

这里也有同样的根密码设置问题,我的可能是由于之前手动安装mysql server 5.6失败引起的。彻底卸载mysql并不是一件容易的事情。我花了几个小时进行了清除/重新安装,最终解决了这个问题。
sudo dpkg --purge mysql-client-core-5.5 # or alternative version
sudo dpkg --purge mysql-client
sudo dpkg --purge mysql-server-core-5.5 # or alternative version
sudo dpkg --purge mysql-common

基本上我只是输入
sudo dpkg --purge mysql # followed by two tabs

然后在终端自动完成后,使用 --purge 来清除任何软件包。由于一些依赖问题,最后清除 mysql-common
除此之外,还要使用上述的 dpkg 命令。
sudo apt-get --purge remove mysql-server
sudo apt-get --purge remove mysql-client
sudo apt-get --purge remove mysql-common
sudo apt-get autoremove
sudo apt-get autoclean

我也尝试了Greq的方法。
sudo rm -rf /etc/mysql

从/var/lib中删除mysql文件夹。
sudo rm -rf /var/lib/mysql/

此时,为了确保mysql已完全移除,请使用以下命令进行检查。
which mysql
mysql --version

第一个应该返回没有输出而不是一个文件夹。第二个应该返回mysql未安装而不是版本号。否则,卸载仍然不完整。
dpkg --purge的重要性在于,当仅使用apt-get时,which mysql和mysql --version的行为就像mysql仍然存在一样。
在重新安装之前,重新配置dpkg并更新。
sudo dpkg --configure -a
sudo apt-get update

问题终于解决了。希望对其他人有所帮助。


3在我的情况下,当执行sudo dpkg --purge mysql-common时,它会失败并显示以下错误信息: dpkg: 依赖问题阻止了mysql-common的移除: mysql-client-5.5 依赖于 mysql-common (>= 5.5.35-0ubuntu0.12.04.2)。 libmysqlclient18 依赖于 mysql-common (>= 5.5.35-0ubuntu0.12.04.2)。 dpkg: 处理mysql-common时出现错误(--purge): 依赖问题 - 无法移除 处理过程中遇到了错误: mysql-common - ses
这对我也起作用。 - Michael Lindman
我已经寻找了一段时间,希望能找到一套完全解决问题的指示。这个方法正如描述的那样有效。谢谢。 - Matthew Setter
对我来说很有效,谢谢!可惜Linux在文件放置方面做得太混乱了! - Kurovsky
最终对我来说还是有效的。我觉得经历了那么多之后重新启动一下可能会有帮助! - Danimal

你需要完全移除mysql。 相信我,我试过了。dpkg自己无法完成这个任务。
看一下。

https://stackoverflow.com/questions/10853004/removing-mysql-5-5-completely

如果你着急的话
sudo service mysql stop  #or mysqld
sudo killall -9 mysql
sudo killall -9 mysqld
sudo apt-get remove --purge mysql-server mysql-client mysql-common
sudo apt-get autoremove
sudo apt-get autoclean
sudo deluser mysql
sudo rm -rf /var/lib/mysql
sudo apt-get purge mysql-server-core-5.5
sudo apt-get purge mysql-client-core-5.5

您先生,是一位英雄!我花了数小时在谷歌上搜索和尝试各种不同的建议,只有您的方法实际上起作用了!我认为区别在于删除mysql用户,因为我已经尝试过大部分其他选项。附注:在成功运行deluser mysql命令之前,我不得不使用kill -9命令终止了几个进程。 - Shautieh

我认为原因是mysql无法访问你的/tmp/目录,正如错误信息所说:
mysqld: Can't create/write to file '/tmp/ibNuz7q0' (Errcode: 13)
请在终端中运行以下命令:
sudo su
chown root:root /tmp
chmod 1777 /tmp
/usr/sbin/mysqld &
解释:
  • sudo su:以root身份运行以下命令。
  • chown root:root /tmp:将用户root和组root设为/tmp的所有者。
  • chmod 1777 /tmp:更改/tmp的权限,使其对所有用户都可访问,只有所有者或root才能删除该目录中的文件。 (有关文件权限的更多信息,请参阅此处
  • /usr/sbin/mysqld &:启动mysqld守护进程。

输入最后一个命令后,我收到了这个消息:# /etc/init.d mysqld start bash: /etc/init.d: 是一个目录 - Devendra Verma
修改了答案 - green
我在执行 /usr/sbin/mysqld & /usr/sbin/mysqld & [1] 3497 后得到了这个输出。我该如何检查mysql是否正在运行? - Devendra Verma
要检查MySQL是否正在运行,请运行ps -e | grep mysqld命令,如果有输出结果,则表示MySQL正常运行。 - green
谢谢 @green7 这是输出 ps -e | grep mysqld 1075 ? 00:00:04 mysqld - Devendra Verma
但是我得到了这个:~$ mysql 错误 1045 (28000):用户'devendra'@'localhost'被拒绝访问(未使用密码) - Devendra Verma
点击这里查看。如果有任何问题,请随时提问。:) 获取了root密码后,以root身份登录,并更改用户devendra的密码。 - green
尝试第一个命令后,我得到了以下结果:~$ mysqladmin -u root password pass mysqladmin:连接到 'localhost' 服务器失败 错误:'Access denied for user 'root'@'localhost' (using password: NO)' - Devendra Verma
让我们在聊天中继续这个讨论。 - green
经过数小时的反复重新安装,这就是诀窍。只需将tmp设置为1777,最终成功安装了mysql。真是个笑话!(虽然可能是我自己的错,一开始单独挂载tmp,但还是!) - gregthegeek

昨晚我为此苦苦挣扎了数小时,并阅读了谷歌索引中有关该问题的所有内容。
我重新安装了20次mysql。这可能是一个字面上的数字。
最后,这两个方法之一或两者都解决了问题(在卸载/清除/烧毁mysql之后):
1. sudo rm -rf /etc/mysql (在清除后未被删除) 2. 然后我关闭了服务器并将VM实例的大小从512MB调整为1GB(RAM)。
之后,我运行了sudo aptitude install mysql-server,它终于成功安装了:
$ sudo aptitude install mysql-server
[sudo] password for [REDACTED]: 
The following NEW packages will be installed:
  libdbd-mysql-perl{a} libmysqlclient18{a} mysql-client-5.5{a} mysql-common{a} mysql-server mysql-server-5.5{a} mysql-server-core-5.5{a} 
0 packages upgraded, 7 newly installed, 0 to remove and 0 not upgraded.
Need to get 8,589 kB of archives. After unpacking 94.6 MB will be used.
Do you want to continue? [Y/n/?] Y
Get: 1 http://ftp.us.debian.org/debian/ wheezy/main mysql-common all 5.5.31+dfsg-0+wheezy1 [85.3 kB]
Get: 2 http://ftp.us.debian.org/debian/ wheezy/main libmysqlclient18 amd64 5.5.31+dfsg-0+wheezy1 [687 kB]
Get: 3 http://ftp.us.debian.org/debian/ wheezy/main libdbd-mysql-perl amd64 4.021-1+b1 [126 kB]
Get: 4 http://ftp.us.debian.org/debian/ wheezy/main mysql-client-5.5 amd64 5.5.31+dfsg-0+wheezy1 [1,923 kB]
Get: 5 http://ftp.us.debian.org/debian/ wheezy/main mysql-server-core-5.5 amd64 5.5.31+dfsg-0+wheezy1 [3,784 kB]
Get: 6 http://ftp.us.debian.org/debian/ wheezy/main mysql-server-5.5 amd64 5.5.31+dfsg-0+wheezy1 [1,900 kB]
Get: 7 http://ftp.us.debian.org/debian/ wheezy/main mysql-server all 5.5.31+dfsg-0+wheezy1 [83.6 kB]
Fetched 8,589 kB in 2s (3,068 kB/s)
Preconfiguring packages ...
Selecting previously unselected package mysql-common.
(Reading database ... 52430 files and directories currently installed.)
Unpacking mysql-common (from .../mysql-common_5.5.31+dfsg-0+wheezy1_all.deb) ...
Selecting previously unselected package libmysqlclient18:amd64.
Unpacking libmysqlclient18:amd64 (from .../libmysqlclient18_5.5.31+dfsg-0+wheezy1_amd64.deb) ...
Selecting previously unselected package libdbd-mysql-perl.
Unpacking libdbd-mysql-perl (from .../libdbd-mysql-perl_4.021-1+b1_amd64.deb) ...
Selecting previously unselected package mysql-client-5.5.
Unpacking mysql-client-5.5 (from .../mysql-client-5.5_5.5.31+dfsg-0+wheezy1_amd64.deb) ...
Selecting previously unselected package mysql-server-core-5.5.
Unpacking mysql-server-core-5.5 (from .../mysql-server-core-5.5_5.5.31+dfsg-0+wheezy1_amd64.deb) ...
Processing triggers for man-db ...
Setting up mysql-common (5.5.31+dfsg-0+wheezy1) ...
Selecting previously unselected package mysql-server-5.5.
(Reading database ... 52616 files and directories currently installed.)
Unpacking mysql-server-5.5 (from .../mysql-server-5.5_5.5.31+dfsg-0+wheezy1_amd64.deb) ...
Selecting previously unselected package mysql-server.
Unpacking mysql-server (from .../mysql-server_5.5.31+dfsg-0+wheezy1_all.deb) ...
Processing triggers for man-db ...
Setting up libmysqlclient18:amd64 (5.5.31+dfsg-0+wheezy1) ...
Setting up libdbd-mysql-perl (4.021-1+b1) ...
Setting up mysql-client-5.5 (5.5.31+dfsg-0+wheezy1) ...
Setting up mysql-server-core-5.5 (5.5.31+dfsg-0+wheezy1) ...
Setting up mysql-server-5.5 (5.5.31+dfsg-0+wheezy1) ...
Stopping MySQL database server: mysqld.
131124 15:39:56 [Note] Plugin 'FEDERATED' is disabled.
131124 15:39:56 InnoDB: The InnoDB memory heap is disabled
131124 15:39:56 InnoDB: Mutexes and rw_locks use GCC atomic builtins
131124 15:39:56 InnoDB: Compressed tables use zlib 1.2.7
131124 15:39:56 InnoDB: Using Linux native AIO
131124 15:39:56 InnoDB: Initializing buffer pool, size = 128.0M
131124 15:39:56 InnoDB: Completed initialization of buffer pool
131124 15:39:56 InnoDB: highest supported file format is Barracuda.
131124 15:39:56  InnoDB: Waiting for the background threads to start
131124 15:39:57 InnoDB: 5.5.31 started; log sequence number 1595675
131124 15:39:57  InnoDB: Starting shutdown...
131124 15:39:58  InnoDB: Shutdown completed; log sequence number 1595675
Starting MySQL database server: mysqld ..
Checking for tables which need an upgrade, are corrupt or were 
not closed cleanly..
Setting up mysql-server (5.5.31+dfsg-0+wheezy1) ...

如果这不起作用,请键入sudo apt-get purge mysql-server && sudo apt-get install mysql-server,如果仍然无法解决问题,请在我的答案下留言,我会与您一起解决此问题。

在12.04之后的所有Ubuntu版本中,安装脚本不再遵循与12.04相同的设置流程。在12.04中,在安装过程中明确要求您设置mysql密码。对于12.10及更高版本,它只会要求输入mysql root密码,但那个密码是什么?安装脚本是一步退后的。我建议在虚拟机中安装12.04并在那里安装mysql。如果你像我一样与Drupal一起使用,请坚持使用12.04版本。

对于那些仍然遇到问题的人,有不同的解决方案。希望我能帮助那些试图重新安装Mysql的人。请注意,这是一项寻找和摧毁的任务,所以要小心谨慎。假设你是root用户:
apt-get purge mysql*
apt-get purge dbconfig-common #the screen used for mysql password
find / -name *mysql*          #delete any traces of mysql
#insert apt-get cleanups, autoremove,updates etc.

最初,有一些残留物干扰了我的mysqlserver-5.5的启动。这些命令最终解决了我的问题。