无法重设MySQL root密码,尝试一切


9

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

help.ubuntu.com

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:/#

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

Answers:


16

我有同样的问题,我通过执行以下代码解决了它:

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

在执行此行之前:

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

对我来说,这些步骤效果更好。

我认为有一种更清洁的方法可以执行此操作,但是对我来说,这是一种快速而有效的解决方法。


1
thx,那把戏;)
Ilovelinux

它发生在mysql 5.7上。当您停止mysql服务时,/ var / run / mysqld将被删除,并在您再次启动该服务时被重新创建。
Capy 2015年

1

无论如何,我都无法重新安装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. 运行mysql_secure_installation的/ usr / bin / 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成功。

    全做完了!


0

我遇到了同样的问题,并通过以下方法解决了问题:

# /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保留密码字段。)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.