介绍一下传奇版本服务端的数据库备份和恢复方法
以下是传奇服务端数据库备份与恢复的核心方法,结合主流 GOM 引擎特性和行业最佳实践,提供从基础操作到高级修复的全流程指南:一、核心数据库文件定位
1. 关键数据存储路径
角色数据:DBServer\FDB\Hum.DB(角色装备 / 等级)、DBServer\FDB\Mir.DB(角色扩展属性)
账号数据:LoginSrv\IdDB\ID.DB(账号密码 / 注册信息)
行会数据:Mir200\Envir\Castle\SabukW.txt(沙巴克占领记录)、GuildBase\Guilds(行会成员 / 仓库)
日志数据:DBServer\Log\TradeLog_*.txt(交易记录)、M2Server\Log\GameLog.txt(游戏行为日志)
2. 引擎版本差异
GOM 引擎:默认使用 DBC2000 管理本地数据库,需通过控制面板配置数据库别名(如 HeroDB)指向Mud2\DB目录
SQL Server 版本:数据存储于MudDB等数据库,需通过 SSMS 或 Navicat 进行备份
二、基础备份方法
1. 手动备份(DBC2000 环境)
全量备份:
停止服务端程序(M2Server、DBServer 等)
复制以下目录至安全位置:
DBServer\FDB(角色数据)
LoginSrv\IdDB(账号数据)
Mir200\Envir\Castle(行会数据)
GuildBase(行会仓库)
建议使用 7-Zip 压缩并加密,命名规则:Backup_20250717_Full.7z
增量备份:
每日复制DBServer\FDB中修改时间在 24 小时内的文件
结合DBServer\Log\UpdateLog.txt确认数据变更范围
2. 自动化备份脚本
Windows 计划任务:
bat
@echo off
REM 全量备份
robocopy "D:\mirserver\DBServer\FDB" "D:\Backup\FDB\%date:~0,4%-%date:~5,2%-%date:~8,2%" /MIR /Z
robocopy "D:\mirserver\LoginSrv\IdDB" "D:\Backup\IdDB\%date:~0,4%-%date:~5,2%-%date:~8,2%" /MIR /Z
REM 清理7天前备份
forfiles /p "D:\Backup\FDB" /s /m *.* /d -7 /c "cmd /c del @path"
将脚本保存为AutoBackup.bat,通过计划任务每日凌晨 3 点执行
SQL Server 作业(适用于 SQL 版本):
在 SSMS 中创建维护计划
配置全量备份(每周日)和事务日志备份(每小时)
存储路径建议使用 RAID 10 阵列或云存储(如 AWS S3)
三、恢复操作流程
1. 常规恢复(DBC2000)
角色 / 账号恢复:
停止服务端
删除目标目录下的现有文件(如DBServer\FDB\Hum.DB)
覆盖备份文件并重启服务端
使用@moninfo命令验证怪物属性,@CheckItem检查装备数据完整性
行会数据恢复:
直接替换Mir200\Envir\Castle\SabukW.txt和GuildBase\Guilds目录文件,需重启 M2Server 生效
2. 数据库损坏修复
日志文件丢失:
停止 SQL Server 服务
复制.mdf文件至新目录
在 SSMS 中执行:
sql
CREATE DATABASE NewDB ON (FILENAME='D:\Backup\MudDB.mdf') FOR ATTACH_REBUILD_LOG
使用 DBCC CHECKDB 修复一致性错误
表结构异常:
通过 DBC2000 的 “修复数据库” 功能重建索引
对比备份文件与当前文件的二进制差异,使用 UltraEdit 修复损坏字段
3. 版本回退
引擎升级失败:
恢复!Setup.txt和!serverinfo.txt的历史备份
替换M2Server.exe等核心程序为旧版本
重新编译脚本文件(如 QFunction-0.txt)适配旧引擎接口
四、高级恢复策略
1. 跨平台迁移
DBC2000 转 SQL Server:
使用 Navicat 的数据传输功能导入表结构
编写 ETL 脚本转换数据格式(如将 Paradox 的 BCD 类型转为 SQL 的 DECIMAL)
配置!Setup.txt中的数据库连接参数:
ini
SQLDB=MudDB
SQLUSER=sa
SQLPASS=YourPassword
测试存储过程和触发器兼容性
2. 云备份方案
七牛云存储:
安装七牛云 CLI 工具
编写同步脚本:
bash
qshell qupload --bucket legend-backup --src D:\Backup\FDB\*.db
结合云函数实现异地容灾
3. 增量日志恢复(SQL Server)
事务日志应用:
还原全量备份:
sql
RESTORE DATABASE MudDB FROM DISK='D:\Backup\MudDB.bak' WITH NORECOVERY
按时间顺序还原事务日志:
sql
RESTORE LOG MudDB FROM DISK='D:\Backup\MudDB_Log_20250717_01.trn' WITH NORECOVERY
RESTORE LOG MudDB FROM DISK='D:\Backup\MudDB_Log_20250717_02.trn' WITH RECOVERY
验证数据一致性
五、常见问题排查
备份文件不可用:
检查压缩包 CRC 校验值是否匹配原文件
使用 DBC2000 的 “导入 / 导出” 功能尝试修复损坏的 DB 文件
恢复后数据缺失:
对比DBServer\Log\UpdateLog.txt中的操作记录
使用@RestoreItem命令手动回补丢失装备
行会数据异常:
检查SabukW.txt中的OWNERGUILD字段是否正确
修复GuildBase\Guilds目录下的成员列表文件权限
六、安全与合规
权限控制:
限制只有管理员可访问备份目录
在 SQL Server 中启用加密连接(TLS 1.2)
定期修改数据库账号密码(如每季度一次)
合规审计:
保留至少 6 个月的备份文件
记录每次备份 / 恢复操作的时间、人员、原因
使用 Elasticsearch+Kibana 构建日志审计系统
通过以上方法,可构建覆盖日常运维、灾难恢复、版本迁移的全生命周期数据管理体系。建议每月进行一次恢复演练,模拟服务器崩溃场景以验证备份策略的有效性,确保在突发情况下可快速恢复服务。实际操作中需根据引擎版本(如 GOM 2.0 与 3.0 的差异)和数据库类型(DBC2000/SQL Server)灵活调整步骤。
页:
[1]