0
0

Halo 数据恢复记:一次"有惊无险"的教训(AI帮我写的,回头再改)

2026-11-07
文章摘要
|

今天经历了一场虚惊。

事情是这样的:我原本想把 Halo 博客的数据库从 H2 换成 MySQL,于是用 1Panel 做了一次"初始化"操作。结果操作完之后,博客前台一片空白——文章全没了。

当时心里一沉。但转念一想,我之前在 Halo 后台做过备份,下载了一个 60 多兆的压缩包存在本地。数据应该还在。

于是开始恢复。第一次尝试,在 1Panel 里折腾了半天,上传备份、恢复,提示失败。再试一次,还是失败。那时候真的有点慌了——备份文件会不会本身就有问题?

冷静下来检查了一下备份包:解压后 extensions.data 有 2.4MB,不是 0 字节,也不是几 KB,说明文章数据大概率还在里面。那问题不在备份文件,而在恢复方式上。

于是我换了个思路:跳过 1Panel,直接在 Halo 后台上传那个备份压缩包。

点下恢复按钮,等了几秒钟——

数据全回来了。 文章、页面、分类、标签,一个不少。

复盘:问题出在哪

1Panel 在"初始化"过程中,会帮你装新的 MySQL 数据库并修改 Halo 的配置文件。但这个"动手术"的环节,可能恰好和数据恢复的过程冲突了——Halo 还没来得及把数据写进新数据库,或者写入过程中出了错,导致新数据库被清空。

而直接在 Halo 后台恢复,跳过了 1Panel 的数据库初始化步骤。此时 MySQL 已经正常运行,Halo 只需要把 extensions.data 里的数据"吐"进数据库,自然就成功了。

以后怎么做

  1. 备份永远先下载到本地,不要只存在服务器上。

  2. 恢复优先在 Halo 后台操作,而不是依赖 1Panel 的自动化流程。

  3. 备份完就验证:解压看看 extensions.data 的大小,确认不是 0 字节。

  4. 未来换服务器时:旧服务器先不动,在新服务器上恢复,确认一切正常后再关旧服务器。永远给自己留一条退路。