zoukankan      html  css  js  c++  java
  • MySQL密码忘记,怎么办?

    如果哪天你忘记了线上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之后,就可以直接登录了。

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

    参考

    https://www.percona.com/blog/2014/12/10/reset-mysql-root-password-without-restarting-mysql-no-downtime/

  • 相关阅读:
    Day17_购物车
    Kali小技巧
    sqlserver误删数据库表恢复记录
    JS轮流播放视频和图片
    .net core使用ocelot---第八篇 Consul
    .net core使用ocelot---第七篇 服务发现
    .net core使用ocelot---第六篇 负载均衡
    .net core使用ocelot---第五篇 服务质量
    .net core使用ocelot---第四篇 限流熔断
    .net core使用ocelot---第三篇 日志记录
  • 原文地址:https://www.cnblogs.com/ivictor/p/5408715.html
Copyright © 2011-2022 走看看