我mysql-server
在 Linux 机器上安装了系统,但忘记了 root 密码。在网上查了一下,一般方法是这样的:
- 停止 MySQL (
sudo service mysql stop
) - 以特殊模式启动 MySQL(
sudo mysqld_safe --skip-grant-tables
) - 登录本地服务器并重置密码(
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