很久没有玩数据库,果然又忘了mysql的root密码,一顿操作重置,啪啪啪一堆报错,记录一下。说明: mysql密码重置其实是修改数据库mysql下的user表中密码字段。
但是没有密码连接都连不上咋个整
一、启动安全+免验证模式
①关闭服务:
sudo service mysql stop
②安全模式+免验证启动服务
sudo /usr/bin/mysqld_safe --skip-grant-tables
如果顺利启动成功,那么可以调到第二步了。
当然我并不顺利,在这里遇到了报错:
mysqld_safe Directory '/var/run/mysqld' for UNIX socket file don't exists.
“/var/run/mysqld” 这个目录不存在?这个目录是干什么的?具体不详知,只知道在程序启动中会向这个目录读写一些东西。
解决方法:创建目录并修改权限。
sudo mkdir /var/run/mysqld sudo chmod 777 /var/run/mysqld
再执行②启动mysql,启动成功~
二、连接服务器,修改密码
第一步执行成功后,就可以免验证连接服务器了。
①新开一个终端,连接服务器:
mysql -u root
用show databases; 查看数据库,发现服务器中会有好几个数据库:
在开头说过mysql的密码其实是保存在名为“mysql”的数据库中,所以切换到mysql数据库。
②切换到mysql数据库:
use mysql;
③修改密码
这里要根据版本来执行不同的SQL语句了,因为版本不同,存储密码的字段可能不相同。5.7以前的版本可以用以下语句更新root密码:
update user set password = password('123456') where user='root';
如果顺利的话,root的密码应该已经被修改为“123456”,那可以不必往下看了。
然而我的mysql版本是5.7.21,所以第一次尝试的时候这里又报错了:
ERROR 1054 (42S22): Unknown column 'password' in 'field list'
表中没有password字段,可以用desc user;指令看一下果然没有。
查资料发得知5.7版本密码保存字段已经改成上图中的“authentication_string”了,于是重新输入update指令重置密码:
update user set authentication_string = password('123456') where user='root';
修改成功!
三、重启mysql服务并连接
先杀死第一步中启动的进程,命令行Ctrl + Z 并不能杀死进程。
先查看进程:
ps -a | grep mysql
使用kill -9 pid 杀死进程,然后启动mysql服务即可。
sudo service mysql restart mysql -u root -p
结束。