LECMS数据库连接失败如何解决
照着下面的顺序排查一遍,你基本能自己定位并修好 LECMS 的数据库连接失败问题,不用再去论坛发帖等回复。
第一步:先读懂报错内容,别急着改配置
这一步的目的是分清「连不上数据库」和「连上了但选不到库」,两者改的地方完全不同。
常见提示有三类:
SQLSTATE[HY000] [2002] Connection refused或Can't connect to MySQL server—— 服务没启动、端口或地址不对。Access denied for user 'xxx'@'localhost'—— 账号或密码错,或者该账号没有这个库的权限。Unknown database 'xxx'—— 库名写错,或者数据库根本没建。
把报错原文复制下来对照,再去改对应的地方,能省掉大半时间。
注意:如果页面是白屏、只显示「数据库连接失败」而没有细节,先打开调试模式(ThinkPHP 内核在配置文件里把
app_debug改为true),才能看到真实错误。
第二步:确认 MySQL 服务在运行
结果是:服务是 running 状态,才谈得上后面的事。
Linux 服务器执行:
systemctl status mysqld
# 或
systemctl status mysql
如果不是 active (running),执行 systemctl start mysqld 启动。老一点的系统用 service mysql start。
Windows 服务器:按 Win+R 输入 services.msc,在列表里找 MySQL 或 MySQL57,右键「启动」。
第三步:核对数据库配置文件里的参数
LECMS 基于 ThinkPHP 内核,配置文件位置按版本不同:
- ThinkPHP 5 内核(LECMS 3.x 等):站点根目录
/config/database.php - ThinkPHP 3.2 内核(老版本):
/Application/Common/Conf/config.php
如果版本对不上,直接在站点根目录用搜索命令找:
grep -rn "DB_PASSWORD\|db_password" /www/wwwroot/你的站点目录 --include=*.php -l
打开文件,重点核对这几项:
| 参数 | 说明 |
|---|---|
| hostname | 数据库地址 |
| database | 库名,一字不能差 |
| username | 数据库用户名 |
| password | 密码,含 #、&、$ 等符号时用单引号包住 |
| hostport | 默认 3306,改过端口的要写对 |
| prefix | 表前缀,必须和实际表一致 |
| charset | 用 utf8 或 utf8mb4 |
注意:
localhost和127.0.0.1不是一回事。localhost走 Unix socket,127.0.0.1走 TCP。宝塔面板、虚拟主机给的连接地址经常是127.0.0.1或某个内网 IP,别想当然写 localhost。
第四步:手动验证账号密码和库是否存在
结果是:用命令行能连上,说明配置之外的环节没问题。
mysql -u你的用户名 -p -h127.0.0.1 -P3306
输入密码后能进 mysql> 提示符,再执行 show databases; 看目标库在不在。进不去说明账号密码或权限有问题。
用 phpMyAdmin 的话,登录后进「用户账户」→ 找到对应用户点「编辑权限」→ 检查「数据库权限」里有没有勾选目标数据库,没有就补上并执行。
注意:数据库密码在面板里重置后,配置文件不会自动同步,两边都要改。
第五步:检查 PHP 的 MySQL 扩展
结果:确认 PHP 确实具备连数据库的能力。
写一个 phpinfo.php 放到站点根目录,内容 <?php phpinfo();?>,浏览器访问后搜索 mysqli 或 pdo_mysql。没有的话,在宝塔「软件商店」→ 对应 PHP 版本 →「设置」→「安装扩展」里勾选安装;命令行环境执行 php -m | grep -i mysql 检查。
注意:查完记得删掉 phpinfo.php,这东西会暴露服务器信息。
第六步:排除端口、防火墙和安全组
结果:外部能访问到 3306 端口。
netstat -tlnp | grep 3306
本地有监听,但远程连不上,通常是云服务器安全组没放行 3306。到阿里云/腾讯云控制台的「安全组」里添加入方向规则,端口 3306,来源填你的网站服务器 IP(不要图省事填 0.0.0.0/0)。
第七步:清缓存后重试
改完配置仍报错,多半是旧缓存还在。删除站点目录下的 runtime 目录(TP5 内核)或 Application/Runtime(TP3.2 内核)里的全部内容,刷新页面。
第八步:还不行就看 MySQL 错误日志
日志会直接告诉你原因,比如连接数满了、表损坏了。
- 宝塔:
/www/server/data/下的.err文件 - CentOS:
/var/log/mysqld.log - Ubuntu:
/var/log/mysql/error.log
连接数满的话,在 my.cnf 里调大 max_connections 后重启 MySQL。
小结
- 先看报错原文分类:连不上、权限不足、库不存在,三条路走法不同。
- 依次查:MySQL 服务是否运行 → 配置参数是否对 → 账号能否手动登录 → PHP 扩展是否安装 → 端口是否放行 → 缓存是否清掉。
localhost与127.0.0.1不等价,密码含特殊字符要加引号。- 改完配置一定要清
runtime缓存,否则改动看不到效果。 - 最后兜底手段是看 MySQL 错误日志,比猜快得多。
原文链接:https://www.gj0.com/thread-205.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。