You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决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:

  1. 登录MySQL后,执行以下SQL查看root用户的授权主机:
    SELECT user, host FROM mysql.user WHERE user = 'root';
    
  2. 若结果中没有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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 06:01:30