备份脚本跑完只有 12 张表,恢复后 200 个子站文章全空,备份包大小 180MB,主站数据完整。日志里能对上时间点,这种反而好排。

mysqldump 命令写死了 wp_ 前缀,没有遍历 wp_blogs 生成 wp_2_ 到 wp_200_。脚本退出码是 0,所以定时任务一直显示成功。这一点先确认清楚,后面就不用反复试。

for id in $(wp db query 'SELECT blog_id FROM wp_blogs' --skip-column-names); do
  mysqldump -u root -p db wp_${id}_posts wp_${id}_options > site_${id}.sql
done

这次卡住的地方就在「子站备份漏表」这一环,单独把它拎出来验证,别和其他改动混在同一次发布里。偶发问题先统计频率,一小时几次和一天一次,查法完全不同。

改完顺手把文档补一句,省得下次自己重新推一遍。监控和日志的时间要对上,时区不一致会多绕很大一圈。

临时改动用注释写上日期和原因,过两周自己都记不清为什么这么写。动手前把原文件复制一份带时间戳,出问题立刻换回去,比现场分析快得多。

处理上按这个顺序:从 wp_blogs 取出所有 blog_id;按前缀循环 dump 每个子站表;备份后校验表数量和文件大小。

结果对不对很好判断,恢复后随机抽 3 个子站,文章数与备份前一致,备份包包含全部前缀。

作者 9823189