如何在线不停机快速重置mysql的root登录密码

本文章的使用到的MySQL版本:

Server version: 5.7.17 MySQL Community Server (GPL)

首先了解一下,此版本的离线重置方式(需要重启MySQL服务),此方法不适合生产环境中。

 vim /etc/my.cnf
# 在配置文件中加入不验证登录配置
skip_grant_tables
# 保存并退出
# 重启MySQL服务
systemctl restart mysqld

 在修改my.cnf配置文件的时候,存在密码的策略,请清除掉以恢复默认的密码策略

# 输入mysql可以直接登陆上mysql
mysql

# 通过 skip-grant-tables 登录的情况,是不支持grant方式进行密码重置
mysql> grant all on *.* to root@'localhost' identified by '123!@#Qq';
ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement

# 可以查询到用户表的字段有叫 authentication_string,用于存入加密的登录密码
mysql> desc mysql.user;

# 因此更新user表中authentication_string对应的密码,使用password()作为加密方式
mysql> update mysql.user set authentication_string=password('123!@#Qq') where User='root' and Host='localhost';

# 确保权限生效
mysql> flush privileges; 
mysql> exit;


# 去掉对主配置文件的修改并重启数据库服务
vim /etc/my.cnf  
[mysqld]
#skip-grant-tables

# 重启服务
systemctl  restart mysqld

以上方法适用于可以反复重启MySQL服务的情况

以下方式,可以进行在线状态的强制修改root登录密码!

在日常工作中难免会出现root密码忘记或者交接出现问题,同时又不能影响在线业务,可以使用以下方案进行重置。

思路:

1.将需要重置主机/var/lib/mysql/mysql 所有user用户文件直接拷贝到一个能够使用的mysql主机。

2.通过上面离线状态的方法修改对应账户的密码

3.重新拷贝user用户记录表到在线数据库上

4.查看mysql的父进程,再通过发送SIGHUP信号进行重新加载

5.使用新密码进行登录

# 待破解root密码的数据库A的用户信息(用户表的表结构,数据,索引)
ll /var/lib/mysql/mysql | grep user.*
-rw-r----- 1 mysql mysql   10816 Aug 31 11:07 user.frm
-rw-r----- 1 mysql mysql     488 Sep  3 05:14 user.MYD
-rw-r----- 1 mysql mysql    4096 Sep  3 05:14 user.MYI

# 将本地的用户数据库文件拷贝到辅助的数据库B上(前提新建一个test库)
rsync -av /var/lib/mysql/mysql/user.* 192.168.2.2:/var/lib/mysql/test/

# ---------------------------------------------------------------------------

# 进入辅助的数据库B服务器

mysql> update test.user set authentication_string=password('123!@#Qq') where  User='root' and Host='localhost';

# 再拷贝对应文件回原数据库A
rsync -av /var/lib/mysql/test/user.*  192.168.2.1:/var/lib/mysql/mysql/

# ---------------------------------------------------------------------------

# 查询数据库A的进程号
ps -aux | grep mysqld
mysql      2390  0.0 21.2 1132988 212056 ?      Sl   Sep03   0:45 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid
# 获取到PID为2390

# 给数据库A发送SIGHUP信号,能够重新加载用户表
kill -SIGHUP 2390

# 验证登录已经修改的root密码
mysql -uroot -p'123!@#Qq'

此办法适用于在线修改,不需要对业务进行中断操作! 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值