我的电脑是win10,所用的是mysql5.7.14
近期在学习mysql数据库的时候,遇到了这个错误,我的密码错误了。突如其来的问题,很是蒙蔽,因为我没对数据库设置过密码。通过网上查询,可以通过进入mysql命令行的方式,来直接修改数据库的密码。具体步骤如下:
在mysql数据库的my.ini文件中找到mysqld这一项:
用记事本打开,找到mysqld,并往其中添加skip-grant-tables
然后上面的就变成:
[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";
然后刷新数据库。这样就能完整的解决以上的报错问题。