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

MySQL忘记root密码解决方案

时间:2023-09-04 14:22:07浏览次数:46  
标签:权限 解决方案 MySQL 密码 user mysql password root

Linux系统-部署-运维系列导航

 

场景一:重置root密码

mysql登录密码为password()算法加密,解密成本太高,以下为通用方案; 原理:mysql提供了特殊启动方式,即跳过权限表验证,启动后,登录不需要提供密码; 登录后,即可修改mysql数据库的user表,重置密码,然后刷新权限,重启mysql服务即可; 注意:此时mysql服务将面临高风险,请在合适时间执行;   #停止正在运行的mysql服务
service mysqld stop

 

#以--skip-grant-tables选项启动服务,跳过权限表验证,有2种方式 方式1:指定运行选项,只在本次启动生效
./bin/mysqld_safe --skip-grant-tables --user=root &
如果本机没有mysqld_safe服务,运行mysqld效果相同

 

方式2:修改配置文件,使用service、systemctl启动均生效
修改配置文件my.cnf,添加 skip-grant-tables
my.cnf可能存在多个,请使用  sudo mysql --help | grep my.cnf   或   mysql --help | grep 'Default options' -A 1 确认加载顺序

 

#root账号登录mysql,此时不需要提供密码
mysql -uroot

#切换到mysql数据库,登录账号与权限在此数据库中
use mysql;

#查看mysql版本
select version();

#查看当前账户信息,根据mysql版本执行
#5.7+版本密码为authentication_string(生效),password;
#5.7-版本密码为password 
#user=用户名,host=登录IP,即允许该账户登录的IP地址,每个IP一条user表记录,%表示任意IP
select user,host,authentication_string,password from user where user='root';

#5.7+设置密码
update user set authentication_string=password('password') where user='root';
--and Host='localhost';

#5.7-设置密码
update mysql.user set password=password('password') where user='root';
--host='localhost';

#5.7+支持2个密码字段,直接设置2个,生效为authentication_string
update user set authentication_string=password('password'),password=password('password') where user='root' ;
--and Host='localhost';

#刷新权限表
flush privileges;

#退出mysql连接
quit;

#重启mysql服务
service mysqld restart

 

场景二:增加账号与授权

以上--skip-grant-tables模式不验证权限,同时无法增加账号授权,所以增加账号的登录IP,需要以正常模式启动登录
#密码登录重启后的mysql服务
mysql -u root -p
 
#切换mysql数据库,账号和权限在此数据库
use mysql;
 
#增加账号授权
grant all privileges on *.* to "root"@"ip" identified by "password" with grant option;
 
#刷新权限表
flush privileges;
 
#退出mysql连接
quit;
 
#无需重启服务

 

场景三:修改登录密码

1> 更新mysql.user表,需要登录MySQL执行,需要刷新权限列表生效
mysql> use mysql; #5.7前后版本密码字段不一致,且 user 表同时存在2个字段
# mysql5.7之前
mysql> update user set password=password('123456') where user='root' and host='localhost';
# mysql5.7之后
mysql> update user set authentication_string=password('123456') where user='root' and host='localhost';
mysql> flush privileges; #刷新权限列表

 

2> 用set password命令,需要登录MySQL执行,自动刷新权限列表
语法:set password for '用户名'@'域'=password(‘密码’)
mysql> set password for 'root'@'localhost'=password('123456');

 

3> alter user命令,需要登录MySQL执行,自动刷新权限列表
语法:ALTER USER '用户名'@'域' IDENTIFIED BY 'xxxx'; 
#初始化时root账号只有localhost
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
  4> grant命令,需要登录MySQL执行,自动刷新权限列表
语法:GRANT 权限列表(逗号分隔) ON 数据库.数据表 TO '用户'@'域' IDENTIFIED BY '密码';
#grant语句自动创建用户以及设置密码
#权限支持 create、update、select、lete、drop、execute等,也可以指定 all privileges 授权所有权限
#grant语句最后可以指定 WITH GRANT OPTION 指定用户可以将权限传递授权给其他用户。
#数据库与数据表支持 * 指定全部,如 testdb.* 或 *.*,其他情况只能一条授权一个数据表
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.11.31' IDENTIFIED BY 'Mysql.pass.123' WITH GRANT OPTION;

 

5> mysqladmin,无需登录MySQL执行,自动刷新权限列表
语法:mysqladmin -u用户名 -p旧的密码 password 新密码
#该方式为明文传输密码,不安全
[root@localhost ~]# mysqladmin -uroot -p123456 password 1234abcd
mysqladmin: [Warning] Using a password on the command line interface can be insecure.
New password: 
Confirm new password: 
Warning: Since password will be sent to server in plain text, use ssl connection to ensure password safety.

 

