mysql ERROR 1045 (28000): Access denied for user 'ODBC'@'localhost' (using password: NO)错误解决办法

时间:2022-06-29 20:28:16

 

我的电脑是win10,所用的是mysql5.7.14

近期在学习mysql数据库的时候,遇到了这个错误,我的密码错误了。突如其来的问题,很是蒙蔽,因为我没对数据库设置过密码。通过网上查询,可以通过进入mysql命令行的方式,来直接修改数据库的密码。具体步骤如下:

在mysql数据库的my.ini文件中找到mysqld这一项:

mysql ERROR 1045 (28000): Access denied for user 'ODBC'@'localhost' (using password: NO)错误解决办法

用记事本打开,找到mysqld,并往其中添加skip-grant-tables

mysql ERROR 1045 (28000): Access denied for user 'ODBC'@'localhost' (using password: NO)错误解决办法

然后上面的就变成:

[mysqld]

skip-grant-tables

port=3306

这句话的意思是,跳过验证,这个在开发的时候是很有帮助的,因为在我们忘记密码以后可以很方便的修改数据库密码的,但是,为了安全,这个选项不能一直存在。

然后保存并在windows服务中重启mysql服务,进入mysql所在路径下的bin目录中,运行如下指令:

mysql -u root -p

对于弹出的enter password可以直接一个回车跳过,从而进入mysql命令行。在mysql命令行中 使用如下指令修改密码:

1 use mysql;
2 update user set password=password("123456") where user="root";

但是在实际用的时候,这个报错了,显示mysql数据库中没有password这一列,这就很奇怪了,因为这个是每个数据库自带的一项,查了资料才知道,在mysql5.7.14中,password字段被改成了 authentication_string,修改上述指令的第二行为:

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

这样就实现了对密码的修改,然后刷新一下数据库:

flush privileges;

接着退出,并把my.ini文件中添加的那一项去掉,并重启数据库服务,就能在python脚本中访问了。
在访问中,又遇到了一个新的问题,1862 Your password has expired. To log in you must change it using a client,

并且提示mysql error You must reset your password using ALTER USER statement before executing this statement.对于这个问题,需要调用如下指令:

1 alter user user("root") identified by "new_password";

然后刷新数据库。这样就能完整的解决以上的报错问题。