今天在一个Windows Server上用Navicat打开数据库的时候,报了这个错,无法打开,上百度查了一下,发现是个挺常见的问题,很多人都遇到过,所以在此记录一下,以备后用。
解决方案:绕过登录进入Mysql,然后修改密码即可。
Windows下的操作:
1.停止Mysql服务,可以在 开始菜单->控制面板->系统和安全->管理工具->服务 里停止MySQL服务,也可以用cmd开命令行,然后输入命令:
net stop mysql
2.打开命令行,cd到你的MySQL的目录下,比如我的目录是:C:\Program Files\MySQL\MySQL Server 5.5\bin,所以我的命令就是:
cd C:\Program Files\MySQL\MySQL Server 5.5\bin
3.输入命令:
mysqld --defaults-file="C:\Program Files\MySQL\MySQL Server 5.5\my.ini" --console --skip-grant-tables
(default-file的地址取决于你自己电脑上的MYSQL的地址,不要直接复制,--skip-grant-tables这个参数的意思是启动mysql时跳过授权表,简单的说,就是不需要输入账号密码即可登录进数据库)
4.然后命令行里会打印一堆日志,证明命令已经生效,这时,我们就重新开一个命令行(不要关闭当前的命令行)
5.在新开的命令行里输入:
cd C:\Program Files\MySQL\MySQL Server 5.5\bin
(cd后面的目录取决于你本身的MYSQL的目录)
6.直接输入:
mysql
,不用账号密码就可以直接进入mysql了
7.输入:
use mysql
(选择mysql这个database)
8.输入:
update user set password=PASSWORD("NewPassword") where user="root";
(更新root用户的密码,不解释了,NewPassword这个值自己改)
9.刷新一下,输入:
FLUSH PRIVILEGES;
10.然后就可以退出mysql了,然后再把刚刚的那个命令行也停止了,重新打开MYSQL服务,接着就拿着你的新密码去打开mysql吧~~
Linux下的操作:(#后面跟的是命令行命令,mysql>后跟的是mysql命令行的命令)
# /etc/init.d/mysql stop
# mysqld_safe --user=mysql --skip-grant-tables --skip-networking &
# mysql -u root mysql
mysql> UPDATE user SET Password=PASSWORD(’newpassword’) where USER=’root’;
mysql> FLUSH PRIVILEGES;
mysql> quit
# /etc/init.d/mysql restart
# mysql -uroot -p
Mac下的操作: (#后面跟的是命令行命令,mysql>后跟的是mysql命令行的命令)
# sudo /usr/local/mysql/bin/mysqld stop
# sudo mysqld_safe --user=mysql --skip-grant-tables --skip-networking &
# mysql -u root mysql
mysql> UPDATE user SET Password=PASSWORD(’newpassword’) where USER=’root’;
mysql> FLUSH PRIVILEGES;
mysql> quit
# /etc/init.d/mysql restart
# mysql -uroot -p
P.S.
1.如果发现mysql的User表中没有Password字段,那就把
mysql> UPDATE user SET Password=PASSWORD(’newpassword’) where USER=’root’;
改为:
mysql> UPDATE user SET authentication_string=PASSWORD(’newpassword’) where USER=’root’;
2.如果进入数据库后,进行操作时提示:
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
那就输入下面的命令(youPassword自行替换):
SET PASSWORD = PASSWORD('youPassword');