Servidores y VPS

Cómo Instalar y configurar MySQL en un VPS Linux

Guía paso a paso para instalar, asegurar y configurar MySQL en un servidor VPS con Linux, lista para producción en menos de 30 minutos.

Detailed image of a server rack with glowing lights in a modern data center.

Para instalar MySQL en un VPS Linux ejecuta sudo apt install mysql-server (Ubuntu/Debian) o sudo dnf install mysql-server (AlmaLinux/Rocky), y luego asegura la instalación con mysql_secure_installation. En menos de 30 minutos tendrás una base de datos lista para producción.

Esta guía cubre todo el proceso: desde cero hasta una instancia segura con usuarios, permisos y firewall correctamente configurados. Sigue los pasos en orden y no te saltes la sección de seguridad.

Paso 1 — Instalar MySQL en tu VPS

El paquete disponible depende de tu distribución. Las más comunes en VPS son Ubuntu/Debian y AlmaLinux/Rocky Linux.

Ubuntu y Debian

sudo apt update
sudo apt install mysql-server -y

AlmaLinux, Rocky Linux y CentOS Stream

sudo dnf install mysql-server -y
sudo systemctl enable --now mysqld

En Ubuntu, el servicio arranca automáticamente. Verifica el estado:

sudo systemctl status mysql

Deberías ver active (running). Si no, inicia el servicio con sudo systemctl start mysql.

Paso 2 — Asegurar la instalación con mysql_secure_installation

Este script interactivo elimina configuraciones inseguras por defecto. Ejecútalo inmediatamente después de instalar:

sudo mysql_secure_installation

El asistente te preguntará lo siguiente. Estas son las respuestas recomendadas:

  • VALIDATE PASSWORD component — Actívalo (Y) para exigir contraseñas fuertes.
  • Password strength level — Elige 2 (STRONG) en producción.
  • Remove anonymous users — Y. Los usuarios anónimos son una brecha de seguridad.
  • Disallow root login remotely — Y. Root nunca debe conectarse desde fuera del servidor.
  • Remove test database — Y. La base de datos test no tiene utilidad en producción.
  • Reload privilege tables — Y. Aplica los cambios de inmediato.

Paso 3 — Crear una base de datos y un usuario dedicado

Nunca uses el usuario root para conectar tu aplicación. Crea un usuario con permisos mínimos para la base de datos de tu proyecto.

Conéctate a MySQL:

sudo mysql

Luego ejecuta estos comandos, sustituyendo los valores en mayúsculas:

CREATE DATABASE mi_app CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'mi_usuario'@'localhost' IDENTIFIED BY 'ContraseñaSegura123!';
GRANT ALL PRIVILEGES ON mi_app.* TO 'mi_usuario'@'localhost';
FLUSH PRIVILEGES;
EXIT;

El juego de caracteres utf8mb4 es obligatorio si necesitas soportar emojis o caracteres especiales — y en aplicaciones modernas siempre los necesitas.

Paso 4 — Configurar el firewall

MySQL escucha en el puerto 3306. Por defecto, este puerto no debe estar abierto a internet. Si tu aplicación corre en el mismo servidor que la base de datos, no abras el puerto:

# Verificar que el puerto NO esté accesible externamente
sudo ss -tlnp | grep 3306

Si necesitas conexiones remotas (por ejemplo, desde otro servidor de aplicaciones), abre el puerto solo para esa IP:

# Con UFW (Ubuntu/Debian)
sudo ufw allow from 192.168.1.100 to any port 3306

# Con firewalld (AlmaLinux/Rocky)
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port port="3306" protocol="tcp" accept'
sudo firewall-cmd --reload

Sustituye 192.168.1.100 por la IP real de tu servidor de aplicaciones. Si quisieras abrir a todo internet estarías expuesto a ataques de fuerza bruta — no lo hagas.

Paso 5 — Ajustes de rendimiento básicos

El archivo de configuración principal es /etc/mysql/mysql.conf.d/mysqld.cnf (Ubuntu) o /etc/my.cnf (RHEL). Estos son los parámetros más importantes para un VPS con 2-4 GB de RAM:

Parámetro Valor recomendado Descripción
innodb_buffer_pool_size 70 % de la RAM Caché principal de InnoDB. El parámetro más importante.
max_connections 100–150 Limita conexiones simultáneas; evita agotamiento de memoria.
query_cache_size 0 Desactívalo en MySQL 5.7+. Causa contención en escrituras.
slow_query_log ON Registra consultas lentas para optimizarlas después.

Después de editar el archivo, reinicia el servicio:

sudo systemctl restart mysql

Para saber cuánta RAM tiene tu VPS: free -h. Asigna el 70 % al innodb_buffer_pool_size. En un VPS de 2 GB, eso es aproximadamente 1400M.

Si tu agencia o proyecto necesita un VPS optimizado para bases de datos de alto rendimiento, el equipo de elenlace.com puede ayudarte a elegir el plan y la configuración correctos desde el inicio.

También puedes explorar más guías sobre infraestructura en nuestra sección de servidores VPS.

Conclusiones clave

  • Instala MySQL con el gestor de paquetes de tu distribución y verifica que el servicio esté activo.
  • Ejecuta mysql_secure_installation inmediatamente después de instalar — nunca lo omitas.
  • Crea un usuario dedicado por aplicación con permisos mínimos; jamás uses root en tu código.
  • Mantén el puerto 3306 cerrado a internet salvo que necesites acceso remoto controlado por IP.
  • Ajusta innodb_buffer_pool_size al 70 % de la RAM disponible para el mejor rendimiento.

Con estos cinco pasos tienes una instalación de MySQL lista para producción. Si buscas soporte especializado en configuración de servidores, visita elenlace.com y habla con nuestro equipo.

Preguntas frecuentes

¿Puedo usar MariaDB en lugar de MySQL en mi VPS?

Sí. MariaDB es un fork compatible de MySQL y es la opción por defecto en muchas distribuciones RHEL. Los comandos de instalación y configuración son prácticamente idénticos; solo cambia el nombre del paquete y del servicio (mariadb-server / mariadb).

¿Cómo conecto mi aplicación PHP a MySQL?

Usa la extensión PDO con el driver MySQL: new PDO('mysql:host=localhost;dbname=mi_app;charset=utf8mb4', 'mi_usuario', 'contraseña'). Usa siempre prepared statements para evitar inyección SQL.

¿Qué hago si olvidé la contraseña de root de MySQL?

Detén el servicio, inícialo con --skip-grant-tables, conéctate sin contraseña, cambia la contraseña con ALTER USER y reinicia el servicio normalmente. El proceso exacto varía ligeramente entre MySQL 5.7 y 8.0.

¿Es seguro abrir el puerto 3306 al público?

No. Exposer MySQL directamente a internet lo convierte en un objetivo inmediato de ataques de fuerza bruta y exploits conocidos. Si necesitas acceso remoto, usa un túnel SSH (ssh -L 3306:localhost:3306 usuario@tu-servidor) o una VPN, y restringe el puerto por IP en el firewall.

Compara proveedores

Otros proveedores y guías que vale la pena comparar:

← Todos