最近在修复mysql中密码过期的问题,过程比较波折啊。所以总结一下,帮助自己以后好直接使用。
进入mysql,而忽略密码登录,其实非常简单。只需要一条简单的命令就好,该命令为:mysqld_safe --skip-grant-tables &或/usr/bin/mysqld_safe --skip-grant-tables &
另一种方法为修改配置文件,在my.cnf中[mysqld]模块下添加skip-grant-tables
例如
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
skip-grant-tables
重启mysql服务,即可直接进入,无须密码.
通过使用该命令之后,我们可以直接进入mysql而不需要密码,当在需要输入密码的时候,可以直接跳过就好。
但是在使用这中情况的时候,很有可能会发生一个问题,就是受到目前系统中存在的mysql线程影响,导致提示ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’ (111)。
这种时候需要我们将计算机中存在的mysql的进程,全部杀死。然后再次执行mysqld_safe --skip-grant-tables &命令。
杀死进程需要查看进程,查看进程的命令为:ps -ef |grep 进程名
在杀死进程的时候,很有可能因为是父级与子级的关系导致进程无法被杀死。
所以这个时候需要查看父级进程的pid,然后把它杀死。
查看父级进程的命令为: ps -A|grep -i 进程名
然后根据pid将进程杀死,命令为:kill -9 pid号
所以杀死进程之后,通过mysqld_safe --skip-grant-tables &命令启动服务之后,直接通过mysql命令登录。然后就可以修改密码了,修改密码的步奏如下:
新版本
use mysql;
update user set authentication_string=PASSWORD(‘12345678’) where user=”root”; //将root密码设置为12345678
flush privileges;
quit老版本
use mysql;
update user set password=PASSWORD(‘12345678’) where user=”root”; //将root密码设置为12345678
flush privileges;
quit
是老版本还是新版本,自己根据mysql数据库中的user表的列情况判断,查看表具有的列命令为:show columns from user;
至此,密码修改完成,就可以停止mysqld_safe –skip-grant-tables &命令。因为我不知道该如何停止,所以我会直接把这个进程杀死。然后通过service mysql start启动mysql服务,用新的密码登录 mysql -uroot -p 新的密码
至此,一切结束。