Discuz X3.5 升级到 X5 完整实操记录

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/ 下的日志文件,大部分问题都能在那里找到原因。

相关推荐
for_ever_love__15 天前
LangChain 1.0 迁移指南:哪些 API 变了,怎么改
chatgpt·langchain·升级·新版本·迁移·变化·1.0
书生执笔画浮沉19 天前
分享一个开源小工具CAdapt
linux·c·gnu·glibc·kernel·升级·灵感
TDengine (老段)1 个月前
TDengine 常见问题 TOP4
数据库·物联网·时序数据库·tdengine·涛思数据·升级·tdengine 问题
wsad05322 个月前
CentOS 10 上使用 Docker Compose 部署 Discuz X5.0 论坛完整教程
linux·docker·centos·discuz
qetfw3 个月前
Debian 部署 Discuz! 论坛:Nginx、PHP 与 MariaDB 配置
linux·运维·nginx·debian·php·discuz
飞塔老梅子4 个月前
【管理篇 / 升级】❀ 15. 在服务到期的情况下升级FortiOS 8.0固件 ❀ FortiGate 防火墙
升级·固件·fortios·fortigate·8.0
大势智慧5 个月前
矿影安巡版|无人机自主巡检,AI识别隐患,筑牢矿山安全防线
人工智能·安全·无人机·升级·智慧矿山·空间智能·露天矿山
介一安全5 个月前
【漏洞学习】Discuz! 高危设计缺陷深度剖析:Windows短文件名导致数据库泄露
discuz·安全性测试·案例·信息泄漏·短文件名
SimonLiu0095 个月前
codex升级之后报错
升级·codex