Discuz X3.5 升级到 X5 完整实操记录
写在前面
X3.5已经EOL,X3.5 到 X5 跨了两个大版本,中间没有官方一键升级路径。但经过实测,只要环境达标、备份到位,手动覆盖升级是可行的。以下是完整步骤,踩过的坑也一并记录。
一、检查 PHP / MySQL 版本是否达标
X5 最低要求:
| 组件 | 最低版本 |
|---|---|
| PHP | 7.4+(推荐 8.0+) |
| MySQL | 5.7+(推荐 8.0+) |
| Apache/Nginx | 正常即可 |
放一个测试探针
在网站根目录新建 check.php:
php
php<?php
echo "PHP 版本: " . phpversion() . "<br>";
echo "MySQL 版本: " . (function_exists('mysqli_get_client_info') ? mysqli_get_client_info() : '未检测到') . "<br>";
echo "PDO MySQL: " . (extension_loaded('pdo_mysql') ? '已加载 ✅' : '未加载 ❌') . "<br>";
echo "MBString: " . (extension_loaded('mbstring') ? '已加载 ✅' : '未加载 ❌') . "<br>";
echo "cURL: " . (extension_loaded('curl') ? '已加载 ✅' : '未加载 ❌') . "<br>";
echo "JSON: " . (extension_loaded('json') ? '已加载 ✅' : '未加载 ❌') . "<br>";
echo "<hr>";
echo "如果以上全部 ✅,可以继续升级。";
?>
访问 你的域名/check.php,全部通过再往下走。测完记得删掉这个文件。
二、备份 X3.5 数据库和网站文件
这步是保命操作,不要跳过。提供两种方法,选一个就行,建议两个都做。
方法1:命令行备份(推荐,最快最稳)
bash
bash# 备份数据库
mysqldump -u root -p --databases 你的数据库名 > db_backup_x35_$(date +%Y%m%d).sql
# 备份网站文件
tar -czf website_backup_x35_$(date +%Y%m%d).tar.gz /path/to/your/website/
两份备份分别存到不同位置,本地 + 异地各一份最稳。
方法2:用 Discuz 后台自带的备份功能(不需要 SSH 权限也能做)
适合没有命令行权限的虚拟主机用户。
操作路径:
后台 → 工具 → 备份 → 备份数据
具体步骤:
| 步骤 | 操作 |
|---|---|
| 1 | 登录 Discuz X3.5 后台 |
| 2 | 左侧菜单 → 工具 → 备份 |
| 3 | 选择 备份数据(不要选备份文件,那个只备份文件不备份库) |
| 4 | 勾选 全站数据 |
| 5 | 点击 开始备份 |
| 6 | 等待完成后,在 data/backup_ 目录下会生成一个 .sql 文件 |
| 7 | 把这个 .sql 文件下载到本地 |
注意:
- 后台备份只备份数据库,不会备份网站文件
- 网站文件还是需要手动打包下载(FTP 下载根目录所有文件,或用主机面板的文件管理器打包)
- 备份文件命名类似
backup_xxxxxxxx.sql,下载后重命名为db_backup_x35_20260608.sql方便识别
三、下载 Discuz X5 并替换文件
3.1 下载
官方地址:
https://www.discuz.net/downloads/
下载文件名类似:Discuz_X5.0_SC_UTF8.zip(以实际下载为准)
3.2 操作流程
bash
bashcd /path/to/your/website/
# 1. 旧文件整体移走
mv . old35
# 2. 解压新包
unzip Discuz_X5.0_SC_UTF8.zip
# 3. 把 upload 目录移到根目录
mv upload/* .
mv upload/.* . 2>/dev/null; true
# 4. 拷贝配置文件(从旧站点复制过来)
cp old35/config/config_global.php ./config/
cp old35/config/config_ucenter.php ./config/
# 5. 加写权限
chmod 777 ./config/config_global.php
chmod 777 ./config/config_ucenter.php
chmod 777 ./data/
chmod 777 ./uc_server/data/
chmod 777是为了让安装程序能写入配置。升级完成后记得改回644或600。
四、执行升级:访问 /install.php
浏览器打开:你的域名/install.php
升级前必须做的两件事
⚠️ 旧版 X3.5 已经放在
old35目录下,可以通过你的域名/old35/访问旧版后台来执行关闭操作。
| 顺序 | 操作 | 路径 | 说明 |
|---|---|---|---|
| ① | 关闭所有插件 | 旧版后台 → 应用 → 插件 → 全部关闭 | 插件不关闭,升级过程会报错或卡住 |
| ② | 关闭整站访问 | 旧版后台 → 全局 → 关闭站点 → 选"仅管理员可访问" | 防止升级中有用户发帖登录,导致数据不一致 |
具体怎么进旧版后台:
浏览器访问:你的域名/old35/admin.php
或
你的域名/old35/
登录后按上面表格操作即可。很多人找不到旧版后台在哪,记住路径是 /old35/。
两个都关,缺一不可。只关站点没关插件,升级到一半照样报错。
五、升级完成后的收尾
5.1 开启插件(逐个开,不要批量)
后台 → 应用 → 插件 → 逐个开启,观察是否报错
X5 的插件架构有变化,旧插件大概率不能直接用。先只开核心必要插件,其余等适配版。
5.2 恢复整站访问
后台 → 全局 → 关闭站点 → 选择"开启"
5.3 权限收回去(安全必须做)
bash
bashchmod 644 ./config/config_global.php
chmod 644 ./config/config_ucenter.php
chmod 755 ./data/
chmod 755 ./uc_server/data/
5.4 删除测试文件和安装目录
bash
bashrm -f check.php
rm -rf install/
rm -rf old35/ # 确认一切正常后再删
关键提醒
| 事项 | 说明 |
|---|---|
| 不要跳过备份 | 升级失败回滚全靠它 |
| check.php 测完就删 | 暴露环境信息,有安全风险 |
| 插件必须先关闭 | 不关插件直接升,大概率报错 |
| 整站关闭是必须的 | 不关就升,数据大概率出问题 |
| 旧版后台在 /old35/ | 升级前从这里进去关插件和关站点 |
| 插件不要批量开 | 一个一个开,出问题好定位 |
| 777 权限升级完就改 | 长期 777 等着被入侵 |
| 后台备份只备份库不备份文件 | 文件还得另外手动下载 |
整个过程顺利的话,30 分钟内可以完成。如果中间报错,优先看 data/logs/ 下的日志文件,大部分问题都能在那里找到原因。