忘记mysql(mariadb) root密码解决方法
2021-08-15 本文已影响0人
老猫烧须
前言
作为一个开发,在mysql(mariadb)数据库中,我几乎不会用数据库的root
帐号来折腾项目的数据库,一般是一个数据库帐号对应一个项目或者一个系列的项目,看实际需求。root
帐号仅仅作为一个分配管理的角色存在。既然数据库的root
用的少,那么会忘记密码的概率就很大。
当然我以前也遇过直接给root帐号用于生产环境
的公司;这种给我感觉是放出root
帐号用来跑项目,只能说心真大,前者存在被删库跑路的风险,后者存在被rm -rf /
的风险。(运维管理能力不一定是开发必备能力,但是如果拥有这个能力是加分项吧,今天不讨论这个话题)
文章基于:
- Linux系统下部署的mariadb。
- 要有
sudo
(root)权限,为了方便,下面所有执行的指令已经在sudo su
下执行。 - 服务的
启动/停止
使用systemctl
。
环境描述:
- OS:
Ubuntu 20.04 LTS
- 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