阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

MySQL密码忘记 root 怎么办?

215次阅读
没有评论

共计 2221 个字符,预计需要花费 6 分钟才能阅读完成。

如果哪天你忘记了线上 MySQL 数据库的 root 密码,怎么办? 大家往往会想到 skip-grant-tables 参数,具体步骤如下:

1. 关闭 MySQL 数据库,因为 root 密码忘记了,mysqladmin 无法使用,此时,只能通过 kill pid 关闭程序。

在这里,科普一下 kill 和 kill - 9 的区别

默认参数下,kill 发送 SIGTERM 信号给进程,告诉进程,你需要被关闭,请自行停止运行并退出。kill -9 发送 SIGKILL 信号给进程,告诉进程,你被终结了,请立刻退出。与 SIGTERM 相比,这个信号不能被捕获或忽略,同时接收这个信号的进程在收到这个信号时不能执行任何清理

所以,万不得已,不要通过 kill - 9 杀掉进程,这可能导致 MySQL 数据库的物理结构损坏,无法重新启动。

2. 在 my.cnf 文件 [mysqld] 部分添加 skip-grant-tables 参数

3. 登录数据库,修改 root 账户的密码

以下是修改 root 密码的三种方式:

    1> mysql> set password for ‘root’@’localhost’=password(‘123’); 无需刷新权限表

    2> mysql> update mysql.user set password=password(“456″) where user=”root” and host=”localhost”;

         mysql> flush privileges;

    3> # mysqladmin -u root password “123”

4. 关闭数据库,注释掉 skip-grant-tables 参数,重新启动数据库。

上面这种方式虽然不错,但是有个问题,你必须重启数据库,对于线上环境,这可能是不被允许的。

下面来谈谈另一种方法,有点“黑暗科技”的味道

这个方法利用的是 mysql.user 表还是 MyISAM 引擎的特性。

1. 将该实例的 mysql.user 表 copy 到另一个实例的目录下,譬如,test 数据库的目录下

MySQL 密码忘记 root 怎么办?

2. 登录另一个实例数据库,修改上述三个文件的权限,并修改 root 密码

mysql> select user,host,password from test.user;
+------+-----------+-------------------------------------------+
| user | host      | password                                  |
+------+-----------+-------------------------------------------+
| root | localhost | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
+------+-----------+-------------------------------------------+
1 row in set (0.00 sec)

mysql> update test.user set password=password("hello") where user="root" and host="localhost";
Query OK, 1 row affected (0.15 sec)
Rows matched: 1  Changed: 1  Warnings: 0

3. 将上述三个文件 copy 回源数据库

MySQL 密码忘记 root 怎么办?

4. 获取 mysqld 的 pid,通过 kill -HUP `pidof mysqld` 方式让 mysqld 进程重新加载配置文件

MySQL 密码忘记 root 怎么办?

[root@keepalived01 ~]# mysql -phello
Warning: Using a password on the command line interface can be insecure.
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
[root@keepalived01 ~]# kill -HUP 4283
[root@keepalived01 ~]# mysql -phello
Warning: Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2528
Server version: 5.6.26 MySQL Community Server (GPL)

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

通过上述输出可以看出,kill -HUP 之前,直接用密码 hello 登录被拒绝,kill -HUP 之后,就可以直接登录了。

当然,以上方法仅供参考,在生产上慎用,毕竟安全压倒一切,天晓得哪里会出现问题。

本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-04/130431.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计2221字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中