无法重置MySQL的root密码


28

我需要重置本地mysql安装的root密码,但不会让我。我已经试过了:

$ sudo /etc/init.d/mysql stop
 * Stopping MySQL database server mysqld                                                                                                              [ OK ] 
[1]-  Exit 1                  sudo /usr/sbin/mysqld --skip-grant-tables --skip-networking
[2]+  Exit 1                  sudo /usr/sbin/mysqld --skip-grant-tables --skip-networking
reg@regDesktopHome:~$ sudo mysqld --skip-grant-tables &
[1] 13651
reg@regDesktopHome:~$ 140627 19:02:02 [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.

reg@regDesktopHome:~$ mysql -u root mysql
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
reg@regDesktopHome:~$ sudo mysql -u root mysql
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
[1]+  Exit 1                  sudo mysqld --skip-grant-tables

如何重置密码? 编辑1 我得到了这个:

$ ps ax| grep mysql
16515 ?        Ssl    0:00 /usr/sbin/mysqld
16551 pts/23   S+     0:00 grep --color=auto mysql
reg@regDesktopHome:~/semios/v3upgrade$ sudo kill -9 16515
reg@regDesktopHome:~/semios/v3upgrade$ ps ax| grep mysql
16678 ?        Ssl    0:00 /usr/sbin/mysqld
16715 pts/23   S+     0:00 grep --color=auto mysql
reg@regDesktopHome:~/semios/v3upgrade$ mysql -u root
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

看起来进程一杀死我就会自动重启mysql ...

Answers:


43

首先请尝试使用

mysql -u root -p

并在提示时输入密码(如果您还记得的话)以sql-root用户身份登录(请注意,该开关-p用于输入密码)。

如果确实需要重置mysql的root密码,这是一种简单的方法-使用来重新配置软件包dpkg-reconfigure

重置mySQL root密码的简单步骤:

  1. 检查您的版本mysql-server

    apt-cache policy mysql-server
    

    并查看显示已安装版本的行以及其他信息。例如对于我的安装是:

    Installed: 5.5.37-0ubuntu0.12.04.1
    

    (由此,我知道我已经mysql-server-5.5安装了系统。)

  2. 使用以下命令开始重新配置:

    sudo dpkg-reconfigure mysql-server-*.*
    

    mysql-server-*.*应该在哪里替换为您拥有的版本。(对我而言mysql-server-5.5)。这将停止数据库守护程序。然后将出现提示,您必须在其中输入新密码并确认重新配置。

    快照1

    重新配置完成后,守护程序将自动启动。

  3. 然后,您可以登录:

    mysql -u root -p
    

    并启动数据库管理任务。

参考文献:

  1. https://help.ubuntu.com/community/MysqlPasswordReset [将很快按照页面中的指示进行清理。]

  2. 与您的特定版本有关的《Ubuntu Server指南》


2
dpkg-reconfigure mariadb-server-10.1当所有其他解决方案均未解决时,可以确认该方法对MariaDB有效。这次真是万分感谢。
liviucmg 2014年

19
dpkg-reconfigure没有提示输入密码..有没有办法强制输入密码?
2015年

15
没有为我工作。我使用上面的命令,并得到“正在检查是否需要更新。此MySQL安装已升级到5.7.13,如果仍然需要运行mysql_upgrade,请使用--force”。使用--force给出相同的响应。
安东尼·斯卡夫

5
显然,这不再起作用了。
dpi

1
@Paulo Henrique否。考虑到这种情况,我们决定最好的时间是重新安装完整的服务器。
Anthony Scaife

21

从此博客获得的参考:

步骤1:停止MySQL服务。

sudo service mysql stop

步骤2:杀死所有正在运行的mysqld。

sudo killall -9 mysqld

步骤3:以安全模式启动mysqld。

sudo mysqld_safe --skip-grant-tables --skip-networking &

步骤4:启动mysql客户端

mysql -u root

步骤5:成功登录后,请执行此命令以更改任何密码。

FLUSH PRIVILEGES;

步骤6:您可以更新mysql root password。

UPDATE mysql.user SET Password=PASSWORD('newpwd') WHERE User='root';

对于mysql> 5.7,请使用它代替上面的方法:

UPDATE mysql.user SET authentication_string=PASSWORD('newpwd') WHERE User='root';

步骤7:请执行此命令。

FLUSH PRIVILEGES;

步骤8:退出mysql控制台

exit

步骤9:杀死mysqld_safe并启动mysql

sudo killall mysqld_safe && sudo service mysql start

1
应该是sudo service mysql stop,而不是sudo stop mysql
knocte '16

1
另外,最后它丢失了步骤sudo killall mysqld_safe && sudo service mysql start,然后尝试再次登录
knocte

3
对于MYSQL 5.7,更改密码语法已更改为ALTER USER root IDENTIFIED BY 'NEW_PASSWORD_HERE'
Tarek Fadel

7
注意!MySQL 5.7中有一个新兽叫auth_socket。如果您在没有root密码的情况下安装mysql,那么野兽将攻击您,并且您将失去50个生命值。在上面的步骤6中,您需要ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'NEWPASS';。你可以在这里阅读。从理论上讲(我没有尝试过),如果您“ sudo su-”成为root用户,则应该能够在没有密码的情况下登录mysql。
olafure

3
如果ALTER USER ...不起作用,请使用UPDATE mysql.user SET authentication_string = PASSWORD('NEWPASS'), plugin = 'mysql_native_password' WHERE User = 'root' AND Host = 'localhost';
olafure '16

9

在Ubuntu 16.04和下mysql-server-5.7,正确的答案是olafure的最后评论,dpkg-reconfigure mysql-server-5.7不再有效。

sudo service mysql stop
sudo killall mysqld
sudo mysqld_safe --skip-grant-tables --skip-networking &
mysql -u root

现在在mysql控制台中 >mysql

USE mysql;
UPDATE user SET authentication_string=PASSWORD('newpass') WHERE user='root';
FLUSH PRIVILEGES;
\q

重新启动 mysql程序

sudo killall mysqld
sudo service mysql start

检查您的新密码

mysql -u root -p
Enter password: newpass
mysql>

5
mysqld_safe执行时,我得到的错误:Directory '/var/run/mysqld' for UNIX socket file don't exists.。所以我跑sudo mkdir /var/run/mysqld; sudo chown mysql /var/run/mysqld了,其余的答案仍然有效。这是Ubuntu 16上的错误吗?我以前从未遇到过所有更新密码的问题。
切斯特

@切斯特非常感谢你!!这是目前所有其他解决方案都抛出错误的唯一方法。(此处为Ubuntu服务器16.04)应将其添加到答案中
-derHugo

3

MySQL 5.7开始,在初始安装期间,如果您将密码保留为空,那么对于该用户,身份验证将基于auth_socket插件。

更改密码的正确方法是:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'test';

https://www.percona.com/blog/2016/03/16/change-user-password-in-mysql-5-7-with-plugin-auth_socket/


这是我的确切情况(在mysql 5.7中安装时为空密码),这是我的唯一解决方案。
cherouvim

我收到消息:ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
user2513149

@ user2513149请重新启动MySQL服务器(不带任何--skip-grant-tables选项),然后查看此解决方案是否有效。
巴伦

@Barun,不,没有--skip-grant-tables选项,我什至无法以root用户身份登录MySQL。它说ERROR 1698 (28000): Access denied for user 'root'@'localhost'
user2513149

解决了!我必须以mysqld_saferoot用户身份登录到常规MySQL控制台(不是),而无需输入密码。我有Ubuntu 18.04和mysql-server-5.7。这个答案对我有帮助askubuntu.com/a/767252/585252(请参阅底部)
user2513149

1

其余答案似乎对我没有任何帮助。这是我的解决方案:

sudo service mysql stop
sudo mysqld_safe &
sudo mysql -u root

在那里:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';
FLUSH PRIVILEGES;
QUIT;

然后:

sudo killall mysqld
sudo service mysql start
sudo mysql -u root -p

1
其余的都对我不起作用...不幸的是,您的解决方案也没有:仍然会收到此错误 2017-05-30T06:33:22.291126Z mysqld_safe Logging to syslog. 2017-05-30T06:33:22.294375Z mysqld_safe Logging to '/var/log/mysql/error.log'. 2017-05-30T06:33:22.296874Z mysqld_safe Directory '/var/run/mysqld' for UNIX socket file don't exists.
derHugo

1
这是我尝试过的六个左右建议中唯一对我有用的建议,但是我在上面添加了@Chester的位以避免“ UNIX套接字文件不存在”错误:sudo mkdir /var/run/mysqld; sudo chown mysql /var/run/mysqld这是在mysql 5.7和ubuntu 18.04上。
两轮车

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.