首页 > 数据库 >MySQL root密码忘记解决

MySQL root密码忘记解决

时间:2025-01-11 10:46:19浏览次数:1  
标签:-- skip MySQL 密码 mysqld user mysql root

skip-grant-tables的解法

 

首先,关闭实例

这里,只能通过kill mysqld进程的方式。

注意:不是mysqld_safe进程,也切忌使用kill -9。

# ps -ef |grep mysqld
root      6220  6171  0 08:14 pts/0    00:00:00 /bin/sh bin/mysqld_safe --defaults-file=my.cnf
mysql      6347  6220  0 08:14 pts/0    00:00:01 /usr/local/mysql57/bin/mysqld --defaults-file=my.cnf --basedir=/usr/local/mysql57 --datadir=/usr/local/mysql57/data --plugin-dir=/usr/local/mysql57/lib/plugin --user=mysql --log-error=slowtech.err --pid-file=slowtech.pid --socket=/usr/local/mysql57/data/mysql.sock --port=3307
root      6418  6171  0 08:17 pts/0    00:00:00 grep --color=auto mysqld

# kill 6347

 

使用--skip-grant-tables参数,重启实例

# bin/mysqld_safe --defaults-file=my.cnf --skip-grant-tables  --skip-networking &

设置了该参数,则实例在启动过程中会跳过权限表的加载,这就意味着任何用户都能登录进来,并进行任何操作,相当不安全。

建议同时添加--skip-networking参数。其会让实例关闭监听端口,自然也就无法建立TCP连接,而只能通过本地socket进行连接。

MySQL8.0就是这么做的,在设置了--skip-grant-tables参数的同时会自动开启--skip-networking。

 

修改密码

# mysql -S /usr/local/mysql57/data/mysql.sock

mysql> update mysql.user set authentication_string=password('123456') where host='localhost' and user='root';
Query OK, 0 rows affected, 1 warning (0.00 sec)
Rows matched: 1  Changed: 0  Warnings: 1

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

 

注意: 这里的update语句针对的是MySQL 5.7的操作,如果是在5.6版本,修改的应该是password字段,而不是authentication_string。
update mysql.user set password=password('123456') where host='localhost' and user='root';

 

而在MySQL 8.0.11版本中,这种方式基本不可行,因为其已移除了PASSWORD()函数及不再支持SET PASSWORD ... = PASSWORD ('auth_string')语法。

不难发现,这种方式的可移植性实在太差,三个不同的版本,就先后经历了列名的改变,及命令的不可用。

 

下面,介绍另外一种更通用的做法,还是在skip-grant-tables的基础上。

与上面不同的是,其会先通过flush privileges操作触发权限表的加载,再使用alter user语句修改root用户的密码,如:

# bin/mysql -S /usr/local/mysql57/data/mysql.sock

mysql> alter user 'root'@'localhost' identified by '123';
ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> alter user 'root'@'localhost' identified by '123';
Query OK, 0 rows affected (0.00 sec)
免密码登录进来后,直接执行alter user操作是不行的,因为此时的权限表还没加载。可先通过flush privileges操作触发权限表的加载,再执行alter user操作。

需要注意的是,通过alter user修改密码只适用于MySQL5.7和8.0,如果是MySQL 5.6,此处可写成

update mysql.user set password=password('123456') where host='localhost' and user='root';

 

最后重启实例

mysql> shutdown;

# bin/mysqld_safe --defaults-file=my.cnf &

需要注意的是,如果在启动的过程中没有指定--skip-networking参数,无需重启实例。但在网上看到的绝大多数方案,都是没有指定该参数,但重启了实例,实在没有必要。

下面对这个方案做个总结:

1. 如果只添加了--skip-grant-tables,修改完密码后,其实无需重启,执行flush privileges即可。

2. 从安全角度出发,建议加上--skip-networking。但因其是静态参数,将其剔除掉需要重启实例。

3. 加上--skip-networking,虽然可以屏蔽掉TCP连接,但对于本地其它用户,只要有socket文件的可读权限,都能无密码登录。还是存在安全隐患。

4. 不建议通过update的方式修改密码,更通用的其实是alter user。

 

更优雅的解法

相对于skip-grant-tables方案,我们来看看另外一种更优雅的解法,其只会重启一次,且基本上不存在安全隐患。

首先,依旧是关闭实例

其次,创建一个sql文件

写上密码修改语句

# vim init.sql 
alter user 'root'@'localhost' identified by '123456';

 

最后,使用--init-file参数,启动实例

# bin/mysqld_safe --defaults-file=my.cnf --init-file=/usr/local/mysql57/init.sql &

