You need to enable JavaScript to run this app. 修复SQLSTATE[HY000] [1045] 用户'username'@'localhost'(使用密码:YES)访问被拒绝问题
优惠活动
大模型
产品
解决方案
定价
更多

修复SQLSTATE[HY000] [1045] 用户'username'@'localhost'(使用密码:YES)访问被拒绝问题

MySQL连接失败排查方案

  • 确认MySQL服务状态:Linux环境执行systemctl status mysql检查服务是否正常运行,Windows环境在服务管理器中查看MySQL服务是否处于运行状态。
  • 端口与监听检查:MySQL默认监听3306端口,执行netstat -tunlp | grep 3306确认端口正常监听,若使用非默认端口,需在DSN中添加port=自定义端口号参数。
  • localhost连接兼容问题:部分环境下localhost会优先走Unix Socket连接而非TCP/IP,若Socket路径配置错误会导致连接失败,可尝试将DBHOST的值替换为127.0.0.1走TCP连接测试。
  • MySQL用户权限校验:MySQL用户权限绑定访问来源,即使账号密码正确,若对应账号不允许从localhost/127.0.0.1访问也会连接失败,登录MySQL执行SELECT user,host FROM mysql.user WHERE user='user';可查看账号允许的访问来源。
  • PDO扩展校验:执行phpinfo()确认已加载pdo_mysql扩展,未加载的话需修改php.ini配置文件开启对应扩展。
  • DSN配置优化:建议在DSN中显式指定编码和端口,比单独执行SET NAMES更稳定,避免环境默认配置冲突。

优化后代码参考

<?php

namespace App\Core;

use PDO;
use PDOException;

class Db extends PDO
{
    private static $instance;

    // 可尝试将localhost替换为127.0.0.1测试
    private const DBHOST = '127.0.0.1';
    private const DBUSER = 'user';
    private const DBPASS = 'passe';
    private const DBNAME = 'bloghkjw_dbname';
    // 新增端口常量 方便修改
    private const DBPORT = 3306;

    private function __construct()
    {
        // DSN中显式指定端口、编码 避免默认配置问题
        $_dsn = sprintf('mysql:dbname=%s;host=%s;port=%d;charset=utf8mb4', self::DBNAME, self::DBHOST, self::DBPORT);
       
        try{
            parent::__construct($_dsn, self::DBUSER, self::DBPASS);

            $this->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
            $this->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        }catch(PDOException $e){
            die($e->getMessage());
        }
    }

    public static function getInstance():self
    {
        if(self::$instance === null){
            self::$instance = new self();
        }
        return self::$instance;
    }
}

内容的提问来源于stack exchange,提问作者Azarab Haimoud

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 04:54:10