转:http://blog.csdn.net/ahstudy/article/details/6903259
服务器win2003上的mysql好久没有管理,root密码忘记了。
于是在网上找到了修改的资料,为了防止弄巧成拙,先在本地的winxp下做测试。
以下前1-6步是参照网上的资料,但是我在winxp下修改mysql的root密码后,可以通过bin>mysql -u root -p 登陆,但是通过管理工具-服务 不能启动mysql服务,提示 1067 错误。重启系统,服务中的mysql启动成功。
但是,这样不尽完美,总不能修改mysql密码,就得重启系统吧。应该在修改密码后,能通过服务启动mysql才是正解。
于是我反复试验,于是有了第7步。
我的环境是winxp / win2003 + mysql5,均成功了!希望对存在困扰的朋友有所帮助。
操作命令列表:
bin>mysqld-nt.exe --skip-grant-tables &
bin>mysql -u root
mysql> use mysql;
mysql> update user set password=password('新密码') where user='root';
mysql> flush privileges;
mysql> quit
bin>mysqladmin-u root -p shutdown
1.(先去管理工具-服务-关闭mysql服务)在命令中将目录指定到MySQL下的bin目录,输入命令:mysqld-nt.exe --skip-grant-tables &
操作目的是跳过权限检查表(我第一次运行往往是超长等待,然后关掉,重新执行,会运行成功)
2.在命令行中输入命令:mysql -u root
操作目的是以root用户登入,登入成功后显示登入成功的信息,就可以继续下一步了
3.在命令行中输入命令:update user set password=password('新密码') where user='root';
操作目的是更改root用户的密码
4.在命令行中输入:flush privileges;
操作目的是更新更新MySQL的权限表
5.在命令行中输入:exit;
操作目的是退出
6.在MYSQL下的bin目录,输入命令: mysqladmin-u root -p shutdown
操作目的是关闭mysql服务。在输入刚修改的新密码,如果没有任何提示,就说明关闭服务成功!
7.通过管理工具的服务启动mysql。
======================================================
多实例关闭mysql :
采用直接KILL mysql进程,严重时会表结构损害,数据丢失。
还是使用正规的方法:(先说明一下,我的数据库启用了3312和3212两个端口,且配置文件并非以my.cnf命名的)
1. 如果没有/etc/init.d/mysqld文件,先将mysql目录下的support-files/mysql.server文件复制到/etc/init.d/下。
cp support-files/mysql.server /etc/init.d/mysqld
2.打开mysqld文件,确认basedir=/usr/local/mysql和自己的数据库路径一致。
3.该脚本会找basedir下面的conf=/etc/my.cnf文件,简单的方法,将两个实例的配置文件,分别复制到这个目录下,命名为my.cnf。
4.以root身份执行/etc/init.d/mysqld stop。
5.分别在两个实例配置文件的[mysqld]下增加skip-grant-tables。然后重启,比如:
/usr/local/mysql/bin/mysqld_safe --defaults-file=/usr/local/mysql/etc/my3312.cnf --user=mysql &
6.执行mysql -h localhost -P 3312,登录到MySQL数据库。
7.更改用户口令,执行如下命令:
use mysql;
update user set password =password('yourpass') where user='root';
8.载入权限表
FLUSH PRIVILEGES;
6.重启mysql数据库。
7.执行mysql -u root -p -h localhost ,测试是否能够登录到MySQL数据库。