如何解决MySQL用户'root'@'172.21.0.1'访问被拒绝的1045错误?
解决MySQL连接错误:1045 (28000): Access denied for user 'root'@'172.21.0.1'
问题场景
尝试通过Python脚本创建MySQL数据库,代码如下:
import mysql.connector mydb = mysql.connector.connect( host="localhost", user="root", password = "password123", ) my_cursor = mydb.cursor() my_cursor.execute("CREATE DATABASE our_users") my_cursor.execute("SHOW DATABASES") for db in my_cursor: print(db)
在Windows CMD执行python create_db.py时,抛出权限拒绝错误:
Traceback (most recent call last): File "C:\path\create_db.py", line 3, in <module> mydb = mysql.connector.connect( File "C:\path\virt\lib\site-packages\mysql\connector\pooling.py", line 286, in connect return CMySQLConnection(*args, **kwargs) File "C:\path\virt\lib\site-packages\mysql\connector\connection_cext.py", line 101, in __init__ self.connect(**kwargs) File "C:\path\virt\lib\site-packages\mysql\connector\abstracts.py", line 1108, in connect self._open_connection() File "C:\path\virt\lib\site-packages\mysql\connector\connection_cext.py", line 273, in _open_connection raise get_mysql_exception( mysql.connector.errors.ProgrammingError: 1045 (28000): Access denied for user 'root'@'172.21.0.1' (using password: YES)
解决方案
1. 验证root密码的正确性
打开Windows CMD,执行mysql -u root -p,按提示输入password123:
- 若能成功登录MySQL,说明密码无误;
- 若登录失败,说明密码错误,需重置MySQL root密码(Windows下可通过MySQL安装包自带的重置工具,或停止服务后用跳过权限表的方式重置)。
2. 检查并授权root用户的访问IP
如果密码正确,说明root用户没有权限从172.21.0.1这个IP访问MySQL:
- 登录MySQL后,执行以下SQL查看root用户的授权主机:
SELECT user, host FROM mysql.user WHERE user = 'root'; - 若结果中没有
root@172.21.0.1或root@%(允许所有IP访问),执行授权语句:-- 仅授权172.21.0.1访问 GRANT ALL PRIVILEGES ON *.* TO 'root'@'172.21.0.1' IDENTIFIED BY 'password123' WITH GRANT OPTION; -- 或者授权所有IP访问(测试环境适用,生产环境不建议) -- GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password123' WITH GRANT OPTION; FLUSH PRIVILEGES;
3. 修改代码中的host为127.0.0.1
MySQL中localhost默认使用socket连接,你的环境可能将localhost解析到了虚拟网卡IP(如172.21.0.1),尝试将代码中的host改为127.0.0.1:
mydb = mysql.connector.connect( host="127.0.0.1", user="root", password="password123", )
4. 确认MySQL服务处于运行状态
按下Win+R,输入services.msc打开Windows服务管理器,找到MySQL服务,确认其状态为“正在运行”,若未运行则右键点击“启动”。
内容的提问来源于stack exchange,提问作者hebral
相关产品推荐
相关产品推荐

