当前位置 : 145z游戏站 | 诛仙 | 技术教程 | 

诛仙灾难恢复指南:遭遇删库/勒索病毒如何急救

热度:
服务器半夜被勒索病毒加密?熊GM误删玩家数据库?
别慌!只要还剩1个核心文件,就能实现分钟级复活!
本文提供从 事前防御→事故定位→数据重生 的完整救火方案,用开源工具打造零成本容灾体系。

⛑️ 常见灾难场景与黄金拯救时间
灾难类型 最佳修复窗口 核心救命文件 后续后遗症
误删玩家数据 60分钟内 gamedb/backup/auto_save/ 可能丢失1小时游戏进度
勒索病毒加密 病毒激活前 zpack_YYYYMMDD.7z 部分配置文件需重写
硬盘物理损坏 永久丢失 云端OSS异地备份 需重新映射玩家UID
核心配置被篡改 无限制 git版本库/config_bak GM权限体系重建
DDOS攻击瘫痪 攻击持续期 网关IP白名单列表 需清洗所有异常登录记录


🛡️ 三重防御盾构建(事前必做!)
第一重:全自动热备份(开源工具:BorgBackup)

配置方案:
borgmatic配置文件(config.yaml)

location:
source_directories:
/home/zxserver/gamedb

/home/zxserver/config

repositories:
path: /backup/borg_repo

label: 诛仙主仓库
storage:
compression: lz4
archive_name_format: "zx_{now}"
retention:
keep_hourly: 24
keep_daily: 7
keep_weekly: 4

执行逻辑:
每30分钟差异备份

本地保留24小时备份,云端通过rclone同步到阿里云OSS

第二重:配置版本控制(Git + 钩子)

对核心配置目录初始化Git

cd /home/zxserver/config
git init
git add .
git commit -m "初始配置快照"

设置提交钩子(监控文件变化自动提交)

echo '#!/bin/sh' > .git/hooks/post-commit
echo 'git push backup_remote master' >> .git/hooks/post-commit
chmod +x .git/hooks/post-commit

第三重:物理隔离护盾(树莓派+移动硬盘)

低成本方案:
树莓派安装minio对象存储服务

设置服务端通过rsync每日凌晨3点增量同步

同步完成自动弹出移动硬盘(物理隔绝勒索病毒)

🚑 灾难现场急救手册
场景1:GM执行DELETE FROM players WHERE...误删全服角色

急救步骤:
冻结服务:

systemctl stop zx_gate # 立即停止网关服务

提取最近事务:

mysqlbinlog --start-datetime="2024-06-28 14:00:00" gamedb-bin.000001 | grep "DELETE FROM players" -B 30 > rescue.sql

反向操作回滚:

sed 's/DELETE FROM/INSERT INTO/g' rescue.sql | mysql -u root -p gamedb

场景2:发现README_FOR_DECRYPT.txt勒索文件

急救流程:
断网取证:

拍照勒索信息

用chkrootkit检查后门
尝试解密:

python3 ransom_decrypt.py --scan --dir /home/zxserver # 使用NoMoreRansom工具

终极手段:

borg extract /backup/borg_repo::zx_202406281200 # 提取未加密的备份


🔧 灾后重建关键步骤
玩家UID重映射(防装备错乱)

重建玩家UID索引关系(account_mapping.py)

old_data = load_from_backup('players.json')
for player in old_data:
new_id = generate_consistent_hash(player['name'] + player['register_ip'])
redis.set(f"uid_map:{player['id']}", new_id)

避免二次事故的操作约束

限制危险SQL执行权限

REVOKE DELETE ON gamedb.* FROM 'gm_admin'@'%';
CREATE TRIGGER protect_players BEFORE DELETE ON players
FOR EACH ROW SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '需超级管理员手工解除锁定';

数据一致性校验(防止幽灵道具)

检查背包物品与数据库差异

python3 check_integrity.py --table items \
--filter 'owner_id NOT IN (SELECT id FROM players)' # 查找无主物品


📦 开箱即用救难包(Github开源)

获取一键容灾工具箱

wget https://github.com/zx_backup_tools/rescue_kit/releases/latest/download/zx_rescue.zip
unzip zx_rescue.zip && cd rescue_kit
./install.sh --with-borg # 自动安装并配置备份体系

包含:
勒索病毒识别器(支持Top5常见变种)

数据库实时回滚代理

自动漂移备份守护进程
[顶部]