标签:权限,解决方案,MySQL,密码,user,mysql,password,root
From: https://www.cnblogs.com/xiaoyaozhe/p/17671328.html

相关文章

  • docker桌面端安装mysql
    参考 https://www.yzktw.com.cn/post/735256.html1,搜索Images,mysql,选择合适的版本pull2,Images,中点击三角箭头,run,会弹出新建Containers弹框Containersname,随便写Ports需要写0Volumes选安装地址EnvironmentVarialbes需要加上密码MYSQL_ROOT_PASSWORD: 123456 3,运行......
  • keepalived实现MySQL MGR高可用(keepalived 2.2.7 + mysql 5.7.35)
    Linux系统-部署-运维系列导航 一、架构介绍MySQLMGR实现了MySQL服务的高可用、高扩展、高可靠,但在客户端只能同时连接一台服务实例,在master切换后,客户端无法感知并自动切换,所以需要搭配keepalived实现MySQLMGR集群在客户端的高可用。 二、架构搭建架构设计MySQLMGR一......
  • Linux 服务器下C++开发找不到mysql.h
    问题背景腾讯云服务器,linuxcentOS7内核,mysql版本5.5为宝塔腾讯云版自动安装C++用cmake编译时找不到mysql.h解决1.首先尝试yum安装mysql-devel包,但是yum让我直接下载了mariadb相关的包,下载时它,与原有包冲突bt-mysql55-5.5.62-1.el7.x86_64,但是删除原有包后mysql启动有问......
  • 浅谈Mysql读写分离的坑以及应对的方案 | 京东云技术团队
    一、主从架构为什么我们要进行读写分离?个人觉得还是业务发展到一定的规模,驱动技术架构的改革,读写分离可以减轻单台服务器的压力,将读请求和写请求分流到不同的服务器,分摊单台服务的负载,提高可用性,提高读请求的性能。上面这个图是一个基础的Mysql的主从架构,1主1备3从。这种架构是客户......
  • 将MySQL分区表转换成普通表
    将MySQL分区表转换成普通表MySQL支持分区表,这种表可以将数据分散到多个存储区中。但是,有时候我们可能需要把分区表转换成普通表,本文将介绍如何完成这个操作。备份数据在进行任何表修改操作前,都需要先进行数据备份。在备份数据之前,需要关闭所有对该表的写入操作。取消分区要将分区表......
  • 发布!用友跨国企业全球税务管理解决方案助力中企全球化
    2023年8月19日在上海国家会展中心,毕马威全球税务合规与转型服务主管合伙人闫晓光、汤森路透大中华区营销负责人吴莉、用友网络高级副总裁杜宇、用友网络德国总经理林楠、用友网络税务云事业部总经理陈飞及企业的高管、技术大咖、专家学者、投资人、媒体等众多商业领袖一起见证......
  • mysql中文全文搜索
    在MySQL5.7.6之前,全文索引只支持英文全文索引,不支持中文全文索引,需要利用分词器把中文段落预处理拆分成单词,然后存入数据库。从MySQL5.7.6开始,MySQL内置了ngram全文解析器,用来支持中文、日文、韩文分词。本文使用的MySQL版本是5.7.22,InnoDB数据库引擎。为什么要用全文索引呢?......
  • 浅谈Mysql读写分离的坑以及应对的方案
    一、主从架构为什么我们要进行读写分离?个人觉得还是业务发展到一定的规模,驱动技术架构的改革,读写分离可以减轻单台服务器的压力,将读请求和写请求分流到不同的服务器,分摊单台服务的负载,提高可用性,提高读请求的性能。上面这个图是一个基础的Mysql的主从架构,1主1备3从。这种架构是......
  • mysql 大表如何ddl
    大家好,我是蓝胖子,mysql对大表(千万级数据)的ddl语句,在生产上执行时一定要千万小心,一不小心就有可能造成业务阻塞,数据库io和cpu飙高的情况。今天我们就来看看如何针对大表执行ddl语句。通过这篇文章,你能了解到下面的知识点,传统ddl和onlineddl的区别mysql的ddl经过了几个版......
  • 一加ace竞速版手机root记录
    root需要的大致步骤是:1解锁bootloader2安装magisk,patchbootimage3安装patch好的rom可以参考https://www.rootmeguide.com/root-oneplus-ace-racing-using-magisk/ 手动会复杂一些 ,所以我使用的网上的一键刷机工具,叫大侠阿木按照提示123操作,下载一个对应版本的rom,刷......