船说 CMS 数据库连接失败怎么排查
学完这篇,你可以按顺序定位船说 CMS 报数据库连接失败的原因,并把它修复到能正常打开首页或后台。
第一步:先打开调试,拿到具体报错
这一步要做什么、做完得到什么结果:让船说 CMS 把真实数据库错误显示或写进日志,你才能区分是密码错、端口不通还是扩展没装。
船说 CMS 多数组件基于 ThinkPHP,先找配置文件:ThinkPHP 5 常见在 application/config.php,ThinkPHP 6/5.1 常见在 config/app.php。把 'app_debug' => false 改成 true,保存后刷新首页。
常见报错含义:
SQLSTATE[HY000] [2002] Connection refused:数据库没启动、端口不对或被防火墙拦了。SQLSTATE[HY000] [1045] Access denied for user:账号、密码或允许登录的主机不对。could not find driver:PHP 没装pdo_mysql或mysqli扩展。
注意:修完后把
app_debug改回false,否则线上会暴露路径和 SQL 信息。
第二步:核对数据库配置文件
这一步要做什么、做完得到什么结果:确认船说 CMS 读到的库名、账号、密码、端口和实际 MySQL 一致。
打开 application/database.php 或 config/database.php,逐项核对:
'type' => 'mysql',
'hostname' => '127.0.0.1',
'hostport' => '3306',
'database' => 'chuanshuo',
'username' => 'chuanshuo',
'password' => '你的密码',
'prefix' => 'cs_',
'charset' => 'utf8mb4',
如果根目录有 .env,也要检查 DB_HOST、DB_PORT、DB_NAME、DB_USER、DB_PASS,它的优先级可能高于 PHP 配置文件。
注意:
localhost和127.0.0.1在部分环境走 Unix Socket,不是 TCP;连不上时优先统一写成127.0.0.1。
第三步:用命令行单独验证数据库账号
这一步要做什么、做完得到什么结果:绕过 PHP 和 CMS,直接测试 MySQL 账号能不能登录、库是否存在。
在服务器终端执行:
mysql -h127.0.0.1 -P3306 -uchuanshuo -p'你的密码'
登录后执行:
show databases;
use chuanshuo;
show tables;
如果命令行能进、CMS 不能进,问题多在 PHP 配置或缓存;如果命令行也进不去,先修数据库服务、账号权限或端口。
第四步:检查 MySQL 服务、端口和防火墙
这一步要做什么、做完得到什么结果:确认 MySQL 正在运行,并且 3306 端口能被本机或远程访问。
命令行检查:
systemctl status mysqld
ss -lntp | grep 3306
telnet 127.0.0.1 3306
如果你用宝塔面板:进入「软件商店」→「已安装」→ 找到 MySQL 5.7/8.0 → 点「设置」→「状态」,先启动;再进「安全」→ 放行端口 3306。远程数据库还要在云服务器安全组放行 3306。
注意:数据库只给本机用时,不要把 3306 暴露到公网,安全组里只放行你的服务器内网或固定 IP。
第五步:检查账号权限和 host
这一步要做什么、做完得到什么结果:确认这个账号允许从船说 CMS 所在机器登录,并且有目标库权限。
用 root 登录 MySQL 后查:
SELECT user, host FROM mysql.user WHERE user='chuanshuo';
如果只有 chuanshuo@localhost,而 CMS 用 127.0.0.1 或远程 IP 连接,就会 1045。补权限示例:
CREATE USER 'chuanshuo'@'127.0.0.1' IDENTIFIED BY '你的密码';
GRANT ALL PRIVILEGES ON chuanshuo.* TO 'chuanshuo'@'127.0.0.1';
FLUSH PRIVILEGES;
第六步:检查 PHP 扩展和 MySQL 8 兼容
这一步要做什么、做完得到什么结果:确认 PHP 能加载 MySQL 驱动,避免 could not find driver。
执行:
php -v
php -m | grep -E 'pdo_mysql|mysqli'
没有输出就安装。宝塔面板路径:「软件商店」→「已安装」→ PHP-7.4/8.0 →「设置」→「安装扩展」→ 安装 pdo_mysql、mysqli,然后重启 PHP。
MySQL 8 默认 caching_sha2_password,老 PHP 可能连不上,可改:
ALTER USER 'chuanshuo'@'127.0.0.1'
IDENTIFIED WITH mysql_native_password BY '你的密码';
FLUSH PRIVILEGES;
第七步:清缓存、看日志、查目录权限
这一步要做什么、做完得到什么结果:排除旧配置缓存和写入权限导致的“改完仍报错”。
删除 runtime/cache 和 runtime/temp 下的缓存文件,再访问首页。查看日志:
tail -n 100 runtime/log/error.log
# 或进入 runtime/log/日期目录看最新日志
同时确认 runtime 目录可写,宝塔可执行:
chown -R www:www runtime
chmod -R 755 runtime
注意:不要直接把整站
chmod -R 777,只给runtime、上传目录等需要写入的目录授权。
小结
- 先开
app_debug拿准确报错,再定位方向。 - 重点核对
database.php和.env里的 host、port、库名、账号、密码。 - 用
mysql -h127.0.0.1 -P3306 -u用户 -p绕过 CMS 验证账号。 - 检查 MySQL 服务、3306 端口、安全组、账号 host 权限。
- 检查 PHP 的
pdo_mysql/mysqli扩展,MySQL 8 注意认证插件。 - 清
runtime缓存,看日志,只给必要目录写权限。
原文链接:https://www.gj0.com/thread-883.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。