温馨提示×

ubuntu thinkphp连接mysql为何失败

小樊
42
2026-10-22 02:41:31
栏目: 云计算

在 Ubuntu 上 ThinkPHP 连接 MySQL 失败 是很常见的问题,通常不是代码本身的问题,而是环境配置或服务状态导致的。下面按最常见原因 → 排查方法给你一个系统清单。


一、最常见原因汇总(90% 都在这里)

1️⃣ MySQL 服务没启动

systemctl status mysql

如果没运行:

sudo systemctl start mysql
sudo systemctl enable mysql

2️⃣ 数据库配置错误(最常见)

ThinkPHP 配置文件(以 TP6 为例):

// config/database.php
return [
    'type'     => 'mysql',
    'hostname' => '127.0.0.1',   // 不要用 localhost(可能走 socket)
    'database' => 'test',
    'username' => 'root',
    'password' => '123456',
    'hostport' => '3306',
];

✅ 重点检查:

  • 数据库名是否存在
  • 用户名密码是否正确
  • 端口是否是 3306

3️⃣ MySQL 不允许 root 远程/本地连接

Ubuntu 下 MySQL 默认:

  • root 只能用 auth_socket
  • 不能用密码登录

测试:

mysql -u root -p

如果失败,说明 root 不支持密码登录。

✅ 解决:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码';
FLUSH PRIVILEGES;

或 新建专用用户:

CREATE USER 'tp'@'localhost' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON test.* TO 'tp'@'localhost';
FLUSH PRIVILEGES;

4️⃣ PHP 没装 MySQL 扩展

ThinkPHP 需要 pdo_mysql

检查:

php -m | grep pdo_mysql

如果没有:

sudo apt install php-mysql
sudo systemctl restart apache2   # 或 php-fpm

5️⃣ 防火墙 / 端口问题(远程连接时)

本地一般没问题,但如果是远程:

sudo ufw allow 3306

MySQL 也要允许远程:

# /etc/mysql/mysql.conf.d/mysqld.cnf
bind-address = 0.0.0.0

6️⃣ ThinkPHP 报错信息看哪里

打开:

// .env
APP_DEBUG = true

常见错误:

  • SQLSTATE[HY000] [2002]
  • Access denied for user
  • Unknown database

二、快速自检清单 ✅

mysql -u 用户名 -p
SHOW DATABASES;
php -m | grep pdo_mysql
systemctl status mysql

三、如果你愿意,我可以直接帮你定位

你可以把下面信息发我:

  1. ThinkPHP 版本(5 / 6 / 8)
  2. 报错完整信息
  3. database.php 配置(隐藏密码)
  4. php -v / mysql -V

我可以直接告诉你是哪一步错了。

0 踩