实例启动成功后,密码即修改完毕~

 

如果mysql实例是通过服务脚本来管理的,除了创建sql文件,整个操作可简化为一步。

# service mysqld restart --init-file=/usr/local/mysql57/init.sql 

注意:该操作只适用于/etc/init.d/mysqld这种服务管理方式,不适用于RHEL 7新推出的systemd。

标签:--,skip,MySQL,密码,mysqld,user,mysql,root
From: https://www.cnblogs.com/shujuyr/p/18404065

相关文章

  • MySQL基础
    MySQL基础目录MySQL基础一、概述启动与停止客户端连接数据模型二、基础内容01SQLSQL通用语法SQL分类DDLDMLDQLDCL02函数字符串函数数值函数日期函数流程函数03约束约束演示外键约束04多表查询多表关系内连接外连接自连接联合查询(union,unionall)子查询表子查询05事务事务操作事务......
  • Java项目:衣依服装销售平台(java+SpringBoot+Mybaits+Vue+elementui+mysql)
     源码获取:俺的博客首页"资源"里下载!项目介绍基于springboot的“衣依”服装销售平台的设计与实现环境需要1.运行环境:最好是javajdk1.8,我们在这个平台上运行的。其他版本理论上也可以。2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;3.硬件环境:windows7/8/101G......
  • Nlog写入MySql
    1.安装相关Nuget包mysql.data,Nlog,Nlog.Database2.新建配置文件,并右击配置文件修改属性复制到输出目录-始终复制<?xmlversion="1.0"encoding="utf-8"?><configuration><nlogxmlns="http://www.nlog-project.org/schemas/nlog.xsd"xml......
  • livecd修改/破解系统密码
    livecd修改/破解系统密码livecd网站下载大全  https://livecdlist.com/purpose/desktop/ 常规linux改系统密码都是得先进入单用户模式,然后chroot到/sysroot,根据其原理,其本质其实是通过挂载(mount)和切换根目录(chroot),从一个操作系统免密切换到另一个操作系统,然后修改后者的......
  • 【MySQL】第五章 数据类型
    系列文章目录《【MySQL】第一章MySQL5.7的安装与卸载》《【MySQL】第二章初识数据库》《【MySQL】第三章库的操作》《【MySQL】第四章表的操作》《【MySQL】第五章数据类型》文章目录系列文章目录环境准备数据类型分类数值类型数值类型分类整数类型浮点数FL......
  • 你的浏览数据还安全吗? 明文提取账号密码。
    序列个人博客:https://www.xenoecho.us.kg/喜欢的朋友可以搜索公众号“泷羽Sec-小篮子”还有文章中和渗透中工具和文章在筹备着,另外学习没思路?安全不知道怎么学习的朋友可以了解一下公众号内的红队全栈公益课,以及OSCP证书报考指南哦!简介每次登录网站时,你的账号和密码......
  • MySQL索引原理及慢查询优化13
    背景MySQL凭借着出色的性能、低廉的成本、丰富的资源,已经成为绝大多数互联网公司的首选关系型数据库。虽然性能出色,但所谓“好马配好鞍”,如何能够更好的使用它,已经成为开发工程师的必修课,我们经常会从职位描述上看到诸如“精通MySQL”、“SQL语句优化”、“了解数据库原理”等......
  • MySQL 学习指南与资料分享
    MySQL学习资料https://pan.quark.cn/s/4102ccd1336dMySQL学习资料https://pan.quark.cn/s/4102ccd1336dMySQL学习资料https://pan.quark.cn/s/4102ccd1336d在如今数据驱动发展的大趋势下,MySQL作为开源关系型数据库管理系统的佼佼者,广泛应用于各个领域,从个人博客搭建到......
  • 安装Fedora提示“Warning: /dev/root does not exist, could not boot”
    方法一:1.首先U盘启动,选择安装centos7,一直等,最终进入命令行:dracut:#dracut:#cd/devdracut:/dev#ls查看你的U盘,一般是第二块硬盘sdb4。如果还不确定,记下sdb3之后的几块盘,就拔出U盘,ls几次看看少了哪一个盘,一般就看不到sdb4了,如果看不到sdb4了,那我们的U盘就是sdb4,否则......
  • 【MySQL8】压缩包方式卸载
    版本:v8.0.26今天mysql启动的时候报错,跟着网上的教程排查了几次,最后决定卸了重装,反正是学习环境备份数据(可选)如果是生产环境/开发环境,第一步是备份数据,我不备份你可以选择更简单的方式:复制data文件夹,但是版本兼容性很差,会出现各种毛病,导致数据无法展示也无法恢复,不推荐我......