第一步:检查数据库服务是否正常运行
在检查配置之前,首先要确认数据库服务器本身是正在运行的。
- 登录你的服务器控制台(如宝塔面板、cPanel、阿里云ECS等)。
- 找到数据库管理服务,MySQL 或 MariaDB。
- 检查其运行状态,确保它是 “运行中” 或 “已启动” 状态。
- 在宝塔面板中:直接在软件列表里看 MySQL/MariaDB 的状态图标。
- 在命令行中 (Linux):可以输入
systemctl status mysql或systemctl status mariadb查看。 - 在 Windows 中:可以打开“服务”,找到 "MySQL" 或 "MariaDB" 服务,确认其状态为“正在运行”。
如果服务未启动,请尝试启动它,如果启动失败,可能是数据文件损坏、端口被占用或配置文件错误,需要根据具体错误日志进行修复。
第二步:检查 data/common.inc.php 文件中的数据库配置
这是最常见的原因,DedeCMS 通过这个文件来连接数据库,文件中的任何一个信息错误都会导致连接失败。
-
找到文件:使用 FTP 或服务器文件管理器,进入你的 DedeCMS 网站根目录,找到
data/common.inc.php文件。 -
检查并修改配置:用文本编辑器(如 Notepad++, VS Code,勿用记事本)打开该文件,找到以下几行配置:
//数据库连接信息 $cfg_dbhost = 'localhost'; // 数据库服务器 $cfg_dbname = 'your_database_name'; // 数据库名称 $cfg_dbuser = 'your_username'; // 数据库用户名 $cfg_dbpwd = 'your_password'; // 数据库密码 $cfg_dbprefix = 'dede_'; // 数据库表前缀 $cfg_db_language = 'gbk'; // 数据库语言版本
-
逐项核对:
$cfg_dbhost(数据库主机):- 99% 的情况是
localhost,如果你使用的是虚拟主机或云服务器,请确认服务商提供的默认主机地址就是localhost。 - 如果你在本地环境(如 XAMPP, WampServer)中连接远程数据库,或者使用了一些特殊的数据库服务,这里可能需要填写服务器的 IP 地址或域名。但请务必确认你的数据库服务允许来自此主机的连接。
- 99% 的情况是
$cfg_dbname(数据库名):务必填写正确,这个名称是你创建数据库时设定的名字,区分大小写,如果你不确定,可以去你的数据库管理后台(如 phpMyAdmin)查看。$cfg_dbuser(数据库用户名):务必填写正确,这是你授权连接该数据库的用户名。$cfg_dbpwd(数据库密码):这是最容易出错的地方,请仔细核对密码,确保没有多余的空格或特殊符号,如果密码中包含特殊字符(如 , , ),在某些情况下可能会导致连接问题,可以尝试修改一个纯字母数字的密码测试。$cfg_dbprefix(表前缀):通常默认是dede_,如果你在安装时修改了前缀,请确保这里填写的是你修改后的前缀。$cfg_db_language(数据库语言):通常为gbk或utf8,请确保与你创建数据库时指定的字符集一致。
-
保存文件:修改后,保存文件并上传回服务器。注意:如果用记事本编辑,可能会在文件开头添加 BOM 头,导致 PHP 解析错误,强烈推荐使用专业编辑器。
第三步:检查数据库用户权限
即使用户名和密码正确,如果该用户没有被授权访问指定的数据库,连接也会失败。
- 登录数据库管理工具:通过你的服务器控制台(如宝塔面板的“数据库” -> “phpMyAdmin”)或独立的 phpMyAdmin 工具。
- 选择正确的数据库:在左侧列表中,选择你的
$cfg_dbname对应的数据库。 - 检查用户权限:
- 在 phpMyAdmin 的顶部菜单栏,找到 “权限” 选项卡。
- 在“用户账户”列表中,找到你的
$cfg_dbuser。 - 点击“编辑权限”。
- 检查该用户是否对你的数据库拥有 “所有权限” 或至少包含
SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,ALTER,INDEX等关键权限。 - 如果没有,请勾选所有权限,然后点击“执行”保存。
第四步:检查数据库端口和防火墙设置
-
数据库端口:
- 默认的 MySQL/MariaDB 端口是
3306。 - 如果你的数据库运行在非标准端口上(
13306),$cfg_dbhost的写法需要修改为:'localhost:13306'。 - 你可以在服务器命令行中使用
netstat -tuln | grep mysql来确认数据库监听的端口。
- 默认的 MySQL/MariaDB 端口是
-
防火墙/安全组:
- 服务器防火墙:服务器的防火墙(如
iptables,firewalld或 Windows 防火墙)可能阻止了3306端口的访问,你需要将3306端口加入白名单。 - 云服务商安全组:如果你使用的是阿里云、腾讯云等,需要检查其安全组规则,确保安全组入站规则中,源 IP 设置为
0.0.0/0(允许所有 IP,不推荐,仅用于测试)或你的服务器 IP,并且端口是3306。
- 服务器防火墙:服务器的防火墙(如
第五步:检查 PHP 的数据库扩展
PHP 需要加载相应的扩展(如 mysqli 或 pdo_mysql)才能连接 MySQL 数据库。
- 创建一个测试文件:在你的网站根目录下创建一个名为
info.php的文件,内容如下:<?php phpinfo(); ?>
- 访问文件:在浏览器中访问
http://你的域名/info.php。 - 检查扩展:在页面中搜索
mysqli和pdo_mysql,确保对应的模块显示为enabled(已启用)。- 如果没有找到或显示为
disabled,你需要修改 PHP 配置文件(通常是php.ini),找到;extension=mysqli和;extension=pdo_mysql,去掉前面的分号 ,然后重启 PHP-FPM 或 Apache 服务。 - 在宝塔面板中,可以直接在“软件商店” -> “你的 PHP 版本” -> “设置” -> “安装扩展”中,勾选并安装
mysqli和pdo_mysql。
- 如果没有找到或显示为
第六步:检查数据库文件权限
在 Linux 服务器上,data 目录及其下的 common.inc.php 文件需要拥有正确的读写权限。
- 设置目录权限:
data目录建议设置为755。 - 设置文件权限:
common.inc.php文件建议设置为644。
你可以在服务器命令行中使用 chmod 命令来修改:
chmod 755 data/ chmod 644 data/common.inc.php
在宝塔面板中,可以直接右键文件/目录,修改权限。
总结与排查清单
当你遇到 "Dede无法连接数据库" 时,按以下清单快速排查:
| 问题点 | 解决方法 | |
|---|---|---|
| 服务状态 | MySQL/MariaDB 服务是否正在运行? | 启动数据库服务。 |
| 配置文件 | data/common.inc.php 中的主机、用户名、密码、数据库名是否正确? |
仔细核对并修改配置信息。 |
| 用户权限 | 数据库用户是否有访问目标数据库的权限? | 在 phpMyAdmin 中为用户授权。 |
| 端口与防火墙 | 数据库端口是否为 3306?防火墙或安全组是否放行了该端口? |
修改 $cfg_dbhost 或在防火墙/安全组中放行 3306 端口。 |
| PHP扩展 | PHP 是否加载了 mysqli 或 pdo_mysql 扩展? |
在 php.ini 中启用扩展或通过面板安装。 |
| 文件权限 | data 目录和 common.inc.php 的文件权限是否正确? |
修改权限为 755 和 644。 |
按照这个流程,绝大多数的数据库连接问题都可以得到解决,如果问题依旧,请检查 PHP 和 MySQL 的错误日志,里面通常会给出更具体的错误信息。
