帝国 CMS 恢复备份出错

juming
juming 初级会员超兽战士
发布于 2026-10-08 19:42 ·1 浏览 ·0 回复

学会这篇,你能根据帝国 CMS 恢复备份时的报错原文,定位到底是备份文件、数据库配置还是 PHP 环境的问题,并一步步把站恢复起来。

第一步:先看报错原文,确定故障类型

这一步要做的是把「红字报错」抄下来,判断问题出在哪一层,而不是盲目重试。帝国 CMS 恢复失败的提示通常出现在两个位置:一个是后台点「开始恢复」后页面上方弹出的错误行,另一个是服务器上的 PHP 错误日志(宝塔面板在「网站 → 站点 → 错误日志」,LNMP 一般在 /home/wwwlogs/ 下)。

对照下面几类判断:

  • 提到 SQL syntax、TYPE=MyISAM、Unknown character set → 数据库版本不兼容,看第四步
  • 提到 Table 'xxx' doesn't exist、Duplicate entry → 表前缀或目标库已有数据,看第三步
  • 提到 MySQL server has gone away、Maximum execution time exceeded → PHP 或 MySQL 限制太小,看第五步
  • 页面空白、卡在某个百分比不动 → 备份文件损坏,看第二步

注意:不要一边报错一边反复点「开始恢复」,半途中断会在库里留下残缺的数据表,后续恢复会更麻烦。

第二步:确认备份文件本身完整

帝国 CMS 的备份默认放在 e/data/backup/ 目录下,按备份日期分成一个个文件夹,里面是 1_表名.sql 这样的分表文件。进 FTP 或文件管理器,看这个目录里文件数量是否和当初备份时一致,单个文件大小是否为 0。

最常见的坑是上传备份时用了 FTP 的 ASCII 模式,导致 SQL 文件里的换行被改写、内容损坏。重新上传时把 FTP 客户端的传输模式改成「二进制(Binary)」。

注意:如果备份是在别的服务器上做的,还要确认 PHP 版本差异带来的字符集问题,建议在源站和目标站用相同的 PHP 大版本。

第三步:核对数据库配置和表前缀

打开 e/config/config.php,检查这几个值:$phome_db_server、$phome_db_user、$phome_db_pass、$phome_db_dbname、$phome_db_char。目标数据库必须已经建好,且字符集与备份一致(老站多为 utf8,不是 utf8mb4)。

再看 $phome_db_prefix,帝国 CMS 默认是 phome_。如果新装程序时用了别的前缀,而备份文件里写的是 phome_,恢复后就会出现「表不存在」。

另外,恢复前目标库应当是空的。如果你已经装过一遍帝国 CMS,先通过 phpMyAdmin 把库里所有表勾选后「删除」,再执行恢复。

注意:帝国 CMS 的「整站备份」和「数据表备份」是两回事。数据表备份只能在同版本、同前缀的库里恢复,跨站迁移建议用「恢复文件目录 + 恢复数据」两步走。

第四步:处理 MySQL 版本与严格模式不兼容

典型症状是导入到一半报 You have an error in your SQL syntax ... near 'TYPE=MyISAM'。这是因为 MySQL 5.5 之后不再支持 TYPE= 写法,而 MySQL 8.0 还默认开启了严格模式。

改法有两个:一是编辑 my.cnf(宝塔在「软件商店 → MySQL → 配置修改」),在 [mysqld] 段加一行 sql_mode=NO_ENGINE_SUBSTITUTION,保存后重启 MySQL;二是用文本编辑器打开 .sql 文件,把 TYPE=MyISAM 全局替换成 ENGINE=MyISAM。

第五步:放宽 PHP 限制或改用命令行导入

备份动辄几十上百 MB,PHP 默认限制扛不住。在宝塔「网站 → 站点 → 设置 → PHP 设置」里把 max_execution_time 改成 300,memory_limit 改成 512M,post_max_size 和 upload_max_filesize 都改成 128M。

如果还是超时,直接走命令行最快:

mysql -u root -p 数据库名 < /www/wwwroot/站点/e/data/backup/备份目录/1_表名.sql

按文件名顺序一个个导入。

第六步:恢复后收尾验证

回到后台「系统 → 备份与恢复数据 → 恢复数据」,确认所有表都恢复完毕,然后到「系统 → 数据更新 → 更新缓存」,把「更新所有缓存」执行一遍。最后打开首页和后台随便点几个栏目,确认无 500 错误、文章能正常显示。如果后台登录密码不对,用 phpMyAdmin 在 phome_enewsuser 表里把 password 字段改成已知密码的 MD5 值。

小结

  • 先看报错原文再动手,别反复点恢复
  • 备份文件用二进制模式上传,防止损坏
  • 核对 e/config/config.php 里的数据库信息和表前缀 phome_
  • MySQL 5.5+ 把 TYPE=MyISAM 换成 ENGINE=MyISAM,必要时关掉严格模式
  • 大备份走命令行 mysql < 导入,比后台稳
  • 恢复完必须更新缓存并实际访问验证
版权声明:本文来自 GJ站长论坛《帝国 CMS 恢复备份出错》
原文链接:https://www.gj0.com/thread-1132.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。

全部回复 0

还没有回复,来抢沙发~