How to back up your MU Online server database
Complete guide to protecting your MU Online server data with SQL Server backups: what to back up and why, manual backup via SSMS step by step, automated backup with SQL Server Agent jobs, T-SQL scripts for scheduled backups, backup rotation strategy (keeping the last 7 days), how to copy backups off-server to another disk or cloud storage, how to restore from a .bak file when disaster strikes, testing your restore procedure before you need it, and choosing the right backup frequency for your server's activity level.
A server without backups is a disaster waiting to happen. Disk failure, ransomware, an accidental SQL DROP, a bad configuration change — any of these can wipe months of player progress in seconds. Backups are the only thing standing between a catastrophe and a quick recovery.
A server without backups is a disaster waiting to happen. Disk failure, ransomware, an accidental SQL DROP, a bad configuration change — any of these can wipe months of player progress in seconds. Backups are the only thing standing between a catastrophe and a quick recovery.
What needs to be backed up
MU ONLINE SERVER DATA — WHAT TO BACK UP:
CRITICAL (must back up daily):
→ MuOnline database — accounts, characters, items, Zen, stats, skill trees
→ EventMU / RankingMU database — rankings, kill counts, event history
→ LogServer database — login logs, transaction history (useful for dispute resolution)
IMPORTANT (back up when changed):
→ MuServer configuration files (.ini files for all server components)
→ Custom event files (maps, quests, NPC configs)
→ Website configuration files (db.php, config.php — exclude passwords from VCS)
→ GameServer.exe and DataServer.exe (if you've applied patches or modifications)
NOT CRITICAL (recoverable separately):
→ MuServer binary files (re-download from your distribution)
→ Client files (redistribute to players)
Manual backup via SSMS
STEP-BY-STEP MANUAL BACKUP:
1. Open SSMS → connect to your SQL Server
2. Expand "Databases" in the left panel
3. Right-click "MuOnline" → Tasks → Back Up...
4. In the backup dialog:
→ Backup type: Full
→ Backup component: Database
→ Destination: click "Add" → choose a path like D:\backups\MuOnline.bak
5. Click OK — wait for completion (usually 30 seconds to 2 minutes)
6. Repeat for EventMU, RankingMU, LogServer
VERIFY THE BACKUP FILE:
→ Check the file exists and has a reasonable size (not 0 KB)
→ A MuOnline.bak file that's too small is a red flag — check for errors
Automated backup with SQL Server Agent
CREATE AUTOMATED DAILY BACKUP JOB:
ENABLE SQL SERVER AGENT:
1. In SSMS: expand "SQL Server Agent" in the left panel
2. If it says "SQL Server Agent (Agent XPs disabled)":
→ Right-click → Start
→ If it won't start: open "SQL Server Configuration Manager"
→ "SQL Server Services" → right-click "SQL Server Agent" → Start
CREATE THE JOB:
1. Right-click "Jobs" under SQL Server Agent → New Job
2. Name: "MuOnline Daily Backup"
3. Go to "Steps" tab → New:
→ Step name: "Backup All MU Databases"
→ Type: Transact-SQL Script (T-SQL)
→ Command: (paste the T-SQL from the next section)
4. Go to "Schedules" tab → New:
→ Name: "Daily 3 AM"
→ Frequency: Daily
→ Time: 03:00:00
5. Click OK to save the job
T-SQL backup script
-- FULL BACKUP WITH TIMESTAMP IN FILENAME
-- Run this in SSMS or use as an SQL Server Agent Job step
DECLARE @BackupDate VARCHAR(20)
SET @BackupDate = CONVERT(VARCHAR, GETDATE(), 112) -- yyyymmdd format
-- Backup MuOnline
BACKUP DATABASE MuOnline
TO DISK = 'D:\backups\MuOnline_' + @BackupDate + '.bak'
WITH FORMAT, INIT, COMPRESSION, STATS = 10;
-- Backup EventMU
BACKUP DATABASE EventMU
TO DISK = 'D:\backups\EventMU_' + @BackupDate + '.bak'
WITH FORMAT, INIT, COMPRESSION, STATS = 10;
-- Backup RankingMU (if it exists)
BACKUP DATABASE RankingMU
TO DISK = 'D:\backups\RankingMU_' + @BackupDate + '.bak'
WITH FORMAT, INIT, COMPRESSION, STATS = 10;
PRINT 'All MU databases backed up successfully.'
COMPRESSION option reduces backup file size by 50-80% with minimal CPU overhead. Always use it. The STATS = 10 prints progress every 10% so you can monitor large backups.Backup rotation — keeping last 7 days
DELETE OLD BACKUPS AUTOMATICALLY (PowerShell script):
Create file: D:\scripts\CleanOldBackups.ps1
$BackupPath = "D:\backups"
$DaysToKeep = 7
$CutoffDate = (Get-Date).AddDays(-$DaysToKeep)
Get-ChildItem -Path $BackupPath -Filter "*.bak" |
Where-Object { $_.LastWriteTime -lt $CutoffDate } |
Remove-Item -Force
Write-Host "Old backups removed. Keeping last $DaysToKeep days."
SCHEDULE THE CLEANUP SCRIPT:
→ Windows Task Scheduler → Create Basic Task
→ Trigger: Daily at 04:00 (after the backup job)
→ Action: PowerShell.exe -File "D:\scripts\CleanOldBackups.ps1"
DIRECTORY LAYOUT (example):
D:\backups\
MuOnline_20260701.bak (yesterday — keep)
MuOnline_20260702.bak (today — keep)
EventMU_20260701.bak
EventMU_20260702.bak
...
Copying backups off-server
OFF-SERVER COPY — THE CRITICAL STEP:
THE PROBLEM:
→ If the server disk fails, any backup stored ONLY on that disk is gone
→ Local backup = same disk = not a backup for disk failure scenarios
OPTIONS FOR OFF-SERVER COPY:
OPTION 1 — SECOND DISK/VOLUME:
→ If your VPS has multiple disks: back up to the second disk (D: if C: has the system)
→ Gives protection against one disk failure but not server-level failure
OPTION 2 — FTP/SFTP TO ANOTHER SERVER:
→ Use WinSCP (Windows) to copy .bak files to a separate server after backup
→ Can be scripted with WinSCP's built-in scripting engine
OPTION 3 — CLOUD STORAGE (recommended):
→ Google Drive (free up to 15 GB) — rclone can mount it as a Windows drive
→ Backblaze B2 — very cheap ($0.006/GB/month), reliable
→ Amazon S3 — enterprise-grade, more expensive
OPTION 4 — COPY TO YOUR LOCAL PC:
→ Simple FTP/SFTP download from the VPS to your home PC after backup
→ Use FileZilla on a schedule or manually after each backup run
Restoring from backup
RESTORE PROCEDURE:
STEP 1 — STOP THE MUSERVER:
→ Stop GameServer, DataServer, JoinServer, ConnectServer, EventServer
→ Do NOT restore while the server is reading/writing the database
STEP 2 — RESTORE IN SSMS:
1. Right-click the database → Tasks → Restore → Database
2. Source: Device → select your .bak file
3. In "Options" tab: check "Overwrite the existing database (WITH REPLACE)"
4. Click OK → wait for completion (usually 1-5 minutes)
STEP 3 — VALIDATE:
→ Open SSMS → browse some tables (e.g., Character table in MuOnline)
→ Check if your expected data is there
→ Start the MuServer services
→ Test with a player login
ALTERNATIVE — T-SQL RESTORE:
USE master;
RESTORE DATABASE MuOnline
FROM DISK = 'D:\backups\MuOnline_20260701.bak'
WITH REPLACE, STATS = 10;
Testing your restore
MONTHLY RESTORE TEST — DO THIS:
WHY TEST?
→ A backup that's never been tested may be: empty, corrupted, from wrong database,
or using settings incompatible with your current SQL Server version
HOW TO TEST:
1. Restore the most recent backup to a different database name:
RESTORE DATABASE MuOnline_TEST
FROM DISK = 'D:\backups\MuOnline_today.bak'
WITH MOVE 'MuOnline_Data' TO 'D:\data\MuOnline_TEST.mdf',
MOVE 'MuOnline_Log' TO 'D:\data\MuOnline_TEST.ldf',
REPLACE, STATS = 10;
2. Browse the restored database — check Character count, Item counts
3. If everything looks right: your backup is valid
4. Drop the test database: DROP DATABASE MuOnline_TEST;
WHAT COUNTS AS A VALID BACKUP:
→ Characters exist with correct names and levels
→ Inventory items are present
→ Account table shows the right number of accounts
→ No SQL errors during restore
Pair this guide with the SQL Server configuration tutorial (for setting up the SQL Server instance where backups originate), the database migration tutorial (for moving backups between servers when upgrading), and the VPS connection tutorial (for setting up file transfers to move backups off the server).
Frequently asked questions
How often should I back up?
For active servers with daily players: at minimum once per day, ideally twice (e.g., 3 AM and 3 PM). The frequency determines how much progress players can lose if a restore is needed. A daily backup means you might lose up to 24 hours of characters, items, and kills. For servers with constant player activity, every 6 hours is not overkill.
Where should I store the backup files?
Never only on the same server disk. If the disk fails, the backup dies with the data. Minimum: a second disk on the same server. Better: a second disk plus a copy in cloud storage (Google Drive, Backblaze, Dropbox). Best: second disk + cloud + a backup of last week on a local PC. The 3-2-1 rule: 3 copies, 2 different media, 1 offsite.
How do I know if my backup is actually working?
The only way to confirm a backup is valid is to restore it. Many admins discover their backup was corrupted or empty when they need it. Schedule a test restore every month: spin up a test SQL Server instance and restore the latest backup. If characters and items load correctly, the backup is valid.
Can I back up just one database instead of all of them?
Yes, and it's the recommended approach. Back up each database separately: MuOnline, EventMU, RankingMU, LogServer. The MuOnline database is the most critical (accounts, characters, items). The others are important but recoverable if lost. Separate backups give you more flexibility in restore scenarios.