帝国 CMS 数据恢复教程
学完这篇,你能在帝国 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导出重建。 - 收尾必须「更新缓存」和「刷新所有信息内容页面」,附件目录要单独找回。
原文链接:https://www.gj0.com/thread-1196.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。