Cómo Actualizar la Versión del MuServer sin Perder Datos
Guía completa para actualizar tu MuServer a una versión más reciente conservando todas las cuentas, personajes e ítems de los jugadores de forma segura.
Actualizar el MuServer de una versión a otra es una de las operaciones más arriesgadas en la administración de un servidor privado de MU Online. Realizada sin planificación, resulta en pérdida permanente de datos de los jugadores. Realizada correctamente, es un proceso controlado que generalmente requiere entre 2 y 4 horas de tiempo de inactividad planificado.
Esta guía cubre la migración entre versiones compatibles — por ejemplo, de Season 6 Episode 1 a Season 6 Episode 3, o de Season 9 a Season 12. Las migraciones entre seasons muy distantes (ej.: S6 a S13) requieren pasos intermedios adicionales no cubiertos aquí y deben realizarse por etapas.
Antes de Comenzar: Evaluando la Compatibilidad
No toda actualización de MuServer es directa. Las tablas de la base de datos cambian entre versiones, y los archivos de configuración incorporan nuevas claves obligatorias.
Identificando tu versión actual
Abre GameServer/GameServer.ini y localiza:
[Version]
ServerVersion = 1.04.0
GameVersion = 0.99.60T
Compara con la versión de destino. Si GameVersion cambia de forma significativa, habrá cambios en el schema de la base de datos que deben aplicarse antes de iniciar los nuevos binarios.
Identificando los scripts de migración disponibles
Todo paquete de MuServer incluye una carpeta DBUpdate/ o SQL/ con scripts de migración numerados. Antes de continuar, lista esos scripts:
DBUpdate/
001_AddColumnResetCount.sql
002_CreateTableEventRanking.sql
003_AlterTableCharacter.sql
004_InsertDefaultEventSchedule.sql
Si el paquete no incluye scripts SQL, deberás comparar los schemas manualmente en SQL Server Management Studio (SSMS) — compara sys.columns en la base actual contra una base creada desde cero con la nueva versión.
Paso 1: Backup Completo — Sin Excepciones
Ejecuta en SSMS antes de cualquier otra acción:
-- Backup completo con timestamp automático
DECLARE @BackupPath NVARCHAR(500)
SET @BackupPath = 'C:\Backups\MuOnline_pre_update_' +
REPLACE(REPLACE(CONVERT(VARCHAR, GETDATE(), 120), ':', '-'), ' ', '_') + '.bak'
BACKUP DATABASE MuOnline
TO DISK = @BackupPath
WITH FORMAT, INIT, COMPRESSION,
NAME = 'MuOnline Full Backup Pre-Actualizacion',
STATS = 10;
PRINT 'Backup guardado en: ' + @BackupPath
Después del backup, verifica que el archivo no esté corrupto:
RESTORE VERIFYONLY FROM DISK = 'C:\Backups\MuOnline_pre_update_2026-07-03_22-00-00.bak';
-- Resultado esperado: "The backup set on file 1 is valid."
RESTORE VERIFYONLY devuelve un error, el backup está corrupto. No continúes — investiga el problema de espacio en disco o permisos antes de seguir adelante.También haz backup de los archivos de configuración:
xcopy /E /I /Y "C:\MuServer\GameServer\Data" "C:\Backups\GameServer_Data_backup"
xcopy /E /I /Y "C:\MuServer\ConnectServer" "C:\Backups\ConnectServer_backup"
xcopy /E /I /Y "C:\MuServer\DataServer" "C:\Backups\DataServer_backup"
xcopy /E /I /Y "C:\MuServer\EventServer" "C:\Backups\EventServer_backup"
Paso 2: Detener Todos los Servicios en el Orden Correcto
Detén en la siguiente secuencia para evitar escrituras de datos corruptos:
- Cierra el panel de administración web (si está en ejecución)
- Termina
GameServer.exe— espera a que el proceso desaparezca completamente del Administrador de tareas - Termina
EventServer.exe - Termina
DataServer.exe - Termina
ConnectServer.exe
net stop MuGameServer, net stop MuDataServer, net stop MuConnectServer. Ajusta los nombres de servicio según tu configuración. Verifica en services.msc que todos muestren estado "Detenido" antes de continuar.Paso 3: Crear Base de Datos de Prueba y Validar Scripts SQL
Nunca apliques scripts de migración directamente en la base de datos de producción sin probarlos primero. Restaura una copia de prueba:
RESTORE DATABASE MuOnline_Prueba
FROM DISK = 'C:\Backups\MuOnline_pre_update_2026-07-03_22-00-00.bak'
WITH MOVE 'MuOnline' TO 'C:\SQLData\MuOnline_Prueba.mdf',
MOVE 'MuOnline_log' TO 'C:\SQLData\MuOnline_Prueba_log.ldf',
REPLACE, STATS = 10;
Con la base de prueba lista, ejecuta los scripts de migración en orden numérico. Script típico para agregar una nueva columna:
USE MuOnline_Prueba;
GO
-- 001_AddColumnResetCount.sql
IF NOT EXISTS (
SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'Character' AND COLUMN_NAME = 'ResetCount'
)
BEGIN
ALTER TABLE dbo.Character ADD ResetCount SMALLINT NOT NULL DEFAULT 0;
PRINT 'OK: Columna ResetCount agregada.';
END
ELSE
PRINT 'SKIP: Columna ResetCount ya existe.';
GO
IF NOT EXISTS antes de ALTER TABLE ADD COLUMN e IF OBJECT_ID IS NULL antes de CREATE TABLE. Los scripts idempotentes pueden ejecutarse nuevamente sin romper la base de datos, lo cual es esencial al recuperarse de errores parciales.Ejemplo de script para crear una nueva tabla de ranking de eventos:
-- 002_CreateTableEventRanking.sql
USE MuOnline_Prueba;
GO
IF OBJECT_ID('dbo.EventRanking', 'U') IS NULL
BEGIN
CREATE TABLE dbo.EventRanking (
RankID INT IDENTITY(1,1) PRIMARY KEY,
CharName VARCHAR(10) NOT NULL,
EventType TINYINT NOT NULL, -- 1=BloodCastle, 2=DevilSquare, 3=ChaosC
Score INT NOT NULL DEFAULT 0,
RankDate DATETIME NOT NULL DEFAULT GETDATE(),
ServerCode TINYINT NOT NULL DEFAULT 0
);
PRINT 'OK: Tabla EventRanking creada.';
END
ELSE
PRINT 'SKIP: Tabla EventRanking ya existe.';
GO
Tras ejecutar cada script, revisa la pestaña "Messages" en SSMS. Cualquier línea con Msg seguido de un número de error debe investigarse antes de continuar.
Paso 4: Reemplazar los Binarios del Servidor
Con los scripts validados en la base de prueba, reemplaza los ejecutables. Estructura de destino:
C:\MuServer\
GameServer\
GameServer.exe <- reemplaza con el nuevo
GameServer.ini <- MERGE (compara y transfiere tus valores)
Data\
Monster\ <- reemplaza todo el contenido con la nueva versión
Events\ <- reemplaza todo el contenido con la nueva versión
Maps\ <- reemplaza todo el contenido con la nueva versión
ConnectServer\
ConnectServer.exe <- reemplaza con el nuevo
ConnectServer.ini <- MERGE (verifica claves nuevas)
DataServer\
DataServer.exe <- reemplaza con el nuevo
DataServer.ini <- MERGE (confirma string de conexión)
EventServer\
EventServer.exe <- reemplaza con el nuevo
.ini de configuración sin comparar las diferencias. Usa WinMerge (herramienta gratuita) para hacer diff entre el .ini antiguo (del backup) y el nuevo: copia las claves nuevas a tu archivo existente manteniendo tus valores personalizados de IP, puerto, nombre del servidor y tasas.Diff típico en GameServer.ini al actualizar a Season 9+:
; Clave NUEVA en la versión de destino — agrega a tu GameServer.ini
[RefinementSystem]
Enable = 1
MaxRefinementLevel = 15
RefinementFailRate = 30
; Clave EXISTENTE — mantén tu valor actual
[GameServerInfo]
ServerCode = 0
MaxUser = 300
ServerName = Tu Servidor MU
Paso 5: Ajustar el Nivel de Compatibilidad del Banco (si es necesario)
Si la nueva versión del MuServer requiere un nivel de compatibilidad específico de SQL Server:
-- Verificar nivel actual
SELECT name, compatibility_level FROM sys.databases WHERE name = 'MuOnline';
-- SQL Server 2008 / Season 6 (nivel 100)
ALTER DATABASE MuOnline SET COMPATIBILITY_LEVEL = 100;
-- SQL Server 2012 / Seasons más nuevos (nivel 110)
-- ALTER DATABASE MuOnline SET COMPATIBILITY_LEVEL = 110;
-- SQL Server 2017/2019 (nivel 140)
-- ALTER DATABASE MuOnline SET COMPATIBILITY_LEVEL = 140;
Paso 6: Aplicar la Migración en la Base de Datos de Producción
Tras la validación completa en la base de prueba, aplica los mismos scripts en la base real:
USE MuOnline;
GO
-- Ejecuta los scripts en orden:
-- 001_AddColumnResetCount.sql
-- 002_CreateTableEventRanking.sql
-- 003_AlterTableCharacter.sql
-- (etc.)
Paso 7: Iniciar Servicios y Validar
Inicia en el orden correcto:
ConnectServer.exeDataServer.exeEventServer.exeGameServer.exe
Monitorea los logs inmediatamente tras cada inicio:
GameServer\Log\GameServer_YYYYMMDD.log
DataServer\Log\DataServer_YYYYMMDD.log
Errores más comunes y sus causas:
[ERROR] Table 'Character' column 'ResetCount' not found
→ El script 001 no fue aplicado en la base de producción. Ejecútalo en MuOnline.
[ERROR] Could not connect to DataServer on 127.0.0.1:55900
→ DataServer no inició o cambió de puerto. Verifica DataServer.ini y reinicia.
[ERROR] Map file not found: Data/Maps/Devias.att
→ Los archivos de mapa de la nueva versión no fueron copiados. Repite el Paso 4.
Ejecuta queries de validación post-migración:
USE MuOnline;
-- Conteo de personajes (compara con el número previo a la migración)
SELECT COUNT(*) AS TotalPersonajes FROM Character;
-- Verificar integridad de ítems
SELECT COUNT(*) AS PersonajesSinItems
FROM Character
WHERE Items IS NULL OR DATALENGTH(Items) = 0;
-- Resultado esperado: 0
-- Verificar guilds intactas
SELECT COUNT(*) AS TotalGuilds FROM Guild;
-- Limpiar sesiones bloqueadas (común tras reinicio)
UPDATE MEMB_STAT SET ConnectStat = 0, ServerName = '' WHERE ConnectStat = 1;
Verificación de Eventos Tras la Migración
Si los eventos no se están activando en los horarios correctos:
USE MuOnline;
-- Verificar los horarios de eventos configurados en la base de datos
SELECT * FROM EventSchedule ORDER BY EventType;
-- Reconfigurar horarios de Blood Castle (EventType = 1)
UPDATE EventSchedule
SET StartTime1 = '09:00', StartTime2 = '13:00',
StartTime3 = '17:00', StartTime4 = '21:00',
Duration = 60
WHERE EventType = 1;
-- Reconfigurar horarios de Devil Square (EventType = 2)
UPDATE EventSchedule
SET StartTime1 = '10:00', StartTime2 = '14:00',
StartTime3 = '18:00', StartTime4 = '22:00',
Duration = 30
WHERE EventType = 2;
Si los eventos están configurados via archivos .ini en lugar de la base de datos (común en builds más antiguas de Season 6):
; GameServer\Data\Events\BloodCastle.ini
[BloodCastle]
Enable = 1
Open_Time1 = 09:00
Close_Time1 = 10:00
Open_Time2 = 13:00
Close_Time2 = 14:00
Open_Time3 = 17:00
Close_Time3 = 18:00
Open_Time4 = 21:00
Close_Time4 = 22:00
MaxUser_BC1 = 10
MaxUser_BC7 = 10
Una actualización exitosa resulta en un servidor ejecutando la nueva versión con todos los datos de los jugadores intactos. Reserva al menos 30 minutos de pruebas con cuenta GM antes de anunciar la reapertura — los problemas descubiertos con el servidor lleno son exponencialmente más difíciles de resolver bajo la presión de los jugadores.
Perguntas frequentes
¿Necesito reinstalar SQL Server al actualizar MuServer?
No. La base de datos permanece intacta. Reemplazas los binarios del servidor (GameServer/, ConnectServer/, DataServer/) y aplicas scripts SQL de migración en las tablas existentes. El SQL Server en sí no se reinstala.
¿Qué versión de SQL Server se recomienda para Season 6?
SQL Server 2008 R2 o 2012 son los más estables para Season 6. Las versiones más nuevas (2017/2019) funcionan pero pueden requerir ajuste de compatibilidad via: ALTER DATABASE MuOnline SET COMPATIBILITY_LEVEL = 100;
¿Qué hacer si el GameServer falla tras la actualización con 'MapServer connect failed'?
Verifica GameServer/GameServer.ini, sección [MapServer], y confirma que MapServerIP y MapServerPort coincidan con la nueva configuración. En Season 6+, el MapServer es un proceso separado que debe iniciar antes que el GameServer.
¿Cómo revertir a la versión anterior si algo sale mal?
Restaura el backup en SSMS: RESTORE DATABASE MuOnline FROM DISK = 'C:\\Backups\\MuOnline_pre_update.bak' WITH REPLACE; Luego vuelve a colocar los binarios antiguos desde la carpeta de backup creada en el Paso 1.