最近用python跑一个数据库项目,下载的mysql8.0.23。结果报错
pymysql.err.OperationalError: (1290,......)
原因是因为新版mysql的密码验证方式更新了,安装的时候有个很大的感叹号确定加密方式,结果我按着默认安装了,所以就自讨苦吃了。我到现在也没整明白为什么设计新版这种费力不讨好的密码验证。
新版mysql使用的caching_sha2_password认证方式,换成原来的mysql_native_password就可以。新版的密码首次输入的密码实际上不是系统的密码,首次输进去那个我也不知道有什么用,实际上新版安装时在mysql8.0.23目录里面的data里会有一个err后缀文件,这个文件有安装时生成的随机密码。如果不修改这个密码,那么每次使用都会生成随机密码,这就导致root下访问不了。
那么怎么解决呢?
参考下面几个博客整理一下:
我为了这个报错前后试了看教程,重装,配环境等等快两天才解决。
所以如果你真的被这破环境搞烦了,想卸载重装:请参考这篇完全卸载,否则二次安装会失败甚至解决不了问题:干净卸载mysql,个人亲测,这一次终于成功了。然后按照教程MySQL的安装与配置——详细教程重装应该密码不会再次改变。
接下来看怎么改。
- 主要参考这篇:安装mysql8.0.11以及修改root密码、连接navicat for mysql。如果你现在连mysql都登不进去,就是打开mysql8.0 command line client输入密码就闪退,那么就是密码错了,因为输入的密码不是你的密码而是随机密码。如果你能登进去,那么打开任务管理器,打开服务,看究竟是mysql在运行还是mysql80在运行,一般来说mysql80用你的密码是能进去的,但是没用,pycharm照样连不了数据库,因为mysql才能登上root的账户。如果服务是mysql而且能登进去,跳转到地3步。
所以首先删除你的mysql里的data文件,里面保存你的数据库,如果有用就提前备份一下。然后以管理员身份运行cmd。
进入你的mysql\bin下
mysqld --initialize-insecure
- 这时候会生成一个data文件,打开里面err后缀文件有个临时密码,不难找搜password就能找到定位,然后用这个打开,或者参考这篇Centos7 在docker中安装Mysql 8.0 的相关问题直接改cnf配置文件跳过密码。
- 登录以后查看密码,authentication_string栏显示的是编码加密后的密码。
select host,user,authentication_string from mysql.user;
- 然后再看root是不是caching_sha2_password加密方式。plugin栏显示。
SELECT user,host,plugin from mysql.user
- 不管是不是mysql_native_password,都得先把authentication_string字段清空:
use mysql;
update user set authentication_string='' where user='root'
- 然后退出重登,输密码时就直接按回车,空密码就能进去。然后修改密码方式为mysql_native_ppassword;
alter user'root'@'localhost' identified with mysql_native_password by '新密码';
然后重启mysql服务。再次查看密码验证方式改掉没,还没有就在mysql下粘贴一个my.ini文件,把default_authentication_plugin改为
default_authentication_plugin=mysql_native_password
然后重试。
- 上面操作无误后就可以重启mysql服务,pycharm就能连接到mysql了。