pycharm连接mysql时:ERROR 1045 (28000): Access denied for user 'ODBC'@'localhost' (using password)

1.问题如下,不是密码错误的问题,而是权限的问题


ERROR 1045 (28000): Access denied for user 'ODBC'@'localhost' (using password: NO) 错误,即使各个信息正确并且手动能进入mysql的情况下,pycharm连接依然出错

 

 

2.解决方法

1.进入数据库:mysql -uroot -p

2.   下面三个指令各种功能不同,这里暴力点使用第三种(实际中不要使用root)

      # 允许loaclhost主机使用root用户操作所有的数据库的数据表

         grant all privileges on *.* to 'root'@'localhost' identified by 'mysql';

      # 允许127.0.0.1主机使用root用户操作所有的数据库的数据表

         grant all privileges on *.* to 'root'@'127.0.0.1' identified by 'mysql';

      # 允许127.0.0.1主机使用root用户操作所有的数据库的数据表

         grant all privileges on *.* to 'root'@'%' identified by 'mysql';

3.刷新

         flush privileges;

至此,mysql已经可以正常连接了

 

 

 

 

 

 

 

如果你和我有共同爱好,我们可以加个好友一起交流!

 

 

<think> 我们正在解决的是在PyCharm社区版中连接MySQL出现的"Access denied"错误(错误代码1045)。根据引用内容,该错误通常是由于密码错误或权限问题导致的。以下是详细的解决方案: ### 错误原因分析 1. **密码错误**:最常见的原因是连接输入的密码不正确(引用[1][2][3]) 2. **用户权限问题**:用户可能没有从localhost访问的权限(引用[4]) 3. **MySQL服务状态异常**:服务未运行或配置错误(引用[1]) 4. **密码验证插件问题**:MySQL 8.0+默认使用`caching_sha2_password`插件,旧驱动可能不兼容(引用[3]) --- ### 🛠 解决方案 #### 方法1:验证并重置MySQL密码(推荐) **步骤1:停止MySQL服务** 以管理员身份运行命令提示符: ```cmd net stop mysql # 如果服务名为mysql # 或 net stop mysql80 # MySQL 8.0常见服务名 ``` **步骤2:无密码启动MySQL** ```cmd mysqld --skip-grant-tables --shared-memory ``` **步骤3:新窗口登录并修改密码** 新开命令提示符窗口: ```cmd mysql -u root # 无密码登录 ``` 执行SQL重置密码(以`new_password`为例): ```sql FLUSH PRIVILEGES; ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password'; ``` **步骤4:重启MySQL服务** 关闭两个命令窗口,重启服务: ```cmd net start mysql80 ``` #### 方法2:检查连接代码 在PyCharm中检查Python连接代码: ```python import mysql.connector config = { 'host': 'localhost', 'user': 'your_user', # 确认用户名 'password': 'your_password', # 确认新密码 'database': 'your_db' # 可选 } try: conn = mysql.connector.connect(**config) print("✅ 连接成功!") except mysql.connector.Error as err: print(f"❌ 错误: {err}") ``` #### 方法3:处理身份验证插件(MySQL 8.0+) 修改用户认证方式(需用root登录后执行): ```sql ALTER USER 'your_user'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new_password'; FLUSH PRIVILEGES; ``` #### 方法4:检查用户权限 确认用户有访问权限: ```sql CREATE USER 'your_user'@'localhost' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON *.* TO 'your_user'@'localhost'; FLUSH PRIVILEGES; ``` --- ### 🔍 验证步骤 1. **命令行测试连接**: ```cmd mysql -u your_user -p # 输入密码后应成功登录 ``` 2. **PyCharm中运行测试脚本**: ```python # 测试脚本内容如上 ``` --- ### ⚠️ 注意事项 - **权限问题**:非root用户需确认有数据库访问权限(引用[4]) - **密码特殊字符**:如果密码包含`!@#$`等符号,在代码中需直接写字符串(引用[3]) - **服务名称差异**:Windows中MySQL服务名可能是`mysql`或`mysql80`(引用[1]) - **防火墙**:检查是否阻止了3306端口 > **💡 提示**:重置密码后,PyCharm和所有依赖MySQL的应用需更新密码。 §§相关问题§§ 1. 如何解决MySQL 8.0的"caching_sha2_password"插件兼容性问题? 2. 如何在忘记MySQL密码通过安全模式重置? 3. PyCharm连接MySQL出现"Can't connect to MySQL server on 'localhost'"错误怎么办? 4. 如何为MySQL用户授予特定数据库的权限而非全局权限? </think>### 解决 PyCharm 社区版中 MySQL 错误 1045 (28000) 的完整方案 错误 `1045 (28000): Access denied for user 'your_user'@'localhost' (using password: YES)` 表示 MySQL 服务器拒绝了连接请求。以下是分步解决方案: --- ### 🔍 错误原因分析(根据引用内容) 1. **密码错误**(最常见原因)[^1][^2][^3] 2. 用户权限配置问题[^4] 3. MySQL 服务状态异常 4. 身份验证插件不兼容(MySQL 8.0+) 5. 防火墙或端口阻止连接 --- ### 🛠 解决方案 #### 步骤 1:验证密码是否正确 ```python # 在 PyCharm 中创建 test_connection.py import mysql.connector try: conn = mysql.connector.connect( host="localhost", user="your_user", # 替换为实际用户名 password="your_password", # 替换为实际密码 database="your_db" # 可选 ) print("✅ 连接成功!") conn.close() except mysql.connector.Error as err: print(f"❌ 错误: {err}") ``` **执行后可能结果**: - 如果输出具体错误信息,根据提示调整 - 如果仍报 1045,继续下一步 #### 步骤 2:重置 MySQL 密码(Windows) 1. **停止 MySQL 服务**: ```cmd net stop mysql # 或 mysql80 ``` 2. **跳过权限检查启动**: ```cmd mysqld --skip-grant-tables --shared-memory ``` 3. **新窗口登录并修改密码**: ```cmd mysql -u root ``` ```sql FLUSH PRIVILEGES; ALTER USER 'your_user'@'localhost' IDENTIFIED BY 'new_password'; EXIT; ``` 4. **重启服务**: ```cmd net start mysql ``` > **注意**:Mac/Linux 用户使用 `sudo systemctl stop mysql` 等命令[^1] #### 步骤 3:检查用户权限 ```sql -- 登录 MySQL 后执行 SELECT Host, User FROM mysql.user; -- 查看用户列表 SHOW GRANTS FOR 'your_user'@'localhost'; -- 检查权限 -- 若无权限则授权(示例) GRANT ALL PRIVILEGES ON *.* TO 'your_user'@'localhost' IDENTIFIED BY 'password'; FLUSH PRIVILEGES; ``` #### 步骤 4:处理 MySQL 8.0+ 身份验证问题 ```sql ALTER USER 'your_user'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new_password'; FLUSH PRIVILEGES; ``` #### 步骤 5:检查连接配置 ```python # 确保配置正确(特别是特殊字符) config = { 'host': '127.0.0.1', # 尝试用 IP 代替 localhost 'port': 3306, # 确认端口 'user': 'your_user', 'password': 'p@ssw0rd!', # 特殊字符直接写在字符串中[^3] 'auth_plugin': 'mysql_native_password' # 显式指定插件 } ``` #### 步骤 6:诊断网络和端口 1. 检查 MySQL 是否运行: ```cmd sudo systemctl status mysql # Linux/Mac ``` 2. 测试端口连通性: ```cmd telnet localhost 3306 ``` 3.关闭防火墙测试: ```cmd sudo ufw disable # Ubuntu ``` --- ### ⚠️ 注意事项 1. **密码特殊字符**:在代码中直接使用字符串而非变量(如 `password="abc#123"`)[^3] 2. **服务名称差异**:Windows 上可能是 `mysql` 或 `mysql80`[^1] 3. **用户主机匹配**:确保 `'user'@'localhost'` 存在而非 `'user'@'%'` 4. **MySQL 版本**:8.0+ 默认使用 `caching_sha2_password`,旧驱动需切换插件[^4] --- ### 🔍 验证是否解决 在 PyCharm 中重新运行测试脚本: ```python # 修改后重新测试 try: conn = mysql.connector.connect(**config) cursor = conn.cursor() cursor.execute("SELECT version()") print(f"MySQL版本: {cursor.fetchone()[0]}") except Exception as e: print(f"失败: {e}") finally: if conn.is_connected(): conn.close() ``` **预期输出**: ``` MySQL版本: 8.0.33 ```
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值