MySQL—修改 root 密码方法总结(包括已知密码和忘记密码的情况)

本贴最后更新于 1711 天前,其中的信息可能已经事过景迁

一、记得旧密码

方法 1: 用 SET PASSWORD 命令

首先登录 MySQL。

格式:

mysql> set password for 用户名@'localhost' = password('新密码'); 

例子:

mysql> set password for root@'localhost' = password('123'); 

方法 2:用 mysqladmin

格式:

mysqladmin -u用户名 -p旧密码 password 新密码 

例子:

mysqladmin -uroot -p123456 password 123 

方法 3:用 UPDATE 直接编辑 user 表

首先登录 MySQL。

mysql> use mysql; 
mysql> update user set authentication_string=password('123') where user='root' and host='localhost'; 
mysql> flush privileges; 

二、忘记旧密码

windows 下:

1. 关闭正在运行的 MySQL 服务。

2. 打开 DOS 窗口,转到 mysql\bin 目录。

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

4. 再开一个 DOS 窗口(因为刚才那个 DOS 窗口已经不能动了),转到 mysql\bin 目录。

5. 输入 mysql 回车,如果成功,将出现 MySQL 提示符 >

6. 连接权限数据库: use mysql;

7. 改密码:

mysql>update user set authentication_string=password("123") where user="root"; 

8. 刷新权限(必须步骤):

mysql>flush privileges; 

9. 退出 quit。

10. 注销系统,再进入,使用用户名 root 和刚才设置的新密码 123 登录。

ubuntu 下

1.停止 MySQL 服务

sudo service mysql stop

2.进入 mysql 配置文件目录

cd /etc/mysql/mysql.conf.d 

3.编辑配置文件

sudo nano mysqld.cnf

[mysqld] 下面添加 skip-grant-tables(可以试试这个命令:mysqld --skip-grant-tables)

4.启动服务

sudo service mysql start

5.登录 mysql

mysql -u root -p

执行以下命令

mysql>update mysql.user  set authentication_string=password('newpassword') where user='root';
mysql>update mysql.user set plugin="mysql_native_password"; 
mysql>flush privileges;
mysql>quit;

6.注解掉 skip-grant-tables

7.重启服务

sudo service mysql restart

centos 下:

1.修改 /etc/my.cnf ,最下面添加 skip-grant-tables=1

2.重启 mysql 服务

systemctl restart mysqld

3.登录 mysql

mysql -u root -p

执行以下命令

mysql>update mysql.user  set authentication_string=password('newpassword') where user='root';
mysql>update mysql.user set plugin="mysql_native_password"; 
mysql>flush privileges;
mysql>quit;

4.注解掉 skip-grant-tables=1

5.重启服务

systemctl restart mysqld

三、故障解决

3.1 ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executin

解决办法
1、 修改用户密码

mysql> alter user 'root'@'localhost' identified by 'youpassword';  

或者

mysql> set password=password("youpassword");

2、刷新权限

mysql> flush privileges;

3.2 Please use --connect-expired-password option or invoke mysql in interactive mode.

此故障一般见于非 mysql 终端下直接用 -e 执行命令的时候。解决办法:在命令后加上 --connect-expired-password 即可:

mysql -u root -pyoupassword -e "show databases;" --connect-expired-password
  • MySQL

    MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是最流行的关系型数据库管理系统之一。

    692 引用 • 535 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...