// Engineering Log

Bases de datos: Parte 2 — MySQL

Publicado el 21.09.2026

// Ruta rapida

Este articulo pertenece al tema Servidores e infraestructura.

MySQL — un SGBD relacional que desde finales de los años 1990 sigue siendo uno de los más extendidos en el desarrollo web. En él funcionan WordPress, Joomla, Drupal, muchas tiendas online y foros; prácticamente cualquier hosting lo soporta. Desde 2010 MySQL pertenece a Oracle: la versión gratuita Community Server se distribuye bajo la licencia GPLv2, la edición comercial Enterprise Edition — mediante suscripción.

Versiones y soporte

Desde 2023 Oracle publica MySQL en dos canales:

  • LTS (Long-Term Support) — ramas estables que reciben correcciones y actualizaciones de seguridad durante muchos años sin cambios de funcionalidad. Ahora son 8.4 LTS (soporte hasta abril de 2032 considerando soporte extendido) y 9.7 LTS, publicada en la primavera de 2026;
  • Innovation — lanzamientos trimestrales con nuevas funciones, cada uno soportado solo hasta la salida del siguiente.

Para sistemas en producción conviene elegir LTS. La rama 8.0 ya no está soportada: el soporte extendido finalizó en abril de 2026, y los servidores en esa versión deben migrar a 8.4 o 9.7.

En septiembre de 2025 Oracle redujo alrededor de 70 desarrolladores del equipo de MySQL; según medios del sector, el equipo fue transferido a la unidad del servicio en la nube HeatWave. Parte de la comunidad interpretó esto como señal de que la versión gratuita se desarrollará más lentamente. Es un argumento importante para considerar alternativas compatibles.

Alternativas: MariaDB y Percona Server

  • MariaDB — fork de MySQL creado en 2009 por uno de los autores de MySQL, Michael Widenius. Durante mucho tiempo fue un reemplazo directo de MySQL, pero con los años las ramas se han separado: la migración entre versiones modernas es posible, aunque ya requiere verificación. Las ramas LTS actuales de MariaDB son 10.11, 11.4, 11.8 y 12.3. En muchas distribuciones de Linux el paquete «mysql» instala MariaDB por defecto.
  • Percona Server for MySQL — una compilación de MySQL de la compañía Percona, totalmente compatible con el original, con herramientas adicionales de diagnóstico y funciones que Oracle ofrece solo en la versión Enterprise.

Dónde es apropiado MySQL

  • Sitios basados en CMS y frameworks. WordPress soporta oficialmente MySQL y MariaDB; para él es la elección natural.
  • Tiendas online y servicios web con predominio de lectura: MySQL maneja bien un gran número de consultas sencillas.
  • Pequeños sistemas corporativos — CRM, gestión de solicitudes, servicios internos, si la aplicación está diseñada para MySQL.

Si un proyecto comienza desde cero y no hay requisitos estrictos sobre la SGBD, conviene comparar MySQL con PostgreSQL: PostgreSQL tiene un conjunto más rico de tipos de datos y extensiones, y no depende de una sola compañía.

Cómo está organizado MySQL

Motores de almacenamiento

MySQL guarda las tablas mediante motores de almacenamiento plug-in. Por defecto se usa InnoDB: soporta transacciones, claves foráneas, bloqueos a nivel de fila y recuperación tras fallos. El motor antiguo MyISAM no soporta transacciones, bloquea la tabla completa al escribir y tras una caída puede requerir reparación de tablas. No conviene usarlo para tablas nuevas, y es sensato convertir las antiguas a InnoDB:

sql
ALTER TABLE имя_таблицы ENGINE=InnoDB;

Replicación

La replicación copia los cambios del servidor principal a uno o varios servidores secundarios. Desde la versión 8.0.22 MySQL usa los términos source (origen) y replica (réplica) en lugar de los obsoletos master y slave; los comandos también fueron renombrados: START REPLICA, SHOW REPLICA STATUS, CHANGE REPLICATION SOURCE TO.

Las réplicas se usan para:

  • distribuir la carga de lectura;
  • disponer de un servidor de respaldo en caso de fallo del principal;
  • hacer copias de seguridad sin cargar el servidor principal.

Para conmutación automática ante fallos y escritura en varios nodos existe Group Replication y el InnoDB Cluster basado en él.

Configuración básica

Usuario separado para cada aplicación

La aplicación no debe conectarse a la base como root. Para cada aplicación se crea una base y un usuario con permisos solo sobre ella:

sql
CREATE DATABASE shop CHARACTER SET utf8mb4;
CREATE USER 'shop'@'localhost' IDENTIFIED BY 'надёжный_пароль';
GRANT SELECT, INSERT, UPDATE, DELETE ON shop.* TO 'shop'@'localhost';

