在 Ubuntu 上 ThinkPHP 连接 MySQL 失败 是很常见的问题,通常不是代码本身的问题,而是环境配置或服务状态导致的。下面按最常见原因 → 排查方法给你一个系统清单。
systemctl status mysql
如果没运行:
sudo systemctl start mysql
sudo systemctl enable mysql
ThinkPHP 配置文件(以 TP6 为例):
// config/database.php
return [
'type' => 'mysql',
'hostname' => '127.0.0.1', // 不要用 localhost(可能走 socket)
'database' => 'test',
'username' => 'root',
'password' => '123456',
'hostport' => '3306',
];
✅ 重点检查:
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;
ThinkPHP 需要 pdo_mysql
检查:
php -m | grep pdo_mysql
如果没有:
sudo apt install php-mysql
sudo systemctl restart apache2 # 或 php-fpm
本地一般没问题,但如果是远程:
sudo ufw allow 3306
MySQL 也要允许远程:
# /etc/mysql/mysql.conf.d/mysqld.cnf
bind-address = 0.0.0.0
打开:
// .env
APP_DEBUG = true
常见错误:
SQLSTATE[HY000] [2002]Access denied for userUnknown databasemysql -u 用户名 -p
SHOW DATABASES;
php -m | grep pdo_mysql
systemctl status mysql
你可以把下面信息发我:
database.php 配置(隐藏密码)php -v / mysql -V我可以直接告诉你是哪一步错了。