发布网友 发布时间:2022-02-26 11:26
共1个回答
热心网友 时间:2022-02-26 12:56
如果哪天你忘记了线上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数据库的目录下
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回源数据库
4.
获取mysqld的pid,通过kill
-HUP
`pidof
mysqld`方式让mysqld进程重新加载配置文件
[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之后,就可以直接登录了。
当然,以上方法仅供参考,在生产上慎用,毕竟安全压倒一切,天晓得哪里会出现问题。
以上就是本文的全部内容,希望可以帮助大家解决root密码忘记的困扰,谢谢大家的阅读。