MySQL数据库无法连接
问题描述
在运行python爬虫文件时,出现以下错误

检查数据库连接的地址,用户和密码都没有问题,但是就是一直连接不上(后来是发现爬虫软件修改数据库地址,用户和密码的代码部分写错文件了)
然后在网上查找解决方法,发现了这个帖子:关于pymysql.err.OperationalError: (1045, “Access denied for user ‘root‘@‘localho 问题个人的一些处理的方式_kok?的博客-CSDN博客
这里直接按照他的方法输入以下命令将root密码置空了:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '';
然后就开始了我疯狂找错误的旅途。。。。
将root密码置空后并没有解决上述问题,因为根本原因是我把数据库配置的地方写错代码文件了,但是当我发现这个原因后,把数据库的配置写对文件后,还是出现上述问题(因为此时我已经把root密码改了,而我没意识到这点,写数据库密码的时候还是用的之前的密码)。
此时不使用PyMYSQL,我的其他数据库连接工具都连不上数据库了,终端连接也都出现下面的错误:
ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: YES)
再上网查找资料,都说是密码错了,要重新修改密码,然后就使用了MySQL5的改密码方式,然后就踩了下面这些坑
踩坑一
在MySQL数据目录的my.ini文件的[mysqld]标签下增加“skip-grant-tables”,然后使用net stop mysql,再net start mysql,之后输入mysql -uroot -p登录MySQL,提示输入密码也直接回车就行了。
首先这个方法在MySQL8不管用了,而且还会导致mysql服务也无法正常打开
其次在使用net start mysql时提示服务名无效或者MySQL正在启动 MySQL无法启动,这是因为net start +服务名,启动的是win下注册的服务。此时,系统中并没有注册mysql到服务中。即当前路径下没有mysql服务。
参考:cmd中输入net start mysql 提示:服务名无效或者MySQL正在启动 MySQL无法启动_ermaner666的博客-CSDN博客_mysql服务名无效
注意:
- 因为已经配置过环境变量了,所以可以在任意位置输入mysqld --install
- 使用mysqld --initialize默认是在安装目录生成数据文件夹,但可以在安装目录写个my.conf文件,此时使用mysqld --initialize就会在my.conf里指定的位置生成数据文件夹。使用mysqld --initialize-insecure可以在初始化后无密码登录root用户,方便设置root用户密码。
踩坑二
输入net start mysql命令时,出现以下错误:
[ERROR] [MY-010262] [Server] Can't start server: Bind on TCP/IP port: 通常每个套接字地址(协议/网络地址/端口)只允许使用一次。
这是因为mysql服务端口没有关闭,需要输入netstat -aon|findstr "3306"再结束进程
踩坑三
输入net start mysql命令时,出现错误可以用mysqld --console查看错误信息,然而,有可能会无法启动console,报错如下:
[ERROR] InnoDB: The innodb_system data file 'ibdata1' must be writable
没用的方法:改MySQL的data目录权限,或打开mysql安装目录的data文件夹,删除以下2个文件:ib_logfile0和ib_logfile1
参考:【MySQL】MySQL发生系统错误、The innodb_system data file ‘ibdata1‘ must be writable问题的解决_暗潮汹涌的博客-CSDN博客
windows mysql 启动失败 :The innodb_system data file ‘ibdata1‘ must be writable_小生范-CSDN博客
解决方法:把MySQL服务关了再重新输入mysqld --console就行了
正确的解决方法
因为根本错误原因就是自己的root密码错了,要改回来,而网上的MySQL5的更改密码方法不对,因此用MySQL8更改密码方法就行了
参考:Mysql8.0忘记 root 密码, 如何修改?_why的博客-CSDN博客_mysql8如何修改密码
需要注意的是在输入mysqld --console时要使用net stop mysql
浙公网安备 33010602011771号