重置Mysql密码(原理+Centos上的具体操作)

本文详细介绍了一种绕过MySQL数据库密码验证的方法,并演示了如何修改root用户的密码。此外,还提供了MySQL 5.7版本特定的操作步骤及远程登录设置的相关链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原理:绕过数据库密码验证,将user表中存储的密码更改。


1.修改MySQL的登录设置(设为无需密码)

# vim /etc/my.cnf

[mysqld]的段中加上一句:skip-grant-tables
例如:

[mysqld] 
datadir=/var/lib/mysql 
socket=/var/lib/mysql/mysql.sock 
skip-grant-tables 

保存并且退出vi。

2.重新启动mysqld

/etc$ service mysqld restart
Stopping mysqld:  [  OK  ]
Starting mysqld:  [  OK  ]

3.登录并修改MySQL的root密码

  • 无密码登陆mysql命令
[root@VM_25_98_centos ~]# mysql -uroot -p
  • 无需输入密码进入mysql
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.6.25 MySQL Community Server (GPL)

Copyright (c) 2000, 2015, 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数据库
mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
  • 修改root密码为123456
mysql> UPDATE user SET Password = password ( '123456' ) WHERE User = 'root' ;
Query OK, 4 rows affected (0.00 sec)
Rows matched: 4  Changed: 4  Warnings: 0

上面的情况失败时用下面这种情况(mysql 5.7密码加*)

mysql> update user set authentication_string=password('root*') where user='root' and Host='localhost';
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)
  • 退出
mysql> exit;
Bye

4.删除skip-grant-tables

# vim /etc/my.cnf 

将刚才在[mysqld]的段中加上的skip-grant-tables删除
保存并且退出vim

5.重启mysql

# service mysqld restart 
Stopping MySQL: [ OK ] 
Starting MySQL: [ OK ]

mysql5.7 经常修改后提示错误,执行下面这句将密码重置就好了。

 SET PASSWORD FOR 'root'@'localhost' = PASSWORD('liuy2988*');

mysql5.7 远程登录设置:
https://blog.youkuaiyun.com/liyf155/article/details/61420245

### 如何在 CentOS 7 上重置 MySQL 根用户密码 #### 停止 MySQL 服务 为了安全地更改 `root` 用户的密码,首先需要停止正在运行的 MySQL 服务。这可以通过执行以下命令来完成: ```bash sudo systemctl stop mysqld.service ``` #### 修改配置文件并启动 MySQL 编辑 `/etc/my.cnf` 文件,在 `[mysqld]` 部分添加 `skip-grant-tables` 参数以便绕过权限表验证[^1]。 保存修改后的配置文件,并重新启动 MySQL 服务使设置生效: ```bash sudo systemctl start mysqld.service ``` 此时可以无需提供任何凭证就能访问数据库管理系统。 #### 登录到 MySQL 并更新根用户的认证字符串 打开终端窗口并通过下面这条指令连接至服务器而不需要输入原始密码[^2]: ```bash sudo /usr/local/mysql/bin/mysql -u root ``` 成功进入 SQL 提示符之后,切换到名为 `mysql` 的内置模式下操作: ```sql USE mysql; ``` 对于不同版本号之间存在差异的情况需要注意语法区别。如果安装的是较新的 MySQL 版本,则应采用如下方式清除现有哈希值从而允许后续设定新密钥[^3]: ```sql UPDATE user SET authentication_string=PASSWORD('NewPasswordHere') WHERE User='root'; FLUSH PRIVILEGES; ``` 请注意替换 `'NewPasswordHere'` 成实际想要使用的强健字符组合作为最终的安全措施的一部分。 而对于某些特定版次如 MySQL 5.x 或更早些时候发布的实例来说,可能要利用不同的方法去改变存储于字段中的加密形式的数据[^5]: ```sql SET PASSWORD FOR 'root'@'localhost' = PASSWORD('AnotherSecurePassphrase'); ``` 这里同样记得把占位符换成自定义的选择项。 #### 完成变更与清理工作 一旦完成了上述所有步骤,就应当移除之前临时加入到配置里的那行代码(`skip-grant-tables`)以恢复正常运作状态[^4]。接着再次重启 MySQL 来应用最新的改动: ```bash sudo vi /etc/my.cnf # 移除 skip-grant-tables 行 sudo systemctl restart mysqld.service ``` 现在应该能够使用刚刚指定的新凭据正常登录了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值