Si la aplicación crea y modifica tablas durante actualizaciones, se añaden los permisos CREATE, ALTER, INDEX y DROP. La parte @'localhost' significa que solo se puede conectar desde el mismo servidor. No conviene abrir acceso desde cualquier dirección ('%') sin necesidad.

Es mejor usar la codificación utf8mb4: la antigua utf8 en MySQL no almacena todos los caracteres Unicode, por ejemplo no guarda emojis.

Copia de seguridad

mysqldump crea una copia lógica — un conjunto de comandos SQL a partir de los cuales se restaura la base. Para tablas InnoDB la opción --single-transaction hace una instantánea consistente sin bloquear la aplicación:

bash
mysqldump --single-transaction --routines --triggers --events shop > shop.sql

Restauración:

bash
mysql shop < shop.sql

La copia lógica es cómoda para bases pequeñas y para migraciones entre versiones, pero en bases de decenas de gigabytes su creación y especialmente la restauración pueden llevar horas. Para bases grandes se emplea copia física:

  • Percona XtraBackup copia los archivos de datos sin detener el servidor. La versión de XtraBackup debe corresponderse con la rama del servidor: XtraBackup 8.4 funciona solo con MySQL 8.4;
  • MySQL Shell con las utilidades util.dumpInstance() y util.loadDump() crea y restaura copias en varios hilos.

Una copia de seguridad que nunca se ha restaurado no garantiza la preservación de los datos: la restauración debe comprobarse regularmente en un servidor separado.

Herramientas de administración

  • mysql — cliente de consola, incluido en la distribución del servidor.
  • MySQL Shell — cliente moderno con modos SQL, JavaScript y Python, utilidades de copia de seguridad y comprobación de preparación para actualización (util.checkForServerUpgrade()).
  • phpMyAdmin y Adminer — interfaces web conocidas por usuarios de hosting. No conviene publicarlas en Internet sin protección adicional (restricción por IP, autenticación separada): los bots las escanean constantemente.
  • MySQL Workbench y DBeaver — aplicaciones de escritorio para trabajar con el esquema y las consultas.

Errores típicos

  • Método de autenticación obsoleto. El plugin mysql_native_password está desactivado por defecto en MySQL 8.4 y eliminado en 9.0; por defecto se usa caching_sha2_password. Clientes y drivers antiguos pueden dejar de conectarse tras actualizar el servidor — deben actualizarse con antelación.
  • Ajustes por defecto en un servidor de producción. El parámetro principal de rendimiento de InnoDB es innodb_buffer_pool_size, la cantidad de memoria para la caché de datos. En un servidor dedicado de base de datos se suele fijar al 50–75 % de la memoria RAM.
  • Puerto 3306 abierto en Internet. El servidor de base de datos debe ser accesible solo por la aplicación: escuchar en 127.0.0.1 o en la red interna, o estar cerrado por un cortafuegos.
  • Falta de índices. Las consultas lentas se localizan mediante el registro de consultas lentas (slow_query_log) y se analizan con EXPLAIN.
  • Actualizar sin comprobar. El paso entre ramas (8.0 → 8.4 → 9.7) se realiza tras verificar la compatibilidad en una copia de la base: han cambiado parámetros por defecto y se han eliminado algunas funciones obsoletas.

Conclusión

MySQL es un SGBD maduro con un ecosistema enorme y una elección natural para sitios en CMS populares. Para sistemas en producción conviene usar una rama LTS, configurar copias de seguridad con comprobación de restauración y vigilar cómo Oracle desarrolla la versión gratuita. Si la dependencia de una sola compañía es crítica, MariaDB y Percona Server compatibles permiten cambiar de proveedor sin reescribir la aplicación.

// Tarea parecida

Si estas resolviendo algo parecido

Este articulo pertenece a uno de los temas principales de trabajo. Puedes seguir leyendo sobre el tema, ir a la pagina principal para entender a que me dedico o abrir directamente los servicios.

Tema del articulo

Servidores e infraestructura

VPS, Linux, stack web, migraciones, hosting, bases de datos y operacion base.

Tareas frecuentes de esta tema

  • Migrar un sitio o servicio a un nuevo servidor
  • Configurar Linux, Nginx, base de datos y copias de seguridad
  • Entender por que el sistema funciona de forma inestable

// Siguiente paso

Si necesitas ayuda con este tema y no solo otro articulo, es mejor ir directo a la pagina del servicio. La pagina principal y la seleccion de materiales quedan como rutas secundarias.

Abrir servicios

// Contact

¿Necesitas ayuda?

Escríbeme y te ayudaré a resolver el problema

Respondo en un día laborable (03:00-13:00 GMT)

Или оставьте заявку здесь:

Confirme que no es un bot.

Escribir y recibir una respuesta rápida