无法重置 MySQL root 密码,尝试了所有方法

无法重置 MySQL root 密码,尝试了所有方法

好吧,首先让我们澄清一下,我已经阅读了 Ask Ubuntu 上关于这个问题的所有问题,并且我已经遵循了官方文档中的所有步骤:

帮助中心

dev.mysql.com

我正在使用 Ubuntu 16.04.1 LTS

因此,在有人提出我可能已经尝试过的任何事情之前,我将展示我所做的事情:

root@localhost:/# sudo /etc/init.d/mysql stop
[ ok ] Stopping mysql (via systemctl): mysql.service.

MySQL 正确停止。

root@localhost:/# sudo /usr/sbin/mysqld --skip-grant-tables --skip-networking &
[1] 3316
root@localhost:/#

这里我不知道这是否有效,所以我无论如何都会按照以下步骤操作。

root@localhost:/# mysql -u root
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
root@localhost:/#

似乎不起作用,因为服务未启动。由于无法继续执行后续步骤,我尝试了另一种方法(清除)。

使用后:

sudo apt-get --purge remove
sudo apt-get install

我尝试下一步:

root@localhost:/# mysqladmin -u root password MyNewPassword
mysqladmin: connect to server at 'localhost' failed
error: 'Access denied for user 'root'@'localhost' (using password: NO)'
root@localhost:/#

由于这也不起作用,我尝试了 mysql 网站上提到的其他方法:

因此我按照指示终止了 mysql 进程,然后使用

root@localhost:/# mysqld_safe --init-file=/home/me/mysql-init &
[1] 5267
root@localhost:/# 2017-02-01T12:47:49.250083Z mysqld_safe Logging to syslog.
2017-02-01T12:47:49.252427Z mysqld_safe Logging to '/var/log/mysql/error.log'.

2017-02-01T12:47:49.254765Z mysqld_safe Logging to '/var/log/mysql/error.log'.

2017-02-01T12:47:49.257045Z mysqld_safe Directory '/var/run/mysqld' for UNIX socket file don't exists.

[1]+  Salida 1                mysqld_safe --init-file=/home/me/mysql-init
root@localhost:/#

现在我已经没有选择了,所以我还尝试了 Ask Ubuntu 上提到的另一种方法:

root@localhost:/# sudo dpkg-reconfigure mysql-server-5.7
Checking if update is needed.
This installation of MySQL is already upgraded to 5.7.17, use --force if you still need to run mysql_upgrade
root@localhost:/#

现在我真的没有选择了,所以欢迎任何建议。

答案1

我遇到了同样的问题,并通过执行此行解决了它:

$ sudo mkdir /var/run/mysqld; sudo chown mysql /var/run/mysqld

在执行此行之前:

root@localhost:/# mysqld_safe --init-file=/home/me/mysql-init &

为我,这些步骤效果更好。

我认为有一个更简洁的方法可以做到这一点,但对我来说,这是一个快速而有效的解决方法。

答案2

无论我怎么尝试,我都无法重新安装 mysql,最后我只需要尝试重置密码。

我不得不在 Ubuntu 16.04.1 LTS 上走这条路。我花了一个多小时尝试了 MySql 网站上的所有其他建议,以及 SO 上的所有内容以及 AskUbuntu 问答,我终于让它工作了:

笔记:虽然它显示输入用户 root 的密码,但是我没有原始密码,所以我只能输入相同的密码作为新密码。

笔记:没有 /var/log/mysqld.log,只有 /var/log/mysql/error.log

另请注意,这对我不起作用:
sudo dpkg-reconfigure mysql-server-5.7

也没有:
sudo dpkg-reconfigure --force mysql-server-5.5

创建 MySQL 服务目录。
sudo mkdir /var/run/mysqld

授予 MySQL 用户写入服务目录的权限。
sudo chown mysql: /var/run/mysqld

然后:

  1. 终止当前 mysqld pid
  2. 使用 sudo /usr/sbin/mysqld & 运行 mysqld
  3. 运行 /usr/bin/mysql_secure_installation

    mysql_secure_installation 的输出

    root@myServer:~# /usr/bin/mysql_secure_installation

    确保 MySQL 服务器部署的安全。

    输入用户root的密码:

    验证密码插件可用于测试密码并提高安全性。它检查密码的强度并允许用户仅设置足够安全的密码。您想设置验证密码插件吗?

    按 y|Y 表示是,按任何其他键表示否:否 使用 root 的现有密码。更改 root 的密码?((按 y|Y 表示是,按任何其他键表示否):y

    新密码:

    重新输入新密码:默认情况下,MySQL 安装有一个匿名用户,允许任何人登录 MySQL,而无需为他们创建用户帐户。这仅用于测试,并使安装过程更顺利。您应该在进入生产环境之前将其删除。

    删除匿名用户?(按 y|Y 表示是,按任何其他键表示否):y 成功。

    通常,只应允许 root 从“localhost”进行连接。这可确保有人无法从网络猜测 root 密码。

    不允许远程 root 登录?(按 y|Y 表示是,按任何其他键表示否):y 成功。

    默认情况下,MySQL 带有一个名为“test”的数据库,任何人都可以访问。这也仅用于测试,在进入生产环境之前应将其删除。

    删除测试数据库并访问它?(按 y|Y 表示是,按任何其他键表示否):y

    • 删除测试数据库...成功。

    • 删除测试数据库的权限...成功。

    重新加载权限表将确保迄今为止所做的所有更改立即生效。

    现在重新加载权限表吗?(按 y|Y 表示是,按任何其他键表示否):y 成功。

    全做完了!

答案3

我遇到了同样的问题并解决了:

# /etc/init.d/mysql stop
# service mysql stop
# mkdir -p /var/run/mysqld
# chown mysql:mysql /var/run/mysqld
# mysqld_safe --skip-grant-tables &
# mysql -u root
mysql> use mysql;
mysql> update user set authentication_string=password('1234') where user='root';

(此处authentication_string保存密码字段。)

相关内容