快捷搜索:
来自 网络数据库 2019-08-11 10:24 的文章
当前位置: 67677新澳门手机版 > 网络数据库 > 正文

root密码忘记,root密码忘记后更优雅的解决格局

一如既往,对于MySQL root密码的遗忘,认为唯有一种解法-skip-grant-tables。

前言

问了下群里的大牌,第一影响也是skip-grant-tables。通过寻觅引擎轻松寻找了下,无论是百度,抑或Google,只若是用汉语搜索,首页都以这种解法。可知这种解法在某种程度上一度吞没了使用者的心智。上面具体来看看。

长久以来,对于MySQL root密码的遗忘,以为唯有一种解法-skip-grant-tables。

 

问了下群里的大牌,第一感应也是skip-grant-tables。通过寻觅引擎轻巧搜索了下,无论是百度,抑或Google,只假诺用汉语搜索,首页都以这种解法。可见这种解法在某种程度上业已吞没了使用者的心智。上面具体来拜候。

skip-grant-tables的解法

skip-grant-tables的解法

首先,关闭实例

率先,关闭实例

那边,只可以通过kill mysqld进程的方法。

此间,只可以通过kill mysqld进程的秘诀。

注意:不是mysqld_safe进度,也切忌采纳kill -9。

注意:不是mysqld_safe进度,也切忌选择kill -9。

# ps -ef |grep mysqld
root      6220  6171  0 08:14 pts/0    00:00:00 /bin/sh bin/mysqld_safe --defaults-file=my.cnf
mysql      6347  6220  0 08:14 pts/0    00: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=3307
root      6418  6171  0 08:17 pts/0    00:00:00 grep --color=auto mysqld

# kill 6347
# ps -ef |grep mysqld
root  6220 6171 0 08:14 pts/0 00:00:00 /bin/sh bin/mysqld_safe --defaults-file=my.cnf
mysql  6347 6220 0 08:14 pts/0 00: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=3307
root  6418 6171 0 08:17 pts/0 00:00:00 grep --color=auto mysqld

# kill 6347

 

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

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

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

设置了该参数,则实例在起步进程中会跳过权力表的加载,那就表示任何用户都能登陆进来,并张开任何操作,特出不安全。

安装了该参数,则实例在起步进度中会跳过权力表的加载,那就象征任何用户都能登陆进来,并拓展其余操作,非常不安全。

建议还要加多--skip-networking参数。其会让实例关闭监听端口,自然也就不可能树立TCP连接,而只可以通过地面socket举行连接。

提出还要增添--skip-networking参数。其会让实例关闭监听端口,自然也就不可能树立TCP连接,而不得不通过地点socket举行接二连三。

MySQL8.0正是这么做的,在安装了--skip-grant-tables参数的还要会活动开启--skip-networking。

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

修改密码

 

# mysql -S /usr/local/mysql57/data/mysql.sock

mysql> update mysql.user set authentication_string=password('123456') where host='localhost' and user='root';
Query OK, 0 rows affected, 1 warning (0.00 sec)
Rows matched: 1 Changed: 0 Warnings: 1

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

修改密码

注意:

# mysql -S /usr/local/mysql57/data/mysql.sock

mysql> update mysql.user set authentication_string=password('123456') where host='localhost' and user='root';
Query OK, 0 rows affected, 1 warning (0.00 sec)
Rows matched: 1  Changed: 0  Warnings: 1

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

那边的update语句针对的是MySQL 5.7的操作,即使是在5.6本子,修改的相应是password字段,并不是authentication_string。

 

update mysql.user set password=password('123456') where host='localhost' and user='root';

注意:

而在MySQL 8.0.11版本中,这种办法为主不可行,因为其已移除了PASSWORD()函数及不再帮忙SET PASSWORD ... = PASSWORD ('auth_string')语法。

此间的update语句针对的是MySQL 5.7的操作,倘若是在5.6本子,修改的应当是password字段,并不是authentication_string。

不费吹灰之力开采,这种方法的可移植性实在太差,三个例外的本子,就先后经历了列名的退换,及命令的不可用。

update mysql.user set password=password('123456') where host='localhost' and user='root';

上边,介绍别的一种更通用的做法,依然在skip-grant-tables的功底上。

 

与地方差异的是,其会先经过flush privileges操作触发权限表的加载,再利用alter user语句修改root用户的密码,如:

而在MySQL 8.0.11本子中,这种格局基本不可行,因为其已移除了PASSWO本田CR-VD()函数及不再援救SET PASSWO汉兰达D ... = PASSWO奔驰M级D ('auth_string')语法。

# bin/mysql -S /usr/local/mysql57/data/mysql.sock

mysql> alter user 'root'@'localhost' identified by '123';
ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> alter user 'root'@'localhost' identified by '123';
Query OK, 0 rows affected (0.00 sec)

轻松察觉,这种措施的可移植性实在太差,八个不等的版本,就先后经历了列名的转移,及命令的不可用。

免密码登陆进来后,直接实践alter user操作是十一分的,因为那时的权位表还没加载。可先通过flush privileges操作触发权限表的加载,再实行alter user操作。

 

亟需专注的是,通过alter user修改密码只适用于MySQL5.7和8.0,假诺是MySQL 5.6,此处可写成

上边,介绍另外一种更通用的做法,依旧在skip-grant-tables的基本功上。

update mysql.user set password=password('123456') where host='localhost' and user='root';

与地点差异的是,其会先经过flush privileges操作触发权限表的加载,再利用alter user语句修改root用户的密码,如:

终极重启实例

# bin/mysql -S /usr/local/mysql57/data/mysql.sock

mysql> alter user 'root'@'localhost' identified by '123';
ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> alter user 'root'@'localhost' identified by '123';
Query OK, 0 rows affected (0.00 sec)
mysql> shutdown;

# bin/mysqld_safe --defaults-file=my.cnf &

本文由67677新澳门手机版发布于网络数据库,转载请注明出处:root密码忘记,root密码忘记后更优雅的解决格局

关键词: