无法启动 MySQL 以重置 root 密码

Luk*_*oll 1 linux mysql daemon password-recovery

我已经安装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
Run Code Online (Sandbox Code Playgroud)

并使用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
$ 
Run Code Online (Sandbox Code Playgroud)

编辑 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
Run Code Online (Sandbox Code Playgroud)

小智 5

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

使用以下命令杀死所有 MySQL 进程。

ps aux | grep mysql kill pid
Run Code Online (Sandbox Code Playgroud)

使用“ which mysqld_safe ”命令查找mysqld守护进程的路径

从 mysqld_safe 位置启动 MySQL 而不授予表

/mysqld_safe_available_directory/mysqld_safe --skip-grant-tables &
Run Code Online (Sandbox Code Playgroud)

前 /bin/mysqld_safe

mysql -u root 
Run Code Online (Sandbox Code Playgroud)

设置新密码的步骤:

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