Resumen rápido
Para instalar MySQL en un VPS Windows Server en 5 pasos:
1) descargue MySQL Installer 8.4 LTS en dev.mysql.com,
2) inicie el instalador en modo Server Only,
3) configure la contraseña root y la autenticación caching_sha2_password,
4) verifique el servicio con Get-Service MySQL84 en PowerShell,
5) asegure la instalación con mysql_secure_installation. Calcule 15 minutos. MySQL 8.4 LTS (versión actual: 8.4.9) es la versión recomendada para producción.
Requisitos previos
Antes de comenzar, verifique estos puntos en su máquina:
Windows Server 2019 o 2022 (2022 recomendado)
2 GB de RAM mínimo: 4 GB recomendados para un uso real
Acceso de administrador a través de RDP
Puerto 3306 disponible (verifique con
netstat -ano | findstr :3306).NET Framework 4.5.2+ (incluido en Windows Server 2019/2022)
¿No tiene un VPS Windows aún? Descubra las ofertas VPS Windows OuiHeberg: disponibles desde unos pocos euros al mes con Windows Server 2022 preinstalado.
¿Qué versión de MySQL elegir?
Desde 2023, Oracle ha adoptado un ciclo de versiones de dos ramas: LTS (Soporte a Largo Plazo) e Innovación (actualizaciones frecuentes, menos estables). Aquí está lo que esto significa concretamente en mayo de 2026:
Versión | Tipo | Última versión | Soporte hasta | Recomendado para |
|---|---|---|---|---|
MySQL 8.0 | Legacy | 8.0.46 | EOL abril 2026 | Migración urgente requerida |
MySQL 8.4 LTS | LTS ✅ | 8.4.9 | 2032 | Producción: elección recomendada |
MySQL 9.7 LTS | LTS (nuevo) | 9.7.0 | 2032+ | Producción (salida abril 2026) |
Nuestra recomendación: MySQL 8.4.9 LTS para producción.
MySQL 8.0 ha llegado al final de su vida desde abril de 2026: no lo instale más. MySQL 9.7 LTS acaba de salir (21 de abril de 2026): es sólido, pero su ecosistema de herramientas y controladores aún no es tan maduro como el 8.4. El 8.4 LTS sigue siendo la opción más segura para un servidor de producción en 2025-2026.
Método 1: Instalación a través del instalador gráfico (GUI)
Este es el método más simple. Es adecuado para la mayoría de los casos.
Descargar MySQL Installer
Visite dev.mysql.com/downloads/installer/ y descargue MySQL Installer for Windows (archivo mysql-installer-community-8.4.x.msi, ~450 MB para la versión completa).
También puede usar el web installer (~3 MB) que descarga los componentes sobre la marcha: práctico si tiene una buena conexión.
Elegir el tipo de instalación
Al iniciar, el instalador ofrece varios perfiles:
Tipo | Lo que instala | Caso de uso |
|---|---|---|
Server Only | Solo MySQL Server | VPS de producción ✅ |
Developer Default | Servidor + Workbench + conectores | Puesto de desarrollo |
Full | Todo (>1 GB) | Rara vez útil en un VPS |
Elija "Server Only" en un VPS. No es necesario instalar MySQL Workbench en un servidor sin interfaz gráfica permanente.
Configurar el servidor MySQL
El asistente le hará varias preguntas importantes:
Tipo de configuración:
Development Computer: MySQL utiliza pocos recursos (para un puesto de desarrollo)
Server Computer: comparte los recursos con otros servicios
Dedicated Computer: MySQL toma la mayoría de la RAM ✅ (recomendado en un VPS dedicado a MySQL)
Puerto: deje 3306 por defecto a menos que haya una restricción específica.
Método de autenticación: elija caching_sha2_password (opción recomendada desde MySQL 8.0). No use mysql_native_password a menos que tenga clientes antiguos que no soporten SHA-2.
Contraseña root: elija una contraseña fuerte (16+ caracteres, mayúsculas, números, caracteres especiales). Anótela inmediatamente en un gestor de contraseñas.
Servicio de Windows: deje el nombre por defecto (MySQL84) y marque "Start the MySQL Server at System Startup".
Verificar la instalación
Una vez finalizada la instalación, abra PowerShell como administrador:
# Verificar que el servicio esté en ejecución
Get-Service MySQL84
# Resultado esperado :
# Status Name DisplayName
# ------ ---- -----------
# Running MySQL84 MySQL84
Conéctese luego a la CLI de MySQL para confirmar:
cd "C:\Program Files\MySQL\MySQL Server 8.4\bin"
.\mysql.exe -u root -p
Ingrese su contraseña root. Si obtiene el prompt mysql>, la instalación fue exitosa.
-- Verificar la versión instalada
SELECT VERSION();
-- Resultado : 8.4.9
Método 2: Instalación silenciosa a través de PowerShell (avanzado)
Este método es ideal para automatizar despliegues o configurar varios VPS sin interfaz gráfica. Todo se hace en PowerShell.
# 1. Descargar el MSI MySQL 8.4 LTS
$url = "https://dev.mysql.com/get/Downloads/MySQL-8.4/mysql-8.4.9-winx64.msi"
$dest = "C:\Temp\mysql-8.4.9-winx64.msi"
New-Item -ItemType Directory -Force -Path "C:\Temp" | Out-Null
Invoke-WebRequest -Uri $url -OutFile $dest -UseBasicParsing
# 2. Instalación silenciosa con parámetros
$arguments = @(
"/i", $dest,
"/qn",
"/L*V", "C:\Temp\mysql_install.log",
"INSTALLDIR=`"C:\Program Files\MySQL\MySQL Server 8.4\`"",
"DATADIR=`"C:\ProgramData\MySQL\MySQL Server 8.4\Data\`"",
"PORT=3306",
"SERVICENAME=MySQL84",
"NTSERVICE=1",
"ADDLOCAL=MySQLServer"
)
Start-Process msiexec.exe -ArgumentList $arguments -Wait -NoNewWindow
# 3. Inicializar la base de datos
$mysqlBin = "C:\Program Files\MySQL\MySQL Server 8.4\bin"
& "$mysqlBin\mysqld.exe" --initialize-insecure --user=mysql
# 4. Iniciar el servicio
Start-Service MySQL84
# 5. Definir la contraseña root (reemplazar SuContraseña por una contraseña fuerte)
& "$mysqlBin\mysql.exe" -u root --connect-expired-password -e "ALTER USER 'root'@'localhost' IDENTIFIED BY 'SuContraseña!';"
Write-Host "MySQL 8.4 instalado con éxito." -ForegroundColor Green
Verificación post-instalación:
Get-Service MySQL84
& "C:\Program Files\MySQL\MySQL Server 8.4\bin\mysql.exe" -u root -p -e "SELECT VERSION();"
Nota: La opción
--initialize-insecurecrea una cuenta root sin contraseña. El script la define inmediatamente después. Nunca deje un MySQL sin contraseña root, ni siquiera temporalmente.
Configurar el acceso remoto a MySQL
Por defecto, MySQL solo escucha en 127.0.0.1. Para conectarse desde otro servidor o una herramienta como MySQL Workbench, debe abrir el acceso remoto.
Abrir el puerto 3306 en el firewall de Windows
# Agregar una regla entrante para MySQL
New-NetFirewallRule `
-DisplayName "MySQL 3306" `
-Direction Inbound `
-Protocol TCP `
-LocalPort 3306 `
-Action Allow `
-Profile Any
# Verificar la regla
Get-NetFirewallRule -DisplayName "MySQL 3306"
Para profundizar en la gestión del firewall, consulte nuestra guía para configurar el firewall de Windows Server.
Crear un usuario con acceso remoto
Nunca dé acceso remoto a la cuenta root. Cree un usuario dedicado:
-- Conexión como root primero
mysql -u root -p
-- Crear un usuario remoto (reemplazar la IP por la de su cliente)
CREATE USER 'monuser'@'192.168.1.100' IDENTIFIED BY 'ContraseñaFuerte!2025';
-- O para permitir todas las IPs (menos seguro)
CREATE USER 'monuser'@'%' IDENTIFIED BY 'ContraseñaFuerte!2025';
-- Otorgar derechos sobre una base específica
GRANT SELECT, INSERT, UPDATE, DELETE ON mabase.* TO 'monuser'@'192.168.1.100';
FLUSH PRIVILEGES;
Consejo: siempre restrinja el acceso a una IP específica en lugar de usar el comodín %.
Activar SSL/TLS para conexiones remotas
MySQL 8.4 genera automáticamente certificados SSL al inicio. Verifique que estén activos:
SHOW VARIABLES LIKE '%ssl%';
-- have_ssl debe mostrar: YES
Para forzar SSL en un usuario remoto:
ALTER USER 'monuser'@'192.168.1.100' REQUIRE SSL;
FLUSH PRIVILEGES;
Del lado del cliente, la conexión se realiza con:
mysql -u monuser -p -h IP_DEL_SERVIDOR --ssl-mode=REQUIRED
Optimizar el rendimiento de MySQL (my.ini)
El archivo de configuración de MySQL en Windows se encuentra aquí: C:\ProgramData\MySQL\MySQL Server 8.4\my.ini
Ábralo con Notepad++ o PowerShell y ajuste estos parámetros según su RAM disponible:
[mysqld]
# Tamaño del buffer InnoDB: parámetro más importante
# Ajuste al 70% de la RAM disponible para MySQL
innodb_buffer_pool_size = 2G
# Número máximo de conexiones simultáneas
max_connections = 150
# Tamaño de los archivos de log InnoDB
innodb_log_file_size = 256M
# Caché de consultas (desactivado por defecto en 8.x, deje en 0)
query_cache_size = 0
query_cache_type = 0
# Hilos I/O InnoDB (= número de núcleos CPU)
innodb_read_io_threads = 4
innodb_write_io_threads = 4
Tabla de configuración recomendada según la RAM del VPS:
RAM del VPS |
|
|
|
|---|---|---|---|
2 GB | 1G | 75 | 128M |
4 GB | 2,5G | 150 | 256M |
8 GB | 5G | 300 | 512M |
16 GB | 11G | 500 | 1G |
Después de modificar, reinicie el servicio:
Restart-Service MySQL84
Asegurar MySQL en Windows Server
Ejecutar mysql_secure_installation
Es lo primero que debe hacer después de la instalación:
cd "C:\Program Files\MySQL\MySQL Server 8.4\bin"
.\mysql_secure_installation.exe
La herramienta le guía para eliminar usuarios anónimos, desactivar el inicio de sesión root remoto y eliminar la base test. Responda Y a todas las preguntas.
Los 8 puntos de seguridad esenciales
1. Eliminar usuarios anónimos
DELETE FROM mysql.user WHERE User='';
FLUSH PRIVILEGES;
2. Desactivar el inicio de sesión root remoto
DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1');
FLUSH PRIVILEGES;
3. Eliminar la base de datos test
DROP DATABASE IF EXISTS test;
DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%';
FLUSH PRIVILEGES;
4. Usar contraseñas fuertes: activar la política de validación
INSTALL PLUGIN validate_password SONAME 'validate_password.dll';
SET GLOBAL validate_password.policy = STRONG;
SET GLOBAL validate_password.length = 12;
5. Limitar privilegios por usuario
Nunca use GRANT ALL PRIVILEGES ON *.* TO .... Otorgue solo los derechos necesarios sobre las bases concernidas.
-- Buen ejemplo
GRANT SELECT, INSERT, UPDATE ON appdb.* TO 'appuser'@'localhost';
-- A evitar absolutamente
-- GRANT ALL PRIVILEGES ON *.* TO 'appuser'@'%';
6. Activar los logs de auditoría
Agregue en my.ini:
[mysqld]
general_log = 1
general_log_file = "C:/ProgramData/MySQL/MySQL Server 8.4/Data/mysql_general.log"
log_error = "C:/ProgramData/MySQL/MySQL Server 8.4/Data/mysql_error.log"
7. Cifrar las conexiones (SSL/TLS)
Como se vio en la sección de acceso remoto, fuerce SSL en todos los usuarios que se conecten desde el exterior con REQUIRE SSL.
8. Actualizar regularmente
Consulte dev.mysql.com/downloads/mysql/ para las nuevas versiones. Las actualizaciones de seguridad son frecuentes: suscríbase a los MySQL Security Advisories.
Automatizar las copias de seguridad de MySQL
Script PowerShell completo con rotación
Copie este script en C:\Scripts\mysql_backup.ps1:
# =============================================
# Script de copia de seguridad de MySQL con rotación
# A programar a través del Programador de tareas
# =============================================
$mysqlBin = "C:\Program Files\MySQL\MySQL Server 8.4\bin"
$backupDir = "C:\Backups\MySQL"
$mysqlUser = "root"
$mysqlPass = "SuContraseña!" # O use un archivo .cnf
$retention = 7 # Días de retención
# Crear la carpeta de copia de seguridad si es necesario
New-Item -ItemType Directory -Force -Path $backupDir | Out-Null
# Nombre del archivo con marca de tiempo
$timestamp = Get-Date -Format "yyyy-MM-dd_HH-mm"
$backupFile = "$backupDir\mysql_backup_$timestamp.sql"
$compressedFile = "$backupFile.gz"
# Listar todas las bases (excepto bases del sistema)
$databases = & "$mysqlBin\mysql.exe" -u $mysqlUser -p"$mysqlPass" `
-e "SHOW DATABASES;" --batch --skip-column-names 2>$null |
Where-Object { $_ -notin @('information_schema','performance_schema','sys','mysql') }
# Dump de cada base
foreach ($db in $databases) {
$dbFile = "$backupDir\${db}_$timestamp.sql"
& "$mysqlBin\mysqldump.exe" `
-u $mysqlUser -p"$mysqlPass" `
--single-transaction `
--routines `
--triggers `
--databases $db `
--result-file=$dbFile 2>$null
if ($LASTEXITCODE -eq 0) {
Write-Host "✓ Copia de seguridad exitosa: $db" -ForegroundColor Green
} else {
Write-Host "✗ Error en: $db" -ForegroundColor Red
}
}
# Rotación: eliminar archivos más viejos que $retention días
Get-ChildItem -Path $backupDir -Filter "*.sql" |
Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-$retention) } |
Remove-Item -Force
Write-Host "Rotación realizada. Archivos conservados: $retention días." -ForegroundColor Cyan
Programar con el Programador de tareas de Windows
# Crear una tarea programada: copia de seguridad diaria a las 2 de la mañana
$action = New-ScheduledTaskAction `
-Execute "PowerShell.exe" `
-Argument "-NonInteractive -ExecutionPolicy Bypass -File C:\Scripts\mysql_backup.ps1"
$trigger = New-ScheduledTaskTrigger -Daily -At "02:00"
$settings = New-ScheduledTaskSettingsSet `
-ExecutionTimeLimit (New-TimeSpan -Hours 1) `
-RestartCount 3 `
-RestartInterval (New-TimeSpan -Minutes 5)
Register-ScheduledTask `
-TaskName "MySQL Backup Daily" `
-Action $action `
-Trigger $trigger `
-Settings $settings `
-RunLevel Highest `
-Force
Write-Host "Tarea programada creada con éxito." -ForegroundColor Green
Para profundizar en la estrategia de copia de seguridad completa de su servidor, consulte nuestra guía para respaldar su VPS Windows.
Solución de problemas: 6 errores frecuentes
1. El servicio MySQL no inicia
Verifique los logs de error primero:
Get-Content "C:\ProgramData\MySQL\MySQL Server 8.4\Data\[nombre-maquina].err" -Tail 50
Causas frecuentes: puerto 3306 ya ocupado, permisos insuficientes en la carpeta Data, archivo my.ini mal formado.
2. Error "Access denied for user root"
Si ha olvidado la contraseña root o si la autenticación falla:
# Detener el servicio
Stop-Service MySQL84
# Iniciar MySQL en modo sin autenticación
& "C:\Program Files\MySQL\MySQL Server 8.4\bin\mysqld.exe" --skip-grant-tables --skip-networking
# En otra ventana de PowerShell, conectarse sin contraseña
& "C:\Program Files\MySQL\MySQL Server 8.4\bin\mysql.exe" -u root
# Restablecer la contraseña
FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NuevaContraseña!';
EXIT;
# Reiniciar normalmente
Stop-Process -Name mysqld -Force
Start-Service MySQL84
3. El puerto 3306 ya está en uso
# Identificar el proceso que utiliza el puerto 3306
netstat -ano | findstr :3306
# Encontrar el nombre del proceso con su PID
Get-Process -Id [PID_ENCONTRADO]
O detiene el proceso en conflicto, o cambias el puerto de MySQL en my.ini (port=3307).
4. Imposible conectarse de forma remota
Lista de verificación rápida:
¿Está abierto el puerto 3306 en el firewall de Windows? (
Get-NetFirewallRule -DisplayName "MySQL 3306")¿MySQL está escuchando en
0.0.0.0? (SHOW VARIABLES LIKE 'bind_address';debe devolver*o0.0.0.0)¿El usuario tiene derechos desde la IP remota? (
SELECT User, Host FROM mysql.user;)¿El firewall de tu proveedor/red bloquea el puerto?
Para escuchar en todas las interfaces, añade en my.ini:
[mysqld]
bind-address = 0.0.0.0
5. Contraseña de root olvidada (procedimiento de restablecimiento)
Consulta el punto 2 anterior: el procedimiento --skip-grant-tables funciona para ambos casos.
6. Error "La tabla está llena" (InnoDB)
Este error ocurre cuando innodb_buffer_pool_size es demasiado bajo o cuando el tablespace está saturado.
-- Verificar el espacio disponible
SELECT table_schema, ROUND(SUM(data_length+index_length)/1024/1024,1) AS "Tamaño (MB)"
FROM information_schema.tables
GROUP BY table_schema;
-- Verificar el tamaño del tablespace InnoDB
SHOW VARIABLES LIKE 'innodb_data_file_path';
Aumenta innodb_buffer_pool_size en my.ini según la tabla de la sección de rendimiento, luego reinicia el servicio.
FAQ
¿Qué versión de MySQL instalar en Windows Server 2022?
Instala MySQL 8.4.9 LTS. Es la versión de Soporte a Largo Plazo recomendada para producción en 2026-2028, con soporte garantizado hasta 2032. MySQL 8.0 ha llegado al final de su vida útil desde abril de 2026.
¿MySQL es gratuito en Windows Server?
Sí. MySQL Community Edition es totalmente gratuita bajo licencia GPL. MySQL Enterprise Edition (de pago) añade herramientas de monitoreo, auditoría y copias de seguridad avanzadas: útil para grandes empresas, pero no necesario para la mayoría de los usos.
¿Cómo cambiar el puerto MySQL por defecto?
Modifica my.ini (C:\ProgramData\MySQL\MySQL Server 8.4\my.ini) y cambia la línea port=3306 por el puerto deseado (ej. port=3307). Reinicia el servicio y actualiza la regla de firewall correspondiente.
¿MySQL o MariaDB en Windows Server?
Ambos son excelentes opciones. MySQL 8.4 LTS es más adecuado si utilizas herramientas de Oracle o características específicas (JSON, Replicación en Grupo). MariaDB suele ser más eficiente en cargas mixtas y sigue siendo 100% comunitario. Para un VPS Windows estándar, MySQL 8.4 es la opción más documentada y compatible con las pilas modernas de PHP/Python.
¿Cómo saber si MySQL está bien instalado?
Dos verificaciones rápidas en PowerShell: Get-Service MySQL84 (el estado debe ser Running) y mysql -u root -p -e "SELECT VERSION();" (debe devolver 8.4.9).
¿Se puede instalar MySQL en un VPS Windows de 2 GB de RAM?
Sí, pero es el mínimo. Con 2 GB, ajusta innodb_buffer_pool_size = 1G y max_connections = 75. Para cargas de producción reales (varias decenas de consultas simultáneas), 4 GB de RAM es el mínimo cómodo.
Fuentes útiles
Descarga MySQL Community Server: dev.mysql.com
Documentación oficial MySQL 8.4: dev.mysql.com
Notas de versión MySQL 8.4: dev.mysql.com
Avisos de Seguridad de MySQL: mysql.com
Fin de vida MySQL 8.0 (EOL): dev.mysql.com
