linux下mysql-5.6忘记root密码,重置root密码详细过程

在linux平台下使用mysql过程中忘记了root密码,对于运维和DBA来讲都是一件头疼的事情,下面来讲解下怎么进行重置mysql数据库root 密码:

1、首先停止mysql服务进程:

1 service mysqld stop

然后编辑mysql的配置文件my.cnf

1 vim /etc/my.cnf

找到 [mysqld]这个模块:

在最后面添加一段代码

1 skip-grant-tables   ##忽略mysql权限问题,直接登录

然后保存 :wq!退出

启动mysql服务:

1 service mysqld start

直接进入mysql数据库:

 1 Starting MySQL. SUCCESS! 
 2 [root@web1 ~]# mysql
 3 Welcome to the MySQL monitor.  Commands end with ; or \g.
 4 Your MySQL connection id is 1
 5 Server version: 5.6.34 Source distribution
 6 
 7 Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
 8 
 9 Oracle is a registered trademark of Oracle Corporation and/or its
10 affiliates. Other names may be trademarks of their respective
11 owners.
12 
13 Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
14 
15 mysql>

使用mysql表,然后进行修改mysql的root密码:


 1 mysql> use mysql; ##使用mysql数据库
 2 Reading table information for completion of table and column names
 3 You can turn off this feature to get a quicker startup with -A
 4 
 5 Database changed
 6 mysql> update user set password=password("123456") where user="root";##更新密码
 7 Query OK, 4 rows affected (0.00 sec)
 8 Rows matched: 4  Changed: 4  Warnings: 0
 9 
10 mysql> flush privileges;##刷新权限
11 Query OK, 0 rows affected (0.00 sec)

 

 1 [root@web1 ~]# ps -ef |grep mysql  ##显示mysql现有的进程
 2 root      56407      1  0 17:50 pts/0    00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/data/mysql --pid-file=/data/mysql/web1.pid
 3 mysql     56533  56407  0 17:50 pts/0    00:00:00 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysql --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/data/mysql/web1.err --pid-file=/data/mysql/web1.pid
 4 root      56560   1737  0 17:55 pts/0    00:00:00 grep mysql
 5 [root@web1 ~]# killall mysqld  ##删除mysql现有进程
 6 [root@web1 ~]# ps -ef |grep mysql
 7 root      56566   1737  0 17:56 pts/0    00:00:00 grep mysql
 8 [root@web1 ~]# service mysqld start ##重新启动mysql服务
 9 Starting MySQL. SUCCESS! 
10 [root@web1 ~]# mysql -uroot -p ##使用新密码登录
11 Enter password: 
12 Welcome to the MySQL monitor.  Commands end with ; or \g.
13 Your MySQL connection id is 1
14 Server version: 5.6.34 Source distribution
15 
16 Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
17 
18 Oracle is a registered trademark of Oracle Corporation and/or its
19 affiliates. Other names may be trademarks of their respective
20 owners.
21 
22 Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
23 
24 mysql>

 

注意:先把mysql服务进程关闭,把添加过的跳过验证信息删除,要不然对数据库安全威胁太大,

 


前段时间安装mysql5.6后,习惯性的无密码登录,但是提示要输入密码
# mysql -u root -p
Enter password:
ERROR 1045 (28000): Access denied for user ‘root’@’localhost’ (using password: NO)
好吧,那我就安全模式登入,也就是常说的绕过密码验证
# /etc/init.d/mysql stop
# mysqld_safe –user=mysql –skip-grant-tables
# mysql -u root mysql
mysql> SET Password=PASSWORD(‘newpassword’)
mysql> FLUSH PRIVILEGES;

这样就可以了, 但是为什么和我之前安装的5.1 不一样呢,原来从MySQL5.6.8开始,MySQL RPM安装包用了更安全的安装方式,再不是以前的密码为空了,mysql会给root账号随机分配一个密码,安装MySQL后,root的这个随机密码会写在文件:.mysql_secret中,但这个密码不能做任何事情,只能登录。

然后必须更改密码才能正常使用,如:
mysql> set password =password(‘123456’);
刷新权限
mysql> flush privileges;
root账号就正常使用了。

如果感兴趣,可以查看官方的解释:
http://dev.mysql.com/doc/refman/5.6/en/linux-installation-rpm.html