如何重设 MySQL 的 root 密码

幸运地是,重设密码很容易。

注意:MySQL的root用户和服务器操作系统的root用户是两个不同的用户,不要搞混了。

安全模式重置法

基本的思路是,以安全模式启动mysql,这样不需要密码可以直接以root身份登录,然后重设密码。

首先,我们停掉MySQL服务:

sudo service mysql stop  

以上命令适用于Ubuntu和Debian。CentOS、Fedora和RHEL下使用mysqld替换mysql。

以安全模式启动MySQL:

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

注意我们加了--skip-networking,避免远程无密码登录 MySQL。

这样我们就可以直接用root登录,无需密码:

mysql -u root  

接着重设密码:

mysql> use mysql;  
mysql> update user set password=PASSWORD("mynewpassword") where User='root';  
mysql> flush privileges;  

注意

我的mysql版本 MYSQL V5.7.9,旧版本请使用:

1
UPDATE mysql.user SET Password=PASSWORD('新密码') WHERE User='root';

,命令后需要加分号。

重设完毕后,我们退出,然后启动 MySQL 服务:

mysql > quit  

quit不需要分号。

重启服务:

sudo service mysql restart  

同样,以上命令适用于Ubuntu和Debian,Centos、Fedora和RHEL需要用mysqld替换mysql

现在可以尝试用新密码登录了:

mysql -u root -pmynewpassword  

注意,-p 和密码间不能有空格。

Mac OS X – 重置 MySQL Root密码

密码太多记不住??你是否忘记了Mac OS 的MySQL的root密码? 通过以下4步就可重新设置新密码:

1. 停止 mysql server.

通常是在 ‘系统偏好设置’ > MySQL > ‘Stop MySQL Server’

2. 打开终端,输入:

1
sudo /usr/local/mysql/bin/mysqld_safe --skip-grant-tables

3. 打开另一个新终端,输入:

1
2
3
4
5
6
7
sudo /usr/local/mysql/bin/mysql -u root
  UPDATE mysql.user SET authentication_string=PASSWORD('你的新密码') WHERE User='root';
  FLUSH PRIVILEGES;
  exit

4. 重启MySQL.

C:\Program Files\MySQL\MySQL Server 5.7\bin>mysql
ERROR 2003 (HY000): Can’t connect to MySQL server on ‘localhost’ (10061)

C:\Program Files\MySQL\MySQL Server 5.7\bin>mysqladmin -u root flush-privileges
password “newpassword”
mysqladmin: [Warning] Using a password on the command line interface can be inse
cure.
Warning: Since password will be sent to server in plain text, use ssl connection
to ensure password safety.
mysqladmin: unable to change password; error: ‘Operation ALTER USER failed for ‘
root’@’skip-grants host”

其他方案

以上是通用方案,在Ubuntu和Debian系统上,有一个debian-sys-maint用户,Debian类系统下一些系统脚本对mysql的操作是通过这个用户完成的。所以我们可以通过这个用户来修改 root 密码。该用户的密码可以在/etc/mysql/debian.cnf下找到:

# Automatically generated for Debian scripts. DO NOT TOUCH!
[client]
host     = localhost  
user     = debian-sys-maint  
password = PASSWORD  
socket   = /var/run/mysqld/mysqld.sock  
[mysql_upgrade]
host     = localhost  
user     = debian-sys-maint  
password = PASSWORD  
socket   = /var/run/mysqld/mysqld.sock  
basedir  = /usr  

用该用户登录 MySQL 后,也可以修改密码(具体修改过程见上):

sudo mysql -u debian-sys-maint -p  

mysql:Windows修改MySQL数据库密码(修改或忘记密码)

以实际操作修改root密码为例,操作系统为windows
这里我们需要注意的是,修改MySQL是需要MySQL中的root权限,一般用户是无法更改的,除非请求管理员。

修改密码的三种简单方法

第一种​用SET PASSWORD命令

1.打开cmd进入MySQL的bin目录;(如我的路径是F:\MySQL\mysql-5.7.24-winx64\bin)

2.通过输入命令 mysql -u root -p 指定root用户登录MySQL,输入后回车会提示输入密码,输入我们原来的密码然后回车。

3.修改MySQL的root用户密码,格式:mysql> set password for 用户名@localhost = password(‘新密码’);
例如(上面例子将用户root的密码更改为root):mysql> set password for root@localhost = password(‘root’);

4.退出mysql重新登录,输入新密码root登录就可以了;
在这里插入图片描述

第二种 用mysqladmin修改密码

1.打开cmd进入MySQL的bin目录;(如我的路径是F:\MySQL\mysql-5.7.24-winx64\bin)

2.修改MySQL的root用户密码格式:mysqladmin -u用户名 -p旧密码; password 新密码
例如(第一种方法中我将密码改成了root,这里再改回123):
mysqladmin -uroot -proot password 123(这里一定要注意-uroot和 -proot是整体,不要写成-u root -p root,我亲自验证过他们直接加-u和root间可以加空格,但是会有警告出现,所以就不要加空格了)

重新登录,输入新密码123就ok了;
在这里插入图片描述

第三种用UPDATE直接编辑user表

首先声明,这种方法我测试了半个小时也没有成功,但是网上查询很多人都成功了,感兴趣的话可以尝试一下。下面是步骤
首先还是通过cmd 登录MySQL
连接权限数据库: use mysql;
改密码:update user set password=password(“123”) where user=“root”;(别忘了最后加分号) 。

以上不行可试:

UPDATE mysql.user SET authentication_string=PASSWORD('你的新密码') WHERE User='root';
刷新权限(必须步骤):flush privileges;

忘记root密码情况

1.关闭正在运行的MySQL服务。打开cmd进入MySQL的bin目录;

2.输入mysqld –skip-grant-tables 回车。(–skip-grant-tables 的意思是启动MySQL服务的时候跳过权限表认证。)

3.再开一个DOS窗口(因为刚才那个DOS窗口已经不能动了),输入mysql回车,如果成功,将出现MySQL提示符 >。
连接权限数据库: use mysql; 。
4.改密码:update user set password=password(“root”) where user=“root”;(别忘了最后加分号) 。
刷新权限(必须步骤):flush privileges; 。
退出 quit;
重启mysql服务,使用用户名root和刚才设置的新密码root登录就ok了;

在这里插入图片描述

以上2步,可以修改my.ini

C:\ProgramData\MySQL\MySQL Server 5.7\my.ini

”,在“查找内容”处输入[mysqld],并点击“查找下一个”,它会自动转到[mysqld]字段行。在下面增加一行skip-grant-tables并保存,如下图: