How to Configure Windows Server 2019 VPS for MU Online
Complete step-by-step guide to set up a Windows Server 2019 VPS for a private MU Online server, covering SQL Server, firewall rules, and service configuration.
Introduction
Setting up a Windows Server 2019 VPS to run a private MU Online server requires attention to several details: SQL Server installation, firewall configuration, Windows service tuning, and organizing the server's directory structure. This guide covers the complete process — from the VPS initial state to a server ready to accept players.
Prerequisites
- VPS with Windows Server 2019 (minimum 4 GB RAM, 2 vCPUs, 60 GB SSD)
- RDP access to the server with Administrator user
- MU server files (GameServer, ConnectServer, DataServer, EventServer)
- SQL Server 2017 or 2019 installer
Part 1 — Initial Windows Server 2019 Setup
Step 1: First access and system configuration
Connect to the VPS via Remote Desktop (RDP) using the public IP, Administrator user, and the provider's password. Open PowerShell as Administrator and rename the server:
# Check Windows build
winver
# Rename for easy identification in logs
Rename-Computer -NewName "MUSERVER-PROD" -Restart
After the reboot, set the server's time zone to avoid timestamp issues in logs:
# Example for UTC-5 (Eastern Standard Time)
Set-TimeZone -Id "Eastern Standard Time"
Step 2: Disable unnecessary services
Reduce resource consumption by disabling services not needed on a game server:
# Windows Search — wastes unnecessary disk I/O
Set-Service -Name "WSearch" -StartupType Disabled
Stop-Service -Name "WSearch" -Force
# SysMain (Superfetch) — useless on a dedicated server
Set-Service -Name "SysMain" -StartupType Disabled
Stop-Service -Name "SysMain" -Force
# Print Spooler — not needed on a VPS
Set-Service -Name "Spooler" -StartupType Disabled
Stop-Service -Name "Spooler" -Force
Step 3: Add Windows Defender exclusions
Prevent false positives without compromising security:
Add-MpPreference -ExclusionPath "C:\MuServer"
Add-MpPreference -ExclusionProcess "GameServer.exe"
Add-MpPreference -ExclusionProcess "ConnectServer.exe"
Add-MpPreference -ExclusionProcess "DataServer.exe"
Step 4: Install Visual C++ Redistributable
Most Season 6 MuServer binaries require specific runtimes. Install in this order:
- Visual C++ 2010 Redistributable (x86)
- Visual C++ 2012 Redistributable (x86 and x64)
- Visual C++ 2015-2022 Redistributable (x86 and x64)
Verify the installations under Control Panel → Programs and Features before proceeding. If GameServer closes immediately on launch, a missing runtime is the most common cause.
Part 2 — SQL Server Installation and Configuration
Step 5: Install SQL Server 2019
Run the SQL Server 2019 installer and select Custom installation. In the feature selection, check only:
- Database Engine Services
- SQL Server Replication (optional, required by some MU packages)
Configure the instance as Default Instance (name: MSSQLSERVER) so that MuServer .ini files can connect without specifying an instance name.
After installation, open SQL Server Configuration Manager and:
- Expand SQL Server Network Configuration
- Click Protocols for MSSQLSERVER
- Enable TCP/IP (right-click → Enable)
- Double-click TCP/IP → IP Addresses tab → scroll to IPAll → set TCP Port to
1433 - Restart the SQL Server service via
services.msc
Step 6: Configure mixed authentication and memory cap
In SQL Server Management Studio (SSMS), connect to the local server and configure:
Mixed authentication (required for connection string login):
- Right-click the instance → Properties
- Security tab → select SQL Server and Windows Authentication mode
- Click OK and restart the SQL Server service
Memory cap (prevents SQL from consuming all available RAM):
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
-- For a 4 GB VPS: cap SQL Server at 2 GB
EXEC sp_configure 'max server memory', 2048;
RECONFIGURE;
Step 7: Create the database and a dedicated user
-- Create the main database with the correct collation for MU Online
CREATE DATABASE MuOnline
COLLATE Latin1_General_CI_AS;
GO
-- Create a separate log database (recommended)
CREATE DATABASE MuOnlineLog
COLLATE Latin1_General_CI_AS;
GO
-- Create a dedicated login for the GameServer
CREATE LOGIN muserver_user WITH PASSWORD = 'YourStrongPassword@2024',
DEFAULT_DATABASE = MuOnline,
CHECK_EXPIRATION = OFF,
CHECK_POLICY = OFF;
GO
-- Map the login to the database and grant permissions
USE MuOnline;
GO
CREATE USER muserver_user FOR LOGIN muserver_user;
EXEC sp_addrolemember 'db_owner', 'muserver_user';
GO
Step 8: Restore the MuServer database
With the .bak file available at C:\MuServer\backup\, restore it via SSMS:
USE master;
GO
RESTORE DATABASE MuOnline
FROM DISK = 'C:\MuServer\backup\MuOnline.bak'
WITH MOVE 'MuOnline' TO 'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\MuOnline.mdf',
MOVE 'MuOnline_log' TO 'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\MuOnline_ldf.ldf',
REPLACE, STATS = 10;
GO
MSSQL15.MSSQLSERVER is for SQL Server 2019. For SQL Server 2017, use MSSQL14.MSSQLSERVER. Verify the actual path under C:\Program Files\Microsoft SQL Server\.Part 3 — MuServer File Configuration
Step 9: Organize the directory structure
Create the standard structure under C:\MuServer\:
C:\MuServer\
├── ConnectServer\
│ └── ConnectServer.exe
├── DataServer\
│ └── DataServer.exe
├── GameServer\
│ ├── Data\
│ │ ├── Events\
│ │ ├── Maps\
│ │ └── Monster\
│ ├── Logs\
│ └── GameServer.exe
├── EventServer\
│ └── EventServer.exe
└── StartAll.bat
Step 10: Configure the connection string in GameServer
Edit GameServer\Data\DBConfig.ini (or DBConnectConfig.ini depending on your package version):
[DBCONFIG]
DBServer=127.0.0.1
DBPort=1433
DBName=MuOnline
DBUser=muserver_user
DBPass=YourStrongPassword@2024
Also edit DataServer\DSConfig.ini:
[DataServer]
ServerCode=0
DB_Ip=127.0.0.1
DB_Port=1433
DB_Name=MuOnline
DB_User=muserver_user
DB_Pass=YourStrongPassword@2024
Step 11: Configure the ConnectServer
Edit ConnectServer\ConnectServerInfo.ini:
[ConnectServer]
Port=44405
MaxConnectServer=2
ServerCodeStart=0
ServerCodeEnd=10
[ServerInfo0]
ServerCode=0
ServerName=Lorencia
GameServerIPAddress=YOUR_PUBLIC_IP
GameServerPort=55901
Replace YOUR_PUBLIC_IP with the VPS's external IP address. The MU client uses this IP to connect directly to the GameServer — never use 127.0.0.1 here.
Part 4 — Windows Firewall Configuration
Step 12: Create inbound firewall rules via PowerShell
Run the full block in PowerShell as Administrator:
# ConnectServer
New-NetFirewallRule -DisplayName "MU-ConnectServer" -Direction Inbound -Protocol TCP -LocalPort 44405 -Action Allow
# GameServer — ports per map instance
New-NetFirewallRule -DisplayName "MU-GameServer" -Direction Inbound -Protocol TCP -LocalPort 55901-55910 -Action Allow
# DataServer
New-NetFirewallRule -DisplayName "MU-DataServer" -Direction Inbound -Protocol TCP -LocalPort 55960 -Action Allow
# Web panel (if applicable)
New-NetFirewallRule -DisplayName "MU-WebPanel" -Direction Inbound -Protocol TCP -LocalPort 80 -Action Allow
# RDP — confirm it is open
New-NetFirewallRule -DisplayName "RDP-Custom" -Direction Inbound -Protocol TCP -LocalPort 3389 -Action Allow
Part 5 — Startup and Verification
Step 13: Correct service startup order script
The startup order of components is critical. Create C:\MuServer\StartAll.bat:
@echo off
echo Starting DataServer...
start "" "C:\MuServer\DataServer\DataServer.exe"
timeout /t 5 /nobreak
echo Starting EventServer...
start "" "C:\MuServer\EventServer\EventServer.exe"
timeout /t 3 /nobreak
echo Starting ConnectServer...
start "" "C:\MuServer\ConnectServer\ConnectServer.exe"
timeout /t 3 /nobreak
echo Starting GameServer...
start "" "C:\MuServer\GameServer\GameServer.exe"
echo.
echo All services started.
pause
Always run as Administrator (right-click → Run as administrator).
Step 14: Verify component connectivity
Confirm that the ports are listening:
# Check all MU ports at once
netstat -ano | findstr ":44405 :55901 :55960"
In SSMS, confirm the GameServer connected to the database:
USE MuOnline;
GO
-- Last recorded connections
SELECT TOP 10 memb___id, ConnectTM, DisConnectTM
FROM MEMB_INFO
ORDER BY ConnectTM DESC;
GO
-- Experience configuration (confirms database integrity)
SELECT * FROM T_CommonServerInfo;
GO
Step 15: Create a test account via SQL
To verify the full flow without a web panel:
USE MuOnline;
GO
INSERT INTO MEMB_INFO (
memb___id, memb__pwd, memb_name, sno__numb,
post_code, addr_info, addr_deta, tel__numb,
email_info, mail_chek, bloc_code, ctl1_code
)
VALUES (
'testuser',
CONVERT(VARCHAR(10), HASHBYTES('MD5', 'pass123'), 2),
'Test User', '00000000000',
'00000', 'Address', 'Detail', '00000000000',
'[email protected]', 'N', 0, 0
);
GO
T_CommonServerInfo table returns an error, the SQL table creation script was not executed correctly. Review the logs at GameServer\Logs\GameServer.log to identify specific connection errors.Common Troubleshooting
GameServer closes immediately on launch
Diagnostic sequence:
- Is SQL Server running? →
services.msc→ SQL Server (MSSQLSERVER) - Is TCP/IP enabled in SQL Server Configuration Manager?
- Are the credentials in
DBConfig.inicorrect? - Is mixed authentication enabled in the SQL Server properties?
- Is the Visual C++ Redistributable installed (x86 version)?
ConnectServer not accepting external connections
# Check if the port is listening locally
netstat -ano | findstr :44405
# If it does not appear: ConnectServer did not start — check its logs
# If it appears but external access fails: check the VPS provider's external firewall panel
Many VPS providers have their own firewall in the control panel, separate from the Windows Firewall. Check and open the ports there as well.
High CPU usage by SQL Server
-- Identify the heaviest queries
SELECT TOP 10
qs.total_worker_time / qs.execution_count AS avg_cpu_us,
qs.execution_count,
SUBSTRING(qt.text, (qs.statement_start_offset/2)+1,
((CASE qs.statement_end_offset
WHEN -1 THEN DATALENGTH(qt.text)
ELSE qs.statement_end_offset END
- qs.statement_start_offset)/2)+1) AS query_text
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) qt
ORDER BY avg_cpu_us DESC;
Conclusion
With the VPS configured following these steps, your MU Online server will have a solid foundation: SQL Server optimized with a memory cap, firewall configured without exposing the database port, Windows services tuned for performance, and components starting in the correct order. The next step is configuring server events (Blood Castle, Devil Square, Chaos Castle) and setting up a web administration panel.
Perguntas frequentes
Which SQL Server version should I use with Windows Server 2019?
SQL Server 2017 or 2019 are the most compatible with Windows Server 2019. Avoid SQL Server 2000 in this environment — it has no official support. Use SQL Server 2017 Express (free) for servers with databases under 10 GB.
Which ports do I need to open on the VPS firewall?
The essential ports are: 44405 (ConnectServer), 55901-55910 (GameServer per map instance), 55960 (DataServer), 1433 (SQL Server — local only), 80 (web panel), and 3389 (RDP). Never expose port 1433 externally if the database and GameServer are on the same machine.
The MU server crashes a few minutes after starting on the VPS — what should I check?
First check the log at GameServer\\Logs\\GameServer.log. Common causes: insufficient RAM (minimum 4 GB for Season 6), SQL Server without a memory cap configured, or antivirus blocking the executables. Set SQL Server to use at most 2 GB of RAM if the VPS has 4 GB total.
How do I prevent Windows Server 2019 from automatically rebooting after updates?
Open gpedit.msc → Computer Configuration → Administrative Templates → Windows Components → Windows Update. Set 'Configure Automatic Updates' to 'Notify for download and notify for install' (option 2). This prevents automatic reboots without your approval.