与其说是mysql密码破解倒不如说是mysql密码重置更准确,因为大多数情况下我们只是忘了登录的密码,如果是普通用户还可以让管理员重新设置一下密码或者重新分配一个用户,但是这里我们不考虑普通用户,如果是管理员密码忘了怎么办?找回是不可能了,虽然mysql中user表中记录了每个用户的信息,但是普通用户一般也没有权限操作,而且其中密码是通过单向加密生成。所以对于管理员密码遗忘,最简单的方法就是重置了。
这里分两种情况分析linux下和windows下
linux操作系统下:
mysql版本5.5
1.修改MySQL配置文件
vim /etc/my.cnf
找到和mysql服务器配置相关部分[mysqld],在最后加上skip-grant-tables,如下所示
socket = /tmp/mysql.sock
myisam_sort_buffer_size = 8M
skip-grant-tables //设置mysql服务器启动跳过权限表
保存并退出
2.重新启动mysql服务器
./usr/local/mysql/bin/mysqld_safe
注意这个时候mysql中的权限表已经失去作用了,为防止来自外部的攻击,最好断网操作。
3.登录并修改管理员root用户的密码
重新打开一个终端,如果上一个步骤是放到后台执行,也可以在同一个终端下执行
./usr/local/mysql/bin/mysql 如下所示
[[email protected] bin]# ./mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.5.23-log Source distribution
Copyright (c) 2000, 2011, 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 databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
这个时候就可以不需要输入管理员root的密码
选择mysql库
mysql> use mysql;
修改root密码
mysql> update user set password=password(‘123456‘) where user=‘root‘ and host=‘127.0.0.1‘;
Query OK, 1 row affected (0.11 sec)
Rows matched: 1 Changed: 1 Warnings: 0
刷新权限列表,让服务器下次启动能够生效
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
4.修改mysql配置文件
vim /etc/my.cnf
将步骤一中在[mysqld]的段中加上的skip-grant-tables删除 ,
保存并且退出vi。
5.重新启动mysql服务器即可
./usr/local/mysql/bin/mysqld_safe
这时候使用刚才重置的密码即可登录mysql
windows环境下
1.打开DOS切换到mysql安装目录的bin文件夹下
2.输入mysqld --skip-grant-table 回车
注意不要退出
3.再打开一个DOS窗口切换到mysql安装的目录的bin文件夹下
4.输入mysql 回车
5.选择mysql库,use mysql
6.重新设置root密码
update user set password=password(‘newpassword‘) where user=‘root‘
7.刷新权限表
flush privileges
8.退出两个终端,重新登录即可