船说 CMS 数据库连接失败怎么排查

juming
juming 初级会员超兽战士
发布于 2026-10-08 09:54 ·2 浏览 ·0 回复

学完这篇,你可以按顺序定位船说 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 缓存,看日志,只给必要目录写权限。
版权声明:本文来自 GJ站长论坛《船说 CMS 数据库连接失败怎么排查》
原文链接:https://www.gj0.com/thread-883.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。

全部回复 0

还没有回复,来抢沙发~