小编给大家分享一下忘了mysql的密码如何解决,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!

skip-grant-tables的解法

首先,关闭实例

这里,只能通过kill mysqld进程的方式。

注意:不是mysqld_safe进程,也切忌使用kill -9。

#ps-ef|grepmysqldroot62206171008:14pts/000:00:00/bin/shbin/mysqld_safe--defaults-file=my.cnfmysql63476220008:14pts/000:00:01/usr/local/mysql57/bin/mysqld--defaults-file=my.cnf--basedir=/usr/local/mysql57--datadir=/usr/local/mysql57/data--plugin-dir=/usr/local/mysql57/lib/plugin--user=mysql--log-error=slowtech.err--pid-file=slowtech.pid--socket=/usr/local/mysql57/data/mysql.sock--port=3307root64186171008:17pts/000:00:00grep--color=automysqld#kill6347

推荐:MySQL教程

使用--skip-grant-tables参数,重启实例

#bin/mysqld_safe--defaults-file=my.cnf--skip-grant-tables--skip-networking&

设置了该参数,则实例在启动过程中会跳过权限表的加载,这就意味着任何用户都能登录进来,并进行任何操作,相当不安全。

建议同时添加--skip-networking参数。其会让实例关闭监听端口,自然也就无法建立TCP连接,而只能通过本地socket进行连接。

MySQL8.0就是这么做的,在设置了--skip-grant-tables参数的同时会自动开启--skip-networking。

修改密码

#mysql-S/usr/local/mysql57/data/mysql.sockmysql>updatemysql.usersetauthentication_string=password('123456')wherehost='localhost'anduser='root';QueryOK,0rowsaffected,1warning(0.00sec)Rowsmatched:1Changed:0Warnings:1mysql>flushprivileges;QueryOK,0rowsaffected(0.00sec)

注意:

这里的update语句针对的是MySQL 5.7的操作,如果是在5.6版本,修改的应该是password字段,而不是authentication_string。

updatemysql.usersetpassword=password('123456')wherehost='localhost'anduser='root';

而在MySQL 8.0.11版本中,这种方式基本不可行,因为其已移除了PASSWORD()函数及不再支持SET PASSWORD ... = PASSWORD ('auth_string')语法。

不难发现,这种方式的可移植性实在太差,三个不同的版本,就先后经历了列名的改变,及命令的不可用。

看完了这篇文章,相信你对忘了mysql的密码如何解决有了一定的了解,想了解更多相关知识,欢迎关注亿速云行业资讯频道,感谢各位的阅读!