← 返回错误码列表

MySQL错误码 2002 分析与解决方案

错误信息

Error 2002

无法通过套接字连接到本地MySQL服务器。

你的PHP应用在使用PDO连接MySQL时遇到了连接问题:

'pdo_code' => 'HY000',
'db_code' => 2002,
'db_error' => 'Can\'t connect to local MySQL server through socket \'/tmp/mysql.sock\' (2)'

解决方案

  • 检查MySQL服务是否正在运行
  • 确认MySQL socket文件路径是否正确
  • 检查PHP PDO连接配置
  • 验证MySQL用户权限和密码
  • 检查防火墙和网络连接
  • 尝试使用TCP/IP连接代替socket连接

PHP连接配置示例

// 使用socket连接(默认)
$dsn = 'mysql:host=localhost;dbname=testdb;charset=utf8mb4';
$options = [
  PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
  PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
  PDO::ATTR_EMULATE_PREPARES => false,
  PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8mb4"
];

try {
  $pdo = new PDO($dsn, 'username', 'password', $options);
  echo "连接成功!";
} catch (PDOException $e) {
  echo "连接失败: " . $e->getMessage();
  // 检查错误码是否为2002
  if ($e->getCode() == '2002') {
    // 尝试使用TCP/IP连接
    $dsn = 'mysql:host=127.0.0.1;port=3306;dbname=testdb;charset=utf8mb4';
    try {
      $pdo = new PDO($dsn, 'username', 'password', $options);
      echo "TCP/IP连接成功!";
    } catch (PDOException $e2) {
      echo "TCP/IP连接也失败: " . $e2->getMessage();
    }
  }
}

连接问题模拟

MySQL服务器
Error 2002
PHP应用

连接失败:无法通过socket连接到MySQL服务器

排查步骤

1. 检查MySQL服务状态

# Linux/Mac
systemctl status mysql
# 或
service mysql status

# Windows
net start mysql

2. 检查socket文件路径

# 登录MySQL查看socket配置
SHOW VARIABLES LIKE 'socket';

# 检查文件是否存在
ls -la /tmp/mysql.sock

3. 验证连接配置

PHP配置检查:
- host: localhost 或 127.0.0.1
- port: 3306(默认)
- socket: /tmp/mysql.sock(Unix)或 MySQL socket路径

调试工具

命令行测试连接

# 使用mysql客户端测试
mysql -u username -p -h localhost

# 指定socket文件
mysql -u username -p -S /tmp/mysql.sock

# 使用TCP/IP连接
mysql -u username -p -h 127.0.0.1 -P 3306

网络诊断

# 检查端口是否监听
netstat -an | grep 3306
# 或
lsof -i :3306

# 测试网络连通性
telnet 127.0.0.1 3306
# 或
nc -zv 127.0.0.1 3306

常见问题原因

  • MySQL服务未启动
  • socket文件路径不正确
  • 防火墙阻止连接
  • MySQL配置绑定到特定IP
  • 磁盘空间不足导致socket创建失败