How to build a disaster recovery (DR) plan for your MU server
Build a complete disaster recovery (DR) plan for your MU Online server, defining RTO and RPO, layered backups, a contingency environment, and failover procedures that are truly tested.
Every MU Online administrator who has been in the field long enough has a horror story: the VPS that died without warning, the database that corrupted after an update, the provider that suspended the account, the disk that failed and took down the backup that was also on it. In moments like these, w
Every MU Online administrator who has been in the field long enough has a horror story: the VPS that died without warning, the database that corrupted after an update, the provider that suspended the account, the disk that failed and took down the backup that was also on it. In moments like these, what separates a scare from the end of a project is a single thing: the existence, tested and within reach, of a disaster recovery plan. This tutorial shows how to build a real DR plan for an MU server — not a backup folder you pray you never have to open, but a procedure with clear goals, layered redundancy, a recovery path, and, most importantly, tests that prove it works. The figures, providers, and times cited are examples and vary by provider/version of your infrastructure.
Prerequisites
DR presupposes something to protect: a production server with data that hurts to lose. If you are still building the base, start with how to create an MU Online server and come back to harden it. For a serious DR plan you need:
- A complete inventory of what makes up the server: database, GameServer configuration files, site/panel, launcher, and the customizations that are not in the database (spots, drops, events edited in files).
- Backups already working — DR organizes and tests them, but they must exist. If you do not yet have a backup routine, that is the foundation and comes before everything else.
- A second storage location independent of the main server: cloud, another data center, a physical machine of your own. The golden rule is that the backup copy cannot die together with the original.
- A business decision about RTO and RPO (how much time offline and how much lost data you tolerate). Without it, you do not know how much to invest.
- Access to a replacement VPS or machine for the restore tests — restoring on top of the production server is forbidden.
Step 1 — Define RTO and RPO (the plan's goals)
Before any technology, define two goals, because they dictate everything else in the plan:
- RTO (Recovery Time Objective): the maximum acceptable time the server can be offline after a disaster. It answers "it went down — in how long does it need to come back?".
- RPO (Recovery Point Objective): the maximum acceptable data loss. It answers "how far back can the data that survives be?". An RPO of 6 hours means accepting the loss of up to 6 hours of the players' progress.
These are business decisions, not technical ones. The table below shows typical MU server profiles and plausible goals — all examples, they vary by provider/version and by the project's risk appetite:
| Server profile | Target RTO | Target RPO | Recommended DR strategy |
|---|---|---|---|
| Small, community of friends | 12-24 h | 24 h | Daily cloud backup + manual rebuild |
| Medium, with donations | 2-4 h | 1-6 h | Frequent backup + ready replacement VPS |
| Large, meaningful revenue | < 1 h | < 15 min | Standby server + database replication |
The RTO and RPO you choose determine the cost. Coming back in 15 minutes requires a second server running; coming back in a day requires only backups and a good procedure. There is no universal "right" DR — there is the DR appropriate to the goals the project can and wants to pay for.
Step 2 — Map the assets and classify by criticality
You cannot recover what you do not know exists. Take a complete inventory of the server and classify each asset by criticality and by its own RPO:
## Asset inventory (example — varies by provider/version)
CRITICAL (short RPO — losing it hurts a lot):
- SQL database (accounts, characters, inventory, guilds)
- GameServer configs NOT in the database:
Data\Monster\ (custom spots and drops)
Data\Item\ (edited item attributes)
.ini/.txt files for custom events
IMPORTANT (medium RPO — recreatable with effort):
- Website/web panel and its database
- Launcher and client patch files
- Automation scripts (D:\Scripts\)
RECREATABLE (long RPO — can be rebuilt from the installer):
- Emulator binaries (GameServer.exe, ConnectServer.exe...)
- Runtime, dependencies, base client
This classification is the heart of DR. The database is irreplaceable and needs the most frequent backup. The emulator binaries, on the other hand, you can re-obtain from the installer, so they do not need constant backup — but they do need to be documented for the rebuild. The classic mistake is treating everything the same: either you over-protect recreatable binaries, or (worse) you under-protect the file-based configs, thinking that "the database backup covers everything."
.txt/.ini files are the most forgotten DR asset. A backup of only the SQL database restores accounts and characters, but it does not recover months of fine-tuning drops and events. Include the entire Data\ folder in your backup.Step 3 — Build layered backups (the 3-2-1 rule)
With the assets mapped, structure the backups following the 3-2-1 rule, the industry standard for resilience:
- 3 copies of the data (the original + 2 backups).
- 2 different media/locations (e.g.: local disk + cloud).
- 1 copy offsite, immune to a physical disaster at the data center.
In practice, for an MU server:
## Backup layers (example — varies by provider/version)
Layer 1 — Local, fast (for common restores):
- SQL database backup every 6h on a disk separate from the database
- Retention: 3 days
Layer 2 — Cloud, offsite (for a VPS disaster):
- Daily upload of the backup to cloud storage
- Includes: database + Data\ folder + site configs
- Layered retention: 7 daily, 4 weekly, 6 monthly
Layer 3 — Cold copy, independent of the provider:
- Weekly copy to another provider or a physical machine of yours
- Protects against: the provider suspending/losing the account
Layer 3 is the one many people skip and is precisely the one that saves you in the "the provider disappeared with my account" scenario. Keeping everything with a single cloud provider means one account suspension wipes out original and backup at once. Distribute the risk.
Step 4 — Choose the contingency strategy according to the RTO
A backup answers "did the data survive?". Contingency answers "where does it come back to run?". The choice depends on the RTO defined in Step 1:
- Manual rebuild (loose RTO, hours to a day): you have a documented procedure to build a new server from scratch on a replacement VPS, restore the database and the configs, point the DNS, and go live. Cheaper, slower. It requires the procedure to be written and tested.
- Pre-configured replacement VPS (medium RTO, 1-4 h): a second VPS with the emulator already installed and configured, waiting. In a disaster, you just restore the most recent backup and go live. It costs an idle VPS, but it cuts hours off the RTO.
- Standby server with replication (short RTO, minutes): a second server that receives frequent copies of the database and can take over quickly. It is the most expensive and complex, justifiable only for large servers with revenue that downtime compromises.
For most medium-sized MU servers, option 2 is the cost-benefit sweet spot: a cheap replacement VPS, kept up to date, turns a full-day disaster into one of a few hours.
Step 5 — Write the failover procedure
The plan needs a step-by-step recovery procedure, written to be followed under stress. Example for the "main VPS died, recover on the replacement VPS" scenario:
### DR-01 — Full recovery on the replacement VPS
**Trigger:** main VPS inaccessible with no expectation of return.
**Goal:** RTO 3h, RPO 6h (example).
**Steps:**
1. Confirm the main one is really lost (not a passing outage).
Notify the community that there is emergency maintenance.
2. Access the replacement VPS (credentials in vault X).
3. Download the most recent backup of the database + Data\ folder from the cloud.
4. Restore the database on the replacement VPS's SQL (see DR-02).
5. Copy the restored Data\ folder to the GameServer.
6. Check the connection configs (internal IPs, ports).
7. Bring the components up in order: database > DataServer >
ConnectServer > JoinServer > GameServer.
8. Update the DNS/IP to point to the replacement VPS.
9. Test login with a test account; validate that the character loads.
10. Announce the return to the community.
**If the most recent backup fails:** use the previous one (loses more RPO).
**Escalate to:** the project owner if it exceeds 3h.
Step 1 (confirming it is a real disaster) avoids the costly mistake of starting a failover over a 10-minute outage that would have resolved on its own. Step 3 and step 4 are where most untested plans fail — which is why the next step is the most important of all.
Step 6 — Test the plan (the DR drill)
An untested DR plan is a document of hope. The test, the drill, is what reveals the holes before the disaster reveals them for you. Do it periodically:
- Isolated restore test (monthly): restore the most recent backup in a separate environment — never in production — and confirm that the database mounts, the characters load, and the configs are present. Time it.
- Full failover drill (quarterly): execute the entire DR-01 procedure on the replacement VPS, from scratch, following only the text of the plan. Time it and compare with the target RTO. Every hesitation is a hole to fix.
- Worst-case test (semiannual): simulate the "provider disappeared" scenario: recover using only backup layer 3, the independent cold copy. It is the test that validates whether you truly survive the loss of the entire provider.
Record the results of each drill: real time vs. target RTO, what failed, what was missing from the plan. DR is not a document you write once — it is a cycle of testing, finding holes, and fixing them, one that only matures with repetition.
Common errors and fixes
| Error | Consequence in a disaster | Fix |
|---|---|---|
| Backup on the same disk/server | Vanishes together with the original | Mandatory offsite layer (cloud + cold copy) |
| Only the database backup, without the Data\ folder | Recovers accounts but loses spots/drops/events | Include Data\ and configs in the backup |
| Plan never tested | You discover it does not restore at the worst moment | Periodic timed drills |
| Everything with a single provider | Account suspension wipes original and backup | Cold copy on an independent provider/location |
| RTO/RPO not defined | You invest too much or too little, with no criterion | Define business goals first |
| Credentials only in the admin's head | Nobody can recover without them | Password vault accessible to the team |
| Vague procedure | Failover becomes improvisation under stress | Numbered, tested steps with times |
| Backup with no integrity check | Restores a corrupted file | Validate with checksum/test restore |
The database-only backup error is especially cruel because it gives a false sense of safety: you have "the backup," you restore, the characters are there — and only then do you realize that months of drop and event configuration, which lived in files, are lost. A DR backup is of the entire server, not just the character table.
Release checklist
- RTO and RPO defined as a business decision and documented
- Complete asset inventory, classified by criticality
Data\folder and file-based configs included in the backup (not just the database)- Layered backups following the 3-2-1 rule
- At least one offsite copy, independent of the main provider
- Cold copy on a separate provider/location (the "provider disappeared" scenario)
- Contingency strategy chosen according to the RTO (rebuild, replacement, or standby)
- Failover procedure (DR-01) written, with numbered steps and times
- Database restore procedure (DR-02) written and validated
- Recovery credentials kept in a vault accessible to the team
- Isolated restore test executed and timed
- Full failover drill executed, compared to the target RTO
- Worst-case test (cold copy only) executed at least once
- Drill results recorded and holes fixed
- Recurring test calendar defined (monthly/quarterly/semiannual)
With a real, tested, layered DR plan, your MU server stops being one failed disk away from the end. The disaster that takes down unprepared servers becomes, for you, a timed procedure with a predictable outcome. It is the invisible work nobody praises while everything works — and the only one that matters on the day everything stops.
Frequently asked questions
What is a DR plan and why does an MU server need one?
DR (Disaster Recovery) is the set of procedures that brings the server back online after a serious failure: the VPS died, the data center caught fire, the database corrupted, or the provider disappeared with your account. An MU server needs DR because it concentrates irreplaceable data (characters, accounts, progress) and a fragile reputation: a server that stays offline for days and comes back having lost the players' progress rarely recovers. DR is the insurance policy you hope never to use, but that saves the project when the improbable happens.
What is the difference between a backup and a DR plan?
A backup is a piece of DR, not the whole of DR. A backup only answers where the data is; the DR plan answers how to turn that data into a working server again, in how much time, on which machine, with which steps, and who runs it. Having a backup without a DR plan is having the parts of a car without the assembly manual: on disaster day, you discover you do not know how to restore, that the backup was incomplete, or that what should take 1 hour takes 8. The plan is what gives recovery its predictability.
What are RTO and RPO and how do I define them for my server?
RTO (Recovery Time Objective) is how long you can tolerate being offline: the server went down, within how many hours does it need to come back? RPO (Recovery Point Objective) is how much data you can tolerate losing: if the last backup was 6 hours ago, do you accept losing 6 hours of progress? Defining both is a business decision, not a technical one. A large server with donations may require an RTO of 1 hour and an RPO of 15 minutes; a small server for friends can tolerate an RTO of a day. The RTO and RPO you want define how much you need to invest in DR infrastructure.
Do I need a second server running all the time?
It depends on the RTO you defined. For a low RTO (back in minutes), yes: a contingency server that is ready to go (standby) and takes over when the main one falls. For a looser RTO (a few hours), no: it is enough to have the backups and a tested procedure to build a new server from scratch on a replacement VPS. Keeping a second server running costs money, so the decision is economic: the cost of the standby against the cost of being offline for hours. Start with what your budget and your RTO justify.
What good is a DR plan if I have never tested it?
Almost none, and that is the hardest lesson of DR. An untested plan is full of wrong assumptions: the backup that does not restore, the step that was missing, the password nobody has, the time that was triple what you expected. The test (the DR drill) is what turns the plan from fiction into a tool. Run periodic simulations restoring in a separate environment and timing yourself. It is uncomfortable to discover the holes in a test, but infinitely better than discovering them in the real disaster, with the server on the floor and the players walking away.