MySQL 忘记root密码的两种处理方法
【背景】
由于各个原因,我遇到过不只一次我服务的客户忘记了MySQL的root密码;如果是普通用户还好,我们可以用root用户去改它的密码,要命
的是把root给丢了!
对于MySQL来说如果你忘记了root密码,但是你又想通过改密码的方式把root密码找回来的话,你就要作好重启的准备了。
【方法一: skip_grant_tables + skip-networking 两次重启】
1): 第一步把MySQL给关掉
ps -ef | grep mysql
mysql : ? :: /usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf kill -
2): 以skip-grant-tables skip-networking 模式启动 mysqld
/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --skip-grant-tables --skip-networking &
3): 进入mysql
如果是mysql-5.7的话密码的hash值保存在了authentication_string这个列里面,5.7之前的版本保存在password列里面
select user,host,authentication_string from mysql.user;
+---------------+-----------+-------------------------------------------+
| user | host | authentication_string |
+---------------+-----------+-------------------------------------------+
| root | localhost | *91B73478B18B04D13F6926FAB5A6178250EAB697 |
| mysql.session | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| mysql.sys | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| monitor | 127.0.0.1 | *DAD735712BB263A8DA12A091AABC625FE99DD344 |
| root | 127.0.0.1 | *91B73478B18B04D13F6926FAB5A6178250EAB697 |
| backup | 127.0.0.1 | *2139A3EF5FE5A0229BE550AD5ED2947B07F43B93 |
| backup | localhost | *2139A3EF5FE5A0229BE550AD5ED2947B07F43B93 |
| appuser | 127.0.0.1 | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
+---------------+-----------+-------------------------------------------+
8 rows in set (0.01 sec)
采用直接更新密码hash值的方式来更新密码
update mysql.user set authentication_string = password('MTls0352') where user='root'; -- 更新密码为MTls0352
Query OK, 2 rows affected, 1 warning (1.01 sec)
Rows matched: 2 Changed: 2 Warnings: 1
select user,host,authentication_string from mysql.user;
+---------------+-----------+-------------------------------------------+
| user | host | authentication_string |
+---------------+-----------+-------------------------------------------+
| root | localhost | *597B32612905C92ABC495354FC276D24D0A541C1 |
| mysql.session | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| mysql.sys | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| monitor | 127.0.0.1 | *DAD735712BB263A8DA12A091AABC625FE99DD344 |
| root | 127.0.0.1 | *597B32612905C92ABC495354FC276D24D0A541C1 |
| backup | 127.0.0.1 | *2139A3EF5FE5A0229BE550AD5ED2947B07F43B93 |
| backup | localhost | *2139A3EF5FE5A0229BE550AD5ED2947B07F43B93 |
| appuser | 127.0.0.1 | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
+---------------+-----------+-------------------------------------------+
8 rows in set (0.00 sec)
4): 重启mysqld
pkill mysql /usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf &
5): 用新的密码进入MySQL
mysql -uroot -pMTls0352
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.23-log MySQL Community Server (GPL) Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> show grants;
+---------------------------------------------------------------------+
| Grants for root@localhost |
+---------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION |
| GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION |
+---------------------------------------------------------------------+
2 rows in set (0.01 sec)
【方法二:init-file + 一次重启】
1): 创建用于修改root密码的sql文件
touch /tmp/change_password.sql
内容如下
alter user root@'127.0.0.1' identified by 'mtls0352';
alter user root@'localhost' identified by 'mtls0352';
2): 关闭mysql服务
pkill mysqld # 我的主机上只有一个mysql服务所以用pkill mysqld 没有问题,如果你是单机多实例请用 kill $MYSQLPID
3): 代入修改密码的init-file来启动MySQL服务
/usr/local/mysql/bin/mysqld --init-file=/tmp/change_password.sql &
4): 用新密码登录MySQL
mysql -uroot -pmtls0352
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is
Server version: 5.7.-log MySQL Community Server (GPL) Copyright (c) , , Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> show grants;
+---------------------------------------------------------------------+
| Grants for root@localhost |
+---------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION |
| GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION |
+---------------------------------------------------------------------+
rows in set (0.00 sec)
5): 删除修改密码的sql文件
rm /tmp/change_password.sql
【我的评介】
a: 第一种方法比较传统,第二种方法“角度刁钻” 但是两个都能解决问题;并且第二种方法看起来步骤又少一些,但是这并不只是问题的全部
通常一个线上的MySQL实例并不是以“/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf &” 这样直接下命令的方式启动的,它们
通常和service ,systemctl 一起用的;所以这种情况下针对“方法二”还是要用service 或 systemctl把数据拉起来的,不然就不能用它们来管理
了,所以“方法二”最终也是要两次重启的。
b: 方法二能使用“alter user”语法,dba就可以不用care密码到底保存在mysql.user表中的那个列。
两种方法各有好处,所以重点还是要把一个方法搞的出神入画!
【学习交流】
-----------------------------http://www.sqlpy.com-------------------------------------------------


-----------------------------http://www.sqlpy.com-------------------------------------------------
MySQL 忘记root密码的两种处理方法的更多相关文章
- MySQL忘记root密码不重启mysqld的方法
MySQL忘记root密码不重启mysqld的方法 1.首先得有一个可以拥有修改权限的mysql数据库账号,当前的mysql实例账号(较低权限的账号,比如可以修改zabbix数据库)或者其他相同版 ...
- mysql忘记root密码解决办法
最近项目中的数据库我放在了服务器上,但是今天突然不能用了,进入服务器查看,果然是数据库不能进去了,所以今天来分享一个mysql忘记root密码的解决方案: 1.让mysql不载入权限表,命令:mysq ...
- MySQL 5.7 Command Line Client输入密码后闪退和windows下mysql忘记root密码的解决办法
MySQL 5.7 Command Line Client输入密码后闪退的问题: 问题分析: 1.查看mysql command line client默认执行的一些参数.方法:开始->所有程序 ...
- Ubuntu下MySQL忘记root密码重置
MySQL忘记root密码肿么办?-_-||| 这种情况虽然不是很常见,但是有时长时间没有登录系统,还真会忘记密码.这时候,如果您能以系统管理员权限登陆密码,那还是有救的.放大招,将其重置即可. ...
- linux下mysql忘记root密码怎么办
Linux下MySQL忘记root密码怎么办? Linux下MySQL忘记root密码怎么办? 1. 修改MySQL配置文件 默认MySQL的配置文件为/etc/my.cnf,在[mysqld]下面添 ...
- 附录:MySQL忘记root密码
中小型规模网站集群架构:MySQL忘记root密码 : 矮哥linux运维群:93324526 前言 你忘记系统root密码的时候,你怎么解决的? 不就是single用户进行修改密码吗?这里原理是类似 ...
- windows下mysql忘记root密码的解决办法
今天早上 一朋友说自己的mysql 忘记root密码了 让我帮忙给看看,因为没有接触过mysql 所以从网上找了一下信息经我亲身实践 已经成功!mysql版本是5.1以下是从网上找的信息: 1. 首 ...
- mysql忘记root密码的解决方法
Windows下mysql忘记root密码的解决方法 1. 首先检查mysql服务是否启动,若已启动则先将其停止服务,可在开始菜单的运行,使用命令:net stop mysql 或者在windows任 ...
- skip-grant-tables 修改linux的mysql忘记root密码
skip-grant-tables 修改linux的mysql忘记root密码 今天修改mysql中的admin用户权限,在执行update user set host =' %' where use ...
随机推荐
- gradle 配置及设置本地仓库
安装Gradle 从官方网站下载安装包,解压到目录 设置环境变量 GRADLE_HOME=D:\gradle\gradle-3.4.1 PATH=;%GRADLE_HOME%\bin 设置本地仓库目录 ...
- SQL Server临时表
[]SQL Server临时表]()https://docs.microsoft.com/zh-cn/sql/relational-databases/tables/temporal-tables)
- C# Chart控件的使用总结1
(1)来自SQL server 此时就可以用查询语句,来获取你要用到的数据 (要引用如下命名空间: using System.Data.SqlClient; usingSystem.Windows.F ...
- tpcc-mysql 系列一:安装使用
1:安装epel包: rpm -Uvh http://dl.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm 2: yum i ...
- PgSQL · 源码分析· pg_dump分析
PostgreSQL本身提供了逻辑导出工具pg_dumpall和pg_dump,其中pg_dumpall导出所有的数据库,pg_dump导出单个数据库,两个工具的用法和参数不再详细介绍,本文从代码层面 ...
- cocos2d-js 粒子系统使用自定义图片,还原原来的图片宽高
粒子系统使用自定义图片很简单只需要在plist最后一行设置png的名称即可.但是,在实际使用中,发现自定义图片无法使用原来的形状,例如设置了一长条的图片,结果出来确实一个个圆球. 翻了plist和cc ...
- Android 百度地图开发(一)
在自己的Android项目中增加百度地图的功能. 一 申请API key 在使用百度地图之前,我们必须去申请一个百度地图的API key,申请地址http://lbsyun.baidu.com/api ...
- java 生成GUID与UUID
java 生成GUID与UUID CreateTime--2018年5月31日16点29分 Author:Marydon import java.util.UUID; public static ...
- great tips in soapui
from this site :http://onebyteatatime.wordpress.com/2009/04/18/soapui-tips-n-tricks-part-2/
- SElinux测试及排错
一.修改SElinux的状态 #sestatus --查看状态 #setenforce --临时修改 #setenforce #getenforce #vim /etc/selinux/config ...