GJ 站长论坛・社区规则,请知晓

帝国 CMS 数据恢复教程

juming
juming 初级会员超兽战士
发布于 2026-10-08 21:12 ·7 浏览 ·0 回复

学完这篇,你能在帝国 CMS 数据库被误删、表损坏或后台打不开的情况下,把网站内容找回来并恢复正常访问。

第一步:先判断你丢的是哪一种数据

不同情况对应完全不同的恢复路径,先花两分钟确认,别一上来就点「恢复」——那可能把还能用的数据一起覆盖掉。

  • 整个数据库没了(服务器重装、误执行 DROP DATABASE)→ 走第二步、第三步,用备份整体还原。
  • 只有某几张表打不开、提示「表已损坏」→ 走第六步,先尝试修复表。
  • 只是误删了几篇文章或一个栏目→ 走第五步,从旧备份里抠出那部分数据补回来。

注意:无论哪种情况,第一步都应该是先把当前数据库完整导出留底,命令是 mysqldump -uroot -p --default-character-set=utf8 你的库名 > /tmp/before_fix.sql。动手之后的每一步都可能让现状变得更难恢复。

第二步:找到帝国 CMS 自带的备份文件

帝国 CMS 后台的备份功能会把每一张表单独导出成 .sql 文件,放在网站根目录的 /e/data/backup/ 下面,通常是一个以时间戳命名的子目录,例如 /e/data/backup/bak_20240115_093000/,里面是 phome_ecms_news.sql、phome_enewsclass.sql 这类文件(默认表前缀是 phome_)。

如果服务器上还能访问文件,用 FTP 或宝塔面板的文件管理器进到这个目录,把整个文件夹下载到本地留一份。

注意:备份目录必须在服务器磁盘上真实存在。如果当初把备份路径设成了临时目录,或者服务器整盘被重置,这一步就没有文件可找,只能依赖第三方备份(快照、宝塔的计划任务、云数据库的自动备份)。

第三步:从后台「数据备份与恢复」还原

前提是网站还能打开、后台还能登录。后台入口默认是 http://你的域名/e/admin/,登录后在顶部菜单进「系统」→「数据备份与恢复」(部分版本写作「备份与恢复数据」),点「恢复数据」,在列表里选中第二步找到的那个备份目录,勾选要恢复的表,点「开始恢复」。

恢复完成的标准是:数据库里能看到 phome_ecms_news 等表,且行数不再是 0。

注意:「恢复数据」是覆盖式的,同名表会被先清空再写入。所以如果你只想补回一篇文章,千万别用这个功能整表恢复,否则备份之后新发的文章会全部消失。

第四步:后台进不去时,用 phpMyAdmin 或命令行导入

如果后台因为数据库连不上而打不开,就直接操作数据库。打开 phpMyAdmin,左侧选中你的库,点顶部「导入」,选择备份的 .sql 文件,字符集选 utf8(帝国 CMS 7.5 及以上如果建库时用的是 utf8mb4,这里也选 utf8mb4),点「执行」。

文件太大传不上去时改用命令行:

mysql -uroot -p 你的库名 < /e/data/backup/bak_20240115_093000/phome_ecms_news.sql

导入完还要检查 /e/config/config.php 里的数据库主机、库名、用户名、密码四项是否和现在一致,不一致就改过来。

第五步:只丢了一部分内容时做「精准恢复」

最稳的做法是:新建一个临时库(比如 tmp_restore),把旧备份完整导入进去,再回主库执行跨库补数据:

INSERT IGNORE INTO 你的库名.phome_ecms_news
SELECT * FROM tmp_restore.phome_ecms_news
WHERE newstime < 1704067200;

INSERT IGNORE 会跳过主键重复的行,不会覆盖现有数据。补完确认无误后删掉临时库。

第六步:表损坏时先修复,别急着恢复

MyISAM 表崩溃的典型表现是后台报「表 xxx 已损坏」。登录 phpMyAdmin,选中该表,点「操作」页下拉到「修复表」;或者执行:

REPAIR TABLE phome_ecms_news;

命令行方式(需先 systemctl stop mysqld):

myisamchk -r /var/lib/mysql/你的库名/phome_ecms_news.MYI

如果是 InnoDB 表,REPAIR TABLE 不起作用,需要在 my.cnf 的 [mysqld] 段加一行 innodb_force_recovery = 1,重启后把数据 mysqldump 出来再重建。

第七步:恢复后的收尾,不做页面还是乱的

数据库回来了,页面不一定立刻正常。依次做这几件事:后台进「系统」→「数据更新」,点「更新缓存」,再点「刷新所有信息内容页面」和「刷新首页」。然后检查 /d/file/ 附件目录——图片和附件不在数据库里,如果这台服务器也换过,需要另外从快照或旧服务器上找回这个目录。

注意:如果栏目页面显示空白或报错,多半是 /e/data/ 下的缓存文件权限不对,把 /e/data/ 及子目录权限设为 755、属主设为 Web 运行用户(Nginx 通常是 www,Apache 通常是 apache)后重新更新缓存。

小结

  • 动手前先用 mysqldump 备份现状,这是唯一不能省的一步。
  • 帝国 CMS 自带备份在 /e/data/backup/,后台「系统」→「数据备份与恢复」可以整体还原。
  • 后台打不开就用 phpMyAdmin 或 mysql < xxx.sql 命令行导入,注意字符集要跟建库时一致。
  • 只想补回部分数据,就导入到临时库再用 INSERT IGNORE ... SELECT 跨库补充,别整表覆盖。
  • MyISAM 表损坏用 REPAIR TABLE,InnoDB 用 innodb_force_recovery 导出重建。
  • 收尾必须「更新缓存」和「刷新所有信息内容页面」,附件目录要单独找回。
版权声明:本文来自 GJ站长论坛《帝国 CMS 数据恢复教程》
原文链接:https://www.gj0.com/thread-1196.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。

全部回复 0

还没有回复,来抢沙发~