忘记mysql(mariadb) root密码解决方法

前言

作为一个开发,在mysql(mariadb)数据库中,我几乎不会用数据库的root帐号来折腾项目的数据库,一般是一个数据库帐号对应一个项目或者一个系列的项目,看实际需求。root帐号仅仅作为一个分配管理的角色存在。既然数据库的root用的少,那么会忘记密码的概率就很大。
当然我以前也遇过直接给root帐号用于生产环境的公司;这种给我感觉是放出root帐号用来跑项目,只能说心真大,前者存在被删库跑路的风险,后者存在被rm -rf /的风险。(运维管理能力不一定是开发必备能力,但是如果拥有这个能力是加分项吧,今天不讨论这个话题)



文章基于:

  1. Linux系统下部署的mariadb。
  2. 要有sudo(root)权限,为了方便,下面所有执行的指令已经在sudo su下执行。
  3. 服务的启动/停止使用systemctl

环境描述:

  1. OS:Ubuntu 20.04 LTS
  2. mariadb:10.3.31

1. 停止所有mysql服务

systemctl stop mysql.service

可以ps或者在htop看一下是否已经关闭。

2. 通过mysqld_safe启动数据库

mysqld_safe --defaults-file=my.cnf --skip-grant-tables &

网络上面有的说是修改my.cnf文件,但是后面又要改回来,特别麻烦,倒不如直接通过--skip-grant-tables参数启动。

3. 进入数据库

通过

mysql -u root

进入数据库,此时数据库没有验证流程,可以直接进入。

4. 修改root密码

/*选择`mysql`配置的数据库*/
use mysql;

/*修改root密码为:123*/
UPDATE user SET password=PASSWORD('123') WHERE user='root';

/*刷新权限,可以不执行这句*/
FLUSH PRIVILEGES;

第一句use mysql;选择mysql配置的数据库;
第二句修改root密码,因为mysql用户的密码是密文存储的,因此使用PASSWORD(...)方法来加密(方法是大写);其中上面语句修改密码为123,大家可以自行设定自己的密码。
第三句是刷新权限,可以不执行,反正都要重启数据库(现在用safe模式启动的)。

5. 关闭安全模式,重启mysql

通过htop或者pkill关闭与mysql相关的进程,以停止安全模式。

systemctl start mysql.service


后话

上面的方法属于硬刚mariadb的配置库的user表,虽然说这样做不安全,为了改个密码,偶尔这样巴萨卡一下是ok的。
如果是mysql 8.0以上(非mariadb),据说是不能这样硬刚的,没有实际测试,可以参考:https://www.cnblogs.com/ivictor/p/9243259.html

你可能感兴趣的:(忘记mysql(mariadb) root密码解决方法)