• MySQL忘记root用户密码


    忘记root密码

    一、init-file方式(推荐的方式)
    修改my.cnf,添加参数
    [mysqld]
    init-file=/tmp/init.sql


    创建init.sql,并编辑
    可以直接将修改密码的SQL重定向到init.sql文件中
    echo "alter user root@localhost identified by '123456';" > /tmp/init.sql
    echo "alter user root@'%' identified by '123456';" >> /tmp/init.sql


    停止MySQL
    由于没有root用户密码,无法使用mysqladmin shutdown之类的命令进行关闭实例的操作,如果配置过service或systemd,可以使用系统命令将实例正常关闭:
    service mysqld stop
    systemctl stop mysqld

    如果没有配置过service和systemd,则只能通过kill mysqld进程的方式关闭实例(注意:不能用kill -9):
    kill <pid of mysqld>


    重启MySQL

    mysqld_safe --defaults-file=/etc/my.cnf --user=mysql &

    ##如果配置了service或systemctl,优先使用以下命令启动:
    service mysqld restart
    或systemctl restart mysqld


    删除init.sql,注释参数
    init.sql中有root密码,在修改密码后一定要记得删除文件:
    rm -f /tmp/init.sql

    也别忘了注释参数:
    [mysqld]
    # init-file=/tmp/init.sql


    二、skip-grant-table方式
    停止MySQL
    由于没有root用户密码,无法使用mysqladmin shutdown之类的命令进行关闭实例的操作,如果配置过service或systemd,可以使用系统命令将实例正常关闭:
    service mysqld stop
    systemctl stop mysqld

    如果没有配置过service和systemd,则只能通过kill mysqld进程的方式关闭实例(注意:不能用kill -9):
    kill <pid of mysqld>

    修改my.cnf,添加参数
    添加以下参数到配置文件:
    [mysqld]
    skip-grant-tables
    skip-networking // 虽然不是强制要求,但是为了防止期间实例被免密远程访问,建议与skip-grant-tables同时配置

    启动MySQL
    mysqld --defaults-file=/etc/my.cnf &

    ##如果配置了service或systemctl,优先使用以下命令启动:
    service mysqld start或systemctl start mysqld

    登录MySQL修改密码
    mysql -S /var/lib/mysql/mysql.sock -p
    Enter password:(此处直接回车即可,即使用任意密码都可以登陆)
    mysql> flush privileges;
    mysql> alter user root@'localhost' identified by '123456';
    mysql> alter user root@'%' identified by '123456';

    注意:修改密码不建议使用其他不通用的方式,比如update mysql.user set password=password() where user=root.一是不规范,二是password字段名随版本变化,三是password()函数在MySQL8.0废弃了。


    注释参数,重启MySQL
    注释参数:
    [mysqld]
    # skip-grant-tables
    # skip-networking

    重启MySQL:
    mysqladmin shutdown -S /data/mysql/data/3306/mysqld.sock -p
    Enter password:(此处输入修改的新密码)
    mysqld --defaults-file=/date/msyql/etc/3306/my.cnf &


    ##如果配置了service或systemctl,优先使用以下命令启动:
    service mysqld restart
    或systemctl restart mysqld


    三、MySQL忘记root密码不重启mysqld的方法

    此方法仅针对 5.6 和 5.7 mysql.user 表是MyISAM存储引擎,对于InnoDB存储引擎未测试过,或许不可行。

    1、首先得有一个可以拥有修改权限的mysql数据库账号,当前的mysql实例账号(较低权限的账号,比如可以修改 scott 数据库)或者其他相同版本实例的账号。把 data/mysql 目录下面的user表相关的文件复制到 data/scott 目录下面。

    [root@restoredb mysql]# cp mysql/user.* scott/
    [root@restoredb mysql]# chown mysql.mysql scott/user.*

    2、使用另一个较低权限的账号链接数据库,设置 scott 数据库中的 user 存储的密码数据。


    [root@restoredb mysql]# mysql -utest_user -p123456 -h127.0.0.1 -A

    mysql> use scott;

    mysql> update user set authentication_string=password('123456') where user='root';


    3、把修改后的user.MYD和user.MYI复制到mysql目录下,记得备份之前的文件。

    mv mysql/user.MYD mysql/user.MYD.bak
    mv mysql/user.MYI mysql/user.MYI.bak
    mv mysql/user.frm mysql/user.frm.bak

    cp scott/user.* mysql/
    chown mysql.mysql mysql/user.*

    4、kill -SIGHUP

    [root@testdb62 mysql]# pgrep -n mysql
    28878

    [root@restoredb mysql]#
    [root@restoredb mysql]# kill -SIGHUP 28878

    5、测试
    [root@restoredb mysql]# mysql -uroot -p123456 -h127.0.0.1 -A

  • 相关阅读:
    Java程序设计之算出一年第多少天
    Java程序设计之打印100~999的水仙花数
    AJAX提交方法(POST)Demon
    AJAX提交方法(GET)Demon
    java程序设计线程池(newCachedThreadPool())
    java线程池(newSingleThreadExecutor())小应用
    Java程序设计之线程池应用
    java程序设计之反弹高度
    java程序设计之完数
    iOS UIView 基本属性用法
  • 原文地址:https://www.cnblogs.com/l10n/p/9400206.html
Copyright © 2020-2023  润新知