无法重置mysql的root密码

std*_*err 29 mysql password reset

我需要重置本地 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
Run Code Online (Sandbox Code Playgroud)

我怎样才能重置密码? 编辑 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)
Run Code Online (Sandbox Code Playgroud)

看起来一个进程会在我杀死它后自动重新启动 mysql ......

pre*_*ise 44

首先请尝试使用

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

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

如果你真的需要为 mysql 重置你的 root 密码,这里有一个简单的方法 - 用dpkg-reconfigure.

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

  1. 检查您的版本mysql-server

    apt-cache policy mysql-server
    
    Run Code Online (Sandbox Code Playgroud)

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

    Installed: 5.5.37-0ubuntu0.12.04.1
    
    Run Code Online (Sandbox Code Playgroud)

    (由此我知道我已经mysql-server-5.5安装在我的系统中。)

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

    sudo dpkg-reconfigure mysql-server-*.*
    
    Run Code Online (Sandbox Code Playgroud)

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

    快照1

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

  3. 然后您可以登录:

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

    并开始您的数据库管理任务。

参考:

  1. https://help.ubuntu.com/community/MysqlPasswordReset [很快就会被清理,如页面所示。​​]

  2. 与您的特定版本相关的Ubuntu 服务器指南

  • `dpkg-reconfigure` 没有提示我输入密码.. 有没有办法强制它? (21认同)
  • 没有为我工作。我使用了上面的命令,得到了“检查是否需要更新。MySQL的这个安装已经升级到5.7.13,如果你仍然需要运行mysql_upgrade,请使用--force”。使用 --force 给出了相同的响应。 (16认同)
  • 显然这不再起作用了。 (6认同)
  • 可以确认 `dpkg-reconfigure mariadb-server-10.1` 在所有其他解决方案都没有时适用于 MariaDB。这次真是万分感谢。 (3认同)

小智 22

参考来自此博客:

第 1 步:停止 MySQL 服务。

sudo service mysql stop
Run Code Online (Sandbox Code Playgroud)

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

sudo killall -9 mysqld
Run Code Online (Sandbox Code Playgroud)

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

sudo mysqld_safe --skip-grant-tables --skip-networking &
Run Code Online (Sandbox Code Playgroud)

第四步:启动mysql客户端

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

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

FLUSH PRIVILEGES;
Run Code Online (Sandbox Code Playgroud)

第 6 步:您可以更新 mysql root 密码。

UPDATE mysql.user SET Password=PASSWORD('newpwd') WHERE User='root';
Run Code Online (Sandbox Code Playgroud)

对于 mysql > 5.7 使用这个而不是上面的:

UPDATE mysql.user SET authentication_string=PASSWORD('newpwd') WHERE User='root';
Run Code Online (Sandbox Code Playgroud)

第 7 步:请执行此命令。

FLUSH PRIVILEGES;
Run Code Online (Sandbox Code Playgroud)

第八步:退出mysql控制台

exit
Run Code Online (Sandbox Code Playgroud)

第 9 步:杀死 mysqld_safe 并启动 mysql

sudo killall mysqld_safe && sudo service mysql start
Run Code Online (Sandbox Code Playgroud)

  • **笔记**!MySQL 5.7 中有一个名为 auth_socket 的新野兽。如果你在没有 root 密码的情况下安装 mysql,野兽会攻击你,你会失去 50 点生命值。在上面的第 6 步中,您需要 ```ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'NEWPASS';```。你可以在[这里](https://www.percona.com/blog/2016/03/16/change-user-password-in-mysql-5-7-with-plugin-auth_socket/)阅读它。理论上(我没有尝试过),如果您“sudo su -”成为root,您应该可以在没有密码的情况下登录mysql。 (9认同)
  • 如果 ```ALTER USER ...``` 不起作用,请使用 ```UPDATE mysql.user SET authentication_string = PASSWORD('NEWPASS'), plugin = 'mysql_native_password' WHERE User = 'root' AND Host = '本地主机';``` (6认同)
  • 对于 MYSQL 5.7,更改密码语法已更改为`ALTER USER root IDENTIFIED BY 'NEW_PASSWORD_HERE'` (3认同)

Pie*_*ien 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
Run Code Online (Sandbox Code Playgroud)

现在在 mysql 控制台中 >mysql

USE mysql;
UPDATE user SET authentication_string=PASSWORD('newpass') WHERE user='root';
FLUSH PRIVILEGES;
\q
Run Code Online (Sandbox Code Playgroud)

重新开始美好的 mysql过程

sudo killall mysqld
sudo service mysql start
Run Code Online (Sandbox Code Playgroud)

检查您的新密码

mysql -u root -p
Enter password: newpass
mysql>
Run Code Online (Sandbox Code Playgroud)

  • 在“mysqld_safe”执行时,我收到错误消息:UNIX 套接字文件的“目录 '/var/run/mysqld' 不存在。”。所以我跑了`sudo mkdir /var/run/mysqld; sudo chown mysql /var/run/mysqld` 和上述答案的其余部分有效。这是 Ubuntu 16 上的错误吗?我以前从未遇到过更新密码的所有这些问题。 (6认同)