无法启动 MySQL 来重置 root 密码

无法启动 MySQL 来重置 root 密码

mysql-server在 Linux 机器上安装了系统,但忘记了 root 密码。在网上查了一下,一般方法是这样的:

  1. 停止 MySQL ( sudo service mysql stop)
  2. 以特殊模式启动 MySQL(sudo mysqld_safe --skip-grant-tables
  3. 登录本地服务器并重置密码(mysql -u root

我的问题出在 2 号。当我运行命令时,它会显示一些关于日志记录和启动守护进程的内容,然后以以下行结束

mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended

并使用sudo service mysql status确认 MySQL 确实已停止。

它为什么会突然停止?(更重要的是)我怎样才能让它继续运行,以便我可以重置密码?

提前致谢

编辑这是“有关登录和启动守护进程的内容”的完整日志:

$ mysqld_safe --skip-grant-tables 
141219 16:55:20 mysqld_safe Logging to syslog.
141219 16:55:20 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
141219 16:55:20 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended
$ 

编辑2/var/log/syslog 的输出(我已将我的主机名替换为<hostname>

Dec 20 10:20:09 <hostname> mysqld_safe: Starting mysqld daemon with databases from /var/lib/mysql
Dec 20 10:20:09 <hostname> mysqld: 141220 10:20:09 [Warning] Using unique option prefix key_buffer instead of key_buffer_size is deprecated and will be removed in a future release. Please use the full name instead.
Dec 20 10:20:09 <hostname> mysqld: 141220 10:20:09 [Warning] Can't create test file /var/lib/mysql/<hostname>.lower-test
Dec 20 10:20:09 <hostname> mysqld: 141220 10:20:09 [Warning] Can't create test file /var/lib/mysql/<hostname>.lower-test
Dec 20 10:20:09 <hostname> mysqld: #007/usr/sbin/mysqld: Can't change dir to '/var/lib/mysql/' (Errcode: 13)
Dec 20 10:20:09 <hostname> mysqld: 141220 10:20:09 [ERROR] Aborting
Dec 20 10:20:09 <hostname> mysqld: 
Dec 20 10:20:09 <hostname> mysqld: 141220 10:20:09 [Note] /usr/sbin/mysqld: Shutdown complete
Dec 20 10:20:09 <hostname> mysqld: 
Dec 20 10:20:09 <hostname> mysqld_safe: mysqld from pid file /var/run/mysqld/mysqld.pid ended

答案1

好的,看起来 /var/lib/mysql 不存在,或者 mysql 用户没有权限访问它。无论哪种情况,您都会遇到比忘记 root 密码更糟糕的问题 - 要么您根本没有数据库,要么某些东西改变了文件权限或所有权。

答案2

此问题可能是由多个问题引起的。您可以从中找到确切的错误“尾部/var/log/mysql/error.log”。我已为此类问题添加了默认修复。如果以下方法不起作用,请更新日志中的打印内容,我们可以尝试获取一些信息并进一步操作

使用以下命令终止所有 MySQL 进程。

ps aux | grep mysql kill pid

使用“哪个 mysqld_safe“ 命令

从 mysqld_safe 位置启动没有授权表的 MySQL

/mysqld_safe_available_directory/mysqld_safe --skip-grant-tables &

例如/bin/mysqld_safe

mysql -u root 

设置新密码步骤:

use mysql;
update user set password=PASSWORD("NEW-ROOT-PASSWORD") where User='root';
flush privileges;
quit

答案3

我遇到了同样的问题,中止来自/var/lib/mysql 属于用户的文件夹的权限mysql,然后root没有完全访问权限

解决方式:

$ sudo su - mysql

$ mysqld_safe --skip-grant-tables &

答案4

在我的例子中,我使用 root 用户手动创建了 /var/run/mysql 文件夹。解决了问题

chown -R mysql:mysql /var/run/mysql

相关内容