您的位置:新葡亰496net > 网络数据库 > 原来还有更优雅的解法,讲解几种破解MySQL数据库

原来还有更优雅的解法,讲解几种破解MySQL数据库

发布时间:2019-09-15 20:18编辑:网络数据库浏览(130)

    一直以来,对于MySQL root密码的忘记,以为只有一种解法-skip-grant-tables。

    前言

    MySql数据库root密码修改,mysqlroot密码修改

    方法一:
    在my.ini的[mysqld]字段加入:
    skip-grant-tables
    重启mysql服务,这时的mysql不需要密码即可登录数据库
    然后进入mysql
    mysql>use mysql;
    mysql>更新 user set password=password('新密码') WHERE User='root';
    mysql>flush privileges;
    运行之后最后去掉my.ini中的skip-grant-tables,重启mysqld即可。  

    方法二:
    不使用修改my.ini重启服务的方法,通过非服务方式加skip-grant-tables运行mysql来修改mysql密码
    停止mysql服务
    打开命令行窗口,在bin目录下使用mysqld-nt.exe启动,即在命令行窗口执行: mysqld-nt --skip-grant-

    tables
    然后另外打开一个命令行窗口,登录mysql,此时无需输入mysql密码即可进入。
    按以上方法修改好密码后,关闭命令行运行mysql的那个窗口,此时即关闭了mysql,如果发现mysql仍在运行

    的话可以结束掉对应进程来关闭。
    启动mysql服务

    一、一般忘记密码的解决办法,需要重启Mysql
    1、skip-grant-tables 我们常用的方法是使用skip-grant-tables选项,mysqld server启动之后并不使用权限系统(privilege system)。用户不需要任何账号、不受任何限制的访问数据库中所有数据。为了安全起见,通常加上 skip-networking ,mysqld不侦听任何TCP/IP连接请求。操作过程如下,
    1)修改my.cnf配置文件,在mysqld选项中添加skip-grant-tables和skip-networking。
    2)再重启mysqld server。
    3)通过sql语句修改mysql.user表中存储密码。执行flush privileges,重新启用mysql权限系统。

    问了下群里的大咖,第一反应也是skip-grant-tables。通过搜索引擎简单搜索了下,无论是百度,抑或Google,只要是用中文搜索,首页都是这种解法。可见这种解法在某种程度上已经占据了使用者的心智。下面具体来看看。

    一直以来,对于MySQL root密码的忘记,以为只有一种解法-skip-grant-tables。

    对于mysql怎更改root密码

    第一步:登陆MYSQL
    mysql -u root -p
    然后回车,进入(等于用空密码进入)
    第二步:
    use mysql;
    update user set password=password('新密码') where user='root';
    这步就更新了密码
    第三步:
    flush privileges;
    刷新权限.

    OK了,改好了  

    复制代码 代码如下:

    几种破解mysql root密码的几种方法:

     

    问了下群里的大咖,第一反应也是skip-grant-tables。通过搜索引擎简单搜索了下,无论是百度,抑或Google,只要是用中文搜索,首页都是这种解法。可见这种解法在某种程度上已经占据了使用者的心智。下面具体来看看。

    如果把MySql的root密码忘记了怎办?怎取回密码?怎去更改root的密码?感谢

    如果是root密码:

    方法一:
    MySQL提供跳过访问控制的命令行参数,通过在命令行以此命令启动MySQL服务器:
    safe_mysqld --skip-grant-tables&
    即可跳过MySQL的访问控制,任何人都可以在控制台以管理员的身份进入MySQL数据库。
    需要注意的是在修改完密码以后要把MySQL服务器停掉重新启动才会生效
    先找到mysql.server 然后停止mysql服务
    # mysqld_safe --skip-grant-tables --skip-networking &
    # mysql
    >use mysql;
    >update user set password=PASSWORD("new-password") where user="root";
    >flush privileges;

    方法二:
    可以进行如下的步骤重新设置MySQL的root密码:
    1.首先确认服务器出于安全的状态,也就是没有人能够任意地连接MySQL数据库。
    因为在重新设置MySQL的root密码的期间,MySQL数据库完全出于没有密码保护的
    状态下,其他的用户也可以任意地登录和修改MySQL的信息。可以采用将MySQL对
    外的端口封闭,并且停止Apache以及所有的用户进程的方法实现服务器的准安全
    状态。最安全的状态是到服务器的Console上面操作,并且拔掉网线。
    2.修改MySQL的登录设置:
    # vi /etc/my.cnf
    在[mysqld]的段中加上一句:skip-grant-tables
    例如:
    [mysqld]
    datadir=/var/lib/mysql
    socket=/var/lib/mysql/mysql.sock
    skip-name-resolve
    skip-grant-tables
    保存并且退出vi。
    3.重新启动mysqld
    # /etc/init.d/mysqld restart
    Stopping MySQL: [原来还有更优雅的解法,讲解几种破解MySQL数据库root密码的方法。 OK ]
    Starting MySQL: [ OK ]
    4.登录并修改MySQL的root密码
    # /usr/bin/mysql
    Welcome to the MySQL monitor. Commands end with ; or g.
    Your MySQL connection id is 3 to server version: 3.23.56
    Type ‘help;’ or ‘h’ for help. Type ‘c’ to clear the buffer.
    mysql> USE mysql ;
    Reading table information for completion of table and column names
    You can turn off this feature to get a quicker startup with -A
    Database changed
    mysql> UPDATE user SET Password = password ( ‘new-password’ ) WHERE User = ‘root’ ;
    Query OK, 0 rows affected (0.00 sec)
    Rows matched: 2 Changed: 0 Wa......余下全文>>  

    方法一: 在my.ini的[mysqld]字段加入: skip-grant-tables 重启mysql服务,这时的mysql不需要密码即可登录数...

    UPDATE mysql.USER SET Password=PASSWORD('newpwd')WHERE User='root';
    FLUSH PRIVILEGES;

    方法一

    skip-grant-tables的解法

    skip-grant-tables的解法

    4)删除或者注释配置文件中skip-grant-tables和skip-networking的参数选项。如果使用skip-networking,则需要再次重启mysqld。因为skip-networking不是系统变量,只是mysqld的参数选项,而不能通过系统变量动态进行设置。如果没有适用skip-networking,只需要执行flush privileges就可以使权限系统重新生效。
    2. --init-file
    mysqld_safe可以使–init-file参数选项来执行重新设定密码的sql语句。
    1)新建一个初始化文件,如/tmp/initfile,文件内容为上面修改密码的sql语句。

    使用phpmyadmin,这是最简单的了,修改mysql库的user表,不过别忘了使用PASSWORD函数。

    首先,关闭实例

    首先,关闭实例

    复制代码 代码如下:

    方法二

    这里,只能通过kill mysqld进程的方式。

    这里,只能通过kill mysqld进程的方式。

    UPDATE mysql.user SET Password=PASSWORD('newpwd') WHERE User='root';
    FLUSH PRIVILEGES;

    使用mysqladmin,这是前面声明的一个特例。

    注意:不是mysqld_safe进程,也切忌使用kill -9。

    注意:不是mysqld_safe进程,也切忌使用kill -9。

    2)关闭mysqld服务进程。
    原来还有更优雅的解法,讲解几种破解MySQL数据库root密码的方法。3)使用mysqld_safe启动mysqld;

    mysqladmin -u root -p password mypasswd

    # 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
    

    复制代码 代码如下:

    输入这个命令后,需要输入root的原密码,然后root的密码将改为mypasswd。

     

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

    mysqld_safe --init-file=/home/me/mysql-init &

    把命令里的root改为你的用户名,你就可以改你自己的密码了。

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

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

    上面的两种方法是在忘记root密码情况下重新设置密码的方法,可以发现都需要重启mysqld服务。很多人都是使用第一种进行重置root密码,但是比较推荐的做法反而是第二种,即安全有快捷简单。

    当然如果你的mysqladmin连接不上mysql server,或者你没有办法执行mysqladmin,那么这种方法就是无效的,而且mysqladmin无法把密码清空。

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

    设置了该参数,则实例在启动过程中会跳过权限表的加载,这就意味着任何用户都能登录进来,并进行任何操作,相当不安全。

    二、不重启mysqld的方法

    下面的方法都在mysql提示符下使用,且必须有mysql的root权限:

    设置了该参数,则实例在启动过程中会跳过权限表的加载,这就意味着任何用户都能登录进来,并进行任何操作,相当不安全。

    建议同时添加--skip-networking参数。其会让实例关闭监听端口,自然也就无法建立TCP连接,而只能通过本地socket进行连接。

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

    方法三

    建议同时添加--skip-networking参数。其会让实例关闭监听端口,自然也就无法建立TCP连接,而只能通过本地socket进行连接。

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

    复制代码 代码如下:

    mysql> Insert INTO mysql.user (Host,User,Password)

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

    修改密码

    [[email protected] mysql]# cp mysql/user.* test/
    [[email protected] mysql]# chown mysql.mysql test/user.*

    VALUES(’%’,’jeffrey’,PASSWORD(’biscuit’));

     

    # 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)
    

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

    mysql> FLUSH PRIVILEGES

    修改密码

    注意:

    复制代码 代码如下:

    确切地说这是在增加一个用户,用户名为jeffrey,密码为biscuit。

    # 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。

    [[email protected] mysql]# mysql -utest -p12345
    Welcome to the MySQL monitor.  Commands end with ; or g.
    Your MySQL connection id is 17
    Server version: 5.5.25a-log Source distribution

    在《mysql中文参考手册》里有这个例子:

     

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

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

    注意要使用PASSWORD函数,然后还要使用FLUSH PRIVILEGES。

    注意:

    而在MySQL 8.0.11版本中,这种方式基本不可行,因为其已移除了PASSWORD()函数及不再支持SET PASSWORD ... = PASSWORD ('auth_string')语法。

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

    方法四

    这里的update语句针对的是MySQL 5.7的操作,如果是在5.6版本,修改的应该是password字段,而不是authentication_string。

    不难发现,这种方式的可移植性实在太差,三个不同的版本,就先后经历了列名的改变,及命令的不可用。

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

    和方法三一样,只是使用了REPLACE语句

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

    下面,介绍另外一种更通用的做法,还是在skip-grant-tables的基础上。

    mysql> use test
    Reading table information for completion of table and column names
    You can turn off this feature to get a quicker startup with -A

    mysql> REPLACE INTO mysql.user (Host,User,Password)

     

    与上面不同的是,其会先通过flush privileges操作触发权限表的加载,再使用alter user语句修改root用户的密码,如:

    Database changed
    mysql> update user set password=password('yayun') where user='root';
    Query OK, 0 rows affected (0.00 sec)
    Rows matched: 5  Changed: 0  Warnings: 0

    VALUES(’%’,’jeffrey’,PASSWORD(’biscuit’));

    而在MySQL 8.0.11版本中,这种方式基本不可行,因为其已移除了PASSWORD()函数及不再支持SET PASSWORD ... = PASSWORD ('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)
    

    mysql>

    mysql> FLUSH PRIVILEGES

    不难发现,这种方式的可移植性实在太差,三个不同的版本,就先后经历了列名的改变,及命令的不可用。

    免密码登录进来后,直接执行alter user操作是不行的,因为此时的权限表还没加载。可先通过flush privileges操作触发权限表的加载,再执行alter user操作。

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

    方法五

     

    需要注意的是,通过alter user修改密码只适用于MySQL5.7和8.0,如果是MySQL 5.6,此处可写成

    复制代码 代码如下:

    使用SET PASSWORD语句,

    下面,介绍另外一种更通用的做法,还是在skip-grant-tables的基础上。

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

    mv mysql/user.MYD mysql/user.MYD.bak
    mv mysql/user.MYI mysql/user.MYI.bak
    cp test/user.MY* mysql/
    chown mysql.mysql mysql/user.*

    mysql> SET PASSWORD FOR " = PASSWORD(’biscuit’);

    与上面不同的是,其会先通过flush privileges操作触发权限表的加载,再使用alter user语句修改root用户的密码,如:

    最后重启实例

    4、查找mysql进程号,并且发送SIGHUP信号,重新加载权限表。

    拟也必须使用PASSWORD()函数,但是不需要使用FLUSH PRIVILEGES。

    # 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 &
    

    复制代码 代码如下:

    方法六

    免密码登录进来后,直接执行alter user操作是不行的,因为此时的权限表还没加载。可先通过flush privileges操作触发权限表的加载,再执行alter user操作。

    需要注意的是,如果在启动的过程中没有指定--skip-networking参数,无需重启实例。但在网上看到的绝大多数方案,都是没有指定该参数,但重启了实例,实在没有必要。

    [[email protected] mysql]# pgrep -n mysql
    2184
    [[email protected] mysql]#
    [[email protected] mysql]# kill -SIGHUP 2184

    使用GRANT ... IDENTIFIED BY语句

    需要注意的是,通过alter user修改密码只适用于MySQL5.7和8.0,如果是MySQL 5.6,此处可写成

    下面对这个方案做个总结:

    5、登陆测试

    mysql> GRANT USAGE ON *.* TO " IDENTIFIED BY ’biscuit’;

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

    1. 如果只添加了--skip-grant-tables,修改完密码后,其实无需重启,执行flush privileges即可。

    复制代码 代码如下:

    新葡亰496net,这里PASSWORD()函数是不必要的,也不需要使用FLUSH PRIVILEGES。

     

    2. 从安全角度出发,建议加上--skip-networking。但因其是静态参数,将其剔除掉需要重启实例。

    [[email protected] mysql]# mysql -uroot -pyayun
    Welcome to the MySQL monitor.  Commands end with ; or g.
    Your MySQL connection id is 20
    Server version: 5.5.25a-log Source distribution

    注意: PASSWORD() [不是]以在Unix口令加密的同样方法施行口令加密。

    最后重启实例

    3. 加上--skip-networking,虽然可以屏蔽掉TCP连接,但对于本地其它用户,只要有socket文件的可读权限,都能无密码登录。还是存在安全隐患。

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

    MySQL 忘记口令的解决办法

    mysql> shutdown;
    
    # bin/mysqld_safe --defaults-file=my.cnf &
    
    1. 不建议通过update的方式修改密码,更通用的其实是alter user。

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

    如果 MySQL 正在运行,首先杀之: killall -TERM mysqld。

    需要注意的是,如果在启动的过程中没有指定--skip-networking参数,无需重启实例。但在网上看到的绝大多数方案,都是没有指定该参数,但重启了实例,实在没有必要。

    更优雅的解法

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

    启动 MySQL :bin/safe_mysqld --skip-grant-tables &

    下面对这个方案做个总结:

    相对于skip-grant-tables方案,我们来看看另外一种更优雅的解法,其只会重启一次,且基本上不存在安全隐患。

    mysql>

    就可以不需要密码就进入 MySQL 了。

    1. 如果只添加了--skip-grant-tables,修改完密码后,其实无需重启,执行flush privileges即可。

    首先,依旧是关闭实例

     

    然后就是

    2. 从安全角度出发,建议加上--skip-networking。但因其是静态参数,将其剔除掉需要重启实例。

    其次,创建一个sql文件

    1、skip-grant-tables 我们常用的方法是使用skip-grant-tables选项,mysqld server启动之后并不使用权限系...

    >use mysql

    3. 加上--skip-networking,虽然可以屏蔽掉TCP连接,但对于本地其它用户,只要有socket文件的可读权限,都能无密码登录。还是存在安全隐患。

    写上密码修改语句

    >update user set password=password("new_pass") where user="root";

    1. 不建议通过update的方式修改密码,更通用的其实是alter user。
    # vim init.sql 
    alter user 'root'@'localhost' identified by '123456';
    

    >flush privileges;

     

    最后,使用--init-file参数,启动实例

    重新杀 MySQL ,用正常方法启动 MySQL 。

    更优雅的解法

    # bin/mysqld_safe --defaults-file=my.cnf --init-file=/usr/local/mysql57/init.sql &
    

    mysql密码清空

    相对于skip-grant-tables方案,我们来看看另外一种更优雅的解法,其只会重启一次,且基本上不存在安全隐患。

    实例启动成功后,密码即修改完毕~

    Windows:

    首先,依旧是关闭实例

    如果mysql实例是通过服务脚本来管理的,除了创建sql文件,整个操作可简化为一步。

    1.用系统管理员登陆系统。

    其次,创建一个sql文件

    # service mysqld restart --init-file=/usr/local/mysql57/init.sql 
    

    2.停止MySQL的服务。

    写上密码修改语句

    注意:该操作只适用于/etc/init.d/mysqld这种服务管理方式,不适用于RHEL 7新推出的systemd。

    3.进入命令窗口,然后进入MySQL的安装目录,比如我的安装目录是c:mysql,进入C:mysql in

    # vim init.sql 
    alter user 'root'@'localhost' identified by '123456';
    

    总结

    4.跳过权限检查启动MySQL,

     

    以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

    c:mysql in>mysqld-nt --skip-grant-tables

    最后,使用--init-file参数,启动实例

    您可能感兴趣的文章:

    • windows下mysql忘记root密码的解决方法
    • Mysql的Root密码忘记,查看或修改的解决方法(图文介绍)
    • Mysql5.7忘记root密码及mysql5.7修改root密码的方法
    • Mysql 忘记root密码的完美解决方法
    • 在Linux环境下mysql的root密码忘记解决方法(三种)
    • Mysql 忘记root密码和修改root密码的解决方法(小结)
    • Mysql 5.7 忘记root密码或重置密码的详细方法
    • 忘记mysql数据库root用户密码重置方法[图文]
    • linux mysql忘记密码的多种解决或Access denied for user ''root''@''localhost''
    • 强制修改mysql的root密码的六种方法分享(mysql忘记密码)

    5.重新打开一个窗口,进入c:mysql in目录,设置root的新密码

    # bin/mysqld_safe --defaults-file=my.cnf --init-file=/usr/local/mysql57/init.sql &
    

    c:mysql in>mysqladmin -u root flush-privileges password "newpassword"

    实例启动成功后,密码即修改完毕~

    c:mysql in>mysqladmin -u root -p shutdown

     

    将newpassword替换为你要用的root的密码,第二个命令会提示你输入新密码,重复第一个命令输入的密码。

    如果mysql实例是通过服务脚本来管理的,除了创建sql文件,整个操作可简化为一步。

    6.停止MySQL Server,用正常模式启动Mysql

    # service mysqld restart --init-file=/usr/local/mysql57/init.sql 
    

    7.你可以用新的密码链接到Mysql了。

    注意:该操作只适用于/etc/init.d/mysqld这种服务管理方式,不适用于RHEL 7新推出的systemd。

    Unix&Linux:

     

    1.用root或者运行mysqld的用户登录系统;

    2.利用kill命令结束掉mysqld的进程;

    3.使用--skip-grant-tables参数启动MySQL Server

    shell>mysqld_safe --skip-grant-tables &

    4.为设置新密码

    shell>mysqladmin -u root flush-privileges password "newpassword"

    5.重启MySQL Server

    mysql修改密码

    mysql修改,可在mysql命令行执行如下:

    mysql -u root mysql

    mysql> Update user SET password=PASSWORD("new password") Where user=’name’;

    mysql> FLUSH PRIVILEGES;

    mysql> QUIT

    教你如何将MySQL数据库的密码恢复

    因为MySQL密码存储于数据库mysql中的user表中,所以只需要将我windows 2003下的MySQL中的user表拷贝过来覆盖掉就行了。

    在c:mysqldatamysql(linux 则一般在/var/lib/mysql/mysql/)目录下有三个user表相关文件user.frm、user.MYD、user.MYI

    user.frm //user表样式文件

    user.MYD //user表数据文件

    user.MYI //user表索引文件

    为保险起见,三个都拷贝过来,不过其实如果之前在要恢复的那个MySQL上没有更改过表结构的话,只要拷贝user.MYD就行了

    然后

    #. /etc/rc.d/init.d/mysql stop

    #. /etc/rc.d/init.d/mysql start

    #mysql -u root -p XXXXXX

    好了,可以用windows 2003下mysql密码登陆了

    mysql>use mysql

    mysql>update user set Password=PASSWORD(’xxxxxx’) where User=’root’;

    这时候会出错,提示user表只有读权限

    我分析了一下原因,只这样的,因为user.*文件的权限分配是windows 2003下的,在windows 2003下我ls -l一看权限是666

    在linux下我一看,拷过来后权限变成了600(其实正常情况下600就行了,只不过这里的文件属主不是mysql,拷过来后的属主变为了root,所以会出现权限不够,这时候如果你改成权限666则可以了,当然这样不好,没有解决问题的实质),在/var/lib/mysql/mysql/下ls -l看了一下再

    #chown -R mysql:mysql user.*

    #chmod 600 user.*

    //OK,DONE

    重起一下MYSQL

    重新连接

    mysql>use mysql

    mysql>update user set Password=PASSWORD(’xxxxxx’) where User=’root’;

    mysql>FLUSH PRIVILEGES;

    有一点值得注意:如果你windows 下mysql如果是默认配置的话,注意要还要执行

    mysql>delete from user where User=’’;

    mysql>delete from user where Host=’%’;

    mysql>FLUSH PRIVILEGES;

    好了,到这里恢复密码过程就完成了

    这个方法么就是有点局限性,你必须也具备另外的user表文件

    其他还有几种方法

    其它方法一(这个是网上流传较广的方法,mysql中文参考手册上的)

    1. 向mysqld server 发送kill命令关掉mysqld server(不是 kill -9),存放进程ID的文件通常在MYSQL的数据库所在的目录中。

    killall -TERM mysqld

    你必须是UNIX的root用户或者是你所运行的SERVER上的同等用户,才能执行这个操作。

    1. 使用`--skip-grant-tables’ 参数来启动 mysqld。 LINUX下:

    /usr/bin/safe_mysqld --skip-grant-tables , windows下c:mysql inmysqld --skip-grant-tables

    1. 然后无密码登录到mysqld server ,

    >use mysql

    >update user set password=password("new_pass") where user="root";

    >flush privileges;

    你也可以这样做:

    mysqladmin -h hostname -u user password ’new password’’

    1. 载入权限表:

    mysqladmin -h hostname flush-privileges’

    或者使用 SQL 命令

    FLUSH PRIVILEGES’

    5.killall -TERM mysqld

    6.用新密码登陆

    其它方法二

    直接用十六进制编辑器编辑user.MYD文件

    不过这个里面我要说明一点,我这里编辑的时候发现个问题,加密的密码串有些是连续存储的,有些的最后两位被切开了,后两位存储在后面其他地方.这一点我还没想明白.还有注意一点就是编辑的是加密过的密码串,也就是说你还是需要另外有user表文件。这种方法和我最上面介绍的方法的区别在于,这种方法直接编辑linux下的user表文件,就不需要重新改文件属主和权限了

    修正一下:我在Windows下的实际操作如下

    1.关闭正在运行的MySQL。

    2.打开DOS窗口,转到mysql in目录。

    3.输入

    mysqld-nt --skip-grant-tables

    回车。如果没有出现提示信息,那就对了。

    4.再开一个DOS窗口(因为刚才那个DOS窗口已经不能动了),转到mysql in目录。

    5.输入mysql回车,如果成功,将出现MySQL提示符 >

    1. 连接权限数据库

    >use mysql;

    (>是本来就有的提示符,别忘了最后的分号)

    6.改密码:

    > update user set password=password("123456") where user="root"; (别忘了最后的分号)

    7.刷新权限(必须的步骤)

    >flush privileges;

    8.退出

    > q

    9.注销系统,再进入,开MySQL,使用用户名root和刚才设置的新密码123456登陆。

    据说可以用直接修改user表文件的方法:

    关闭MySQL,Windows下打开Mysqldatamysql,有三个文件user.frm,user.MYD,user.MYI找个

    root密码的几种方法: 方法一 使用phpmyadmin,这是最简单的了,修改mysql库的user表,不过别忘了使用PASSWORD函数。 方法二 使用...

    本文由新葡亰496net发布于网络数据库,转载请注明出处:原来还有更优雅的解法,讲解几种破解MySQL数据库

    关键词: