不能一键部署PHP 8.3 + MySQL 8.0生产环境,因宝塔官方未将PHP 8.3列为稳定版,MySQL 8.0默认认证插件(caching_sha2_password)与PHP 8.3仅支持的mysql_native_password不兼容,且需手动指定端口、验证扩展加载及SSL握手配置。

不能直接一键部署 PHP 8.3 + MySQL 8.0 生产环境。 宝塔面板官方软件商店截至 2026 年 4 月仍未将 PHP 8.3 列为稳定版,仅提供测试通道;MySQL 8.0 虽可装,但默认校验会拦截低配服务器(如 1GB 内存、单核 CPU),且 PHP 8.3 与 MySQL 8.0 的连接器兼容性需手动干预,不是点一下“安装”就能跑通的。
为什么宝塔不放行 PHP 8.3 稳定安装
宝塔的「软件商店」中 PHP 8.3 显示为「测试版」,本质是它尚未通过宝塔全栈兼容性验证:
- PHP 8.3 移除了
mysql_connect()等全部旧 MySQL 扩展,强制要求使用mysqli或PDO_mysql——但宝塔部分内置脚本(如某些备份模块、数据库导入页)仍隐式依赖已废弃的扩展名逻辑 - 8.3 的 JIT 编译器在低内存服务器上容易触发 OOM,而宝塔的内存检测脚本(
php_check.py)未适配其新内存模型 - 你看到的「安装成功」可能只是编译完成,
php-fpm进程启动后几秒就因 SIGSEGV 崩溃,面板状态栏却仍显示「运行中」
MySQL 8.0 连接器必须用 mysql_native_password
PHP 8.3 默认只支持 mysql_native_password 认证插件,而 MySQL 8.0 新建用户默认用的是 caching_sha2_password。不改就会报 Authentication plugin 'caching_sha2_password' cannot be loaded。
实操步骤:
立即学习“PHP免费学习笔记(深入)”;
解析 MySQL 8.0 的 DDL 脚本,并将表结构导出为 Excel 格式。适用于用户需将 MySQL 的 `CREATE TABLE` 语句转换为结构化的 Excel 文件场景,导出内容包含字段名、数据类型、长度及精度等信息。支持多张表的批量处理,每张表对应 Excel 中的一个独立工作表。适用于数据库文档编写、数据字典生成及模式分析等任务。
- 进宝塔 →「数据库」→ 找到你的用户 →「权限设置」→ 点「修改密码」旁边的「高级」→ 把「认证方式」下拉选为
mysql_native_password - 或者 SSH 登录后执行:
ALTER USER 'your_user'@'127.0.0.1' IDENTIFIED WITH mysql_native_password BY 'your_pass'; FLUSH PRIVILEGES;
- 确认生效:
SELECT host, user, plugin FROM mysql.user WHERE user = 'your_user';,第三列必须是mysql_native_password
PHP 8.3 连 MySQL 8.0 必须显式指定端口和 socket 路径
即使你填了 host = '127.0.0.1',PHP 8.3 在某些编译配置下仍会 fallback 到 Unix socket,而宝塔 MySQL 8.0 默认不生成 /tmp/mysql.sock,导致 Connection refused。
安全写法(PDO 示例):
$pdo = new PDO('mysql:host=127.0.0.1;port=3306;dbname=test;charset=utf8mb4', $user, $pass, [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::MYSQL_ATTR_LOCAL_INFILE => false,
]);
关键点:
-
port=3306必须显式写出,不能省略 - 不要用
localhost,它在 PHP 中等价于 socket 连接 - 检查宝塔 MySQL 设置页里的「端口」值,如果改过(比如 3307),
port参数必须同步 - 若要用 socket,先确认
my.cnf里有socket = /www/server/data/mysql.sock,再在 DSN 中写unix_socket=/www/server/data/mysql.sock
生产环境别跳过这三步验证
装完不是终点,PHP 8.3 + MySQL 8.0 组合极易在边缘场景翻车:
- 执行
php -m | grep -E 'mysqli|pdo_mysql',确认两个扩展都加载成功;如果只有mysqli没pdo_mysql,说明你在 PHP 设置页没勾选「PDO MySQL」扩展 - 查
/www/wwwlogs/your_site_error.log,重点搜SSL和handshake——MySQL 8.0 默认启用 SSL 连接协商,PHP 8.3 若未配MYSQLI_OPT_SSL_MODE可能卡在握手阶段 - 运行
ps aux | grep 'php-fpm: pool www',看进程启动时间;如果刚重启就显示「1s ago」,大概率是连接器初始化失败后被 systemd 自动拉起,实际请求仍 500
最易被忽略的是:MySQL 8.0 的 default_authentication_plugin 是全局配置,改了用户插件后,新创建的用户依然会继承这个默认值 —— 所以每次在宝塔「数据库」页点「添加用户」,都得手动切回 mysql_native_password,不能依赖上次设置。


















