Skip to content

¿Qué es MySQL? ​

Antes de instalar nada, conviene entender qué es MySQL, de dónde viene, en qué se diferencia de MariaDB, qué versión elegir y cómo funciona por dentro la conexión entre tu aplicación y el servidor. Con eso evitarás muchos dolores de cabeza cuando algo "no conecte".

Concepto ​

MySQL es un SGBD relacional (Sistema Gestor de Bases de Datos): un programa que guarda tus datos en tablas y responde consultas SQL. Funciona como un servidor: está corriendo todo el tiempo, escuchando peticiones de los programas (clientes) que se conectan a él.

Piensa en un restaurante:

  • La cocina es el servidor MySQL: guarda los ingredientes (datos) y prepara los platillos (resultados).
  • Los meseros son los clientes: tu app PHP, phpMyAdmin, la terminal. Llevan pedidos (consultas SQL) y regresan con la comida (filas).
  • La puerta de la cocina es el puerto 3306.

Un poco de historia ​

AñoHito
1995Michael Widenius y David Axmark lanzan MySQL en Suecia (la "My" viene de la hija de Widenius)
2000sSe vuelve la "M" del famoso stack LAMP (Linux, Apache, MySQL, PHP)
2008Sun Microsystems compra MySQL AB
2010Oracle compra Sun y con ella MySQL
2009–2010Widenius crea MariaDB (por su otra hija, Maria) como fork comunitario
2018MySQL 8.0: CTEs, funciones de ventana, roles, utf8mb4 por defecto
2024MySQL 8.4 LTS (soporte a largo plazo) y la serie 9.x "innovation"

MySQL vs MariaDB ​

MariaDB nació como una copia de MySQL y durante años fue un reemplazo directo. Con el tiempo se han separado un poco:

AspectoMySQLMariaDB
DueñoOracle (edición Community gratuita)MariaDB Foundation (comunitaria)
LicenciaGPL + ediciones comercialesGPL
Compatibilidad—Muy alta con MySQL 5.7; diferencias con 8.x
Motor por defectoInnoDBInnoDB (antes XtraDB)
Diferencias notablesJSON binario nativo, roles, caching_sha2_passwordJSON es alias de LONGTEXT, motores extra (Aria, ColumnStore), secuencias
Dónde lo encuentrasDocker, nube (RDS, Cloud SQL), instaladores oficialesXAMPP, muchas distros Linux, muchos hostings

¿Cuál uso?

Para aprender y para el 95 % de proyectos web, da igual: el SQL y las herramientas son los mismos. Si tu hosting usa MariaDB, desarrolla localmente con MariaDB para evitar sorpresas. XAMPP trae MariaDB aunque el panel diga "MySQL".

Versiones ​

VersiónEstadoNotas
5.7Fin de soporte (oct. 2023)Aún común en hostings viejos. Sin CTEs ni funciones de ventana
8.0Fin de soporte en abril 2026Muy extendida
8.4 LTSRecomendadaSoporte a largo plazo; ideal para producción
9.x"Innovation"Novedades cada pocos meses, soporte corto
sql
-- ¿Qué versión tengo?
SELECT VERSION();
-- 8.4.2          → MySQL
-- 10.11.6-MariaDB → MariaDB

Buena práctica

Usa la misma versión mayor en tu computadora y en el servidor de producción. Una consulta con funciones de ventana que funciona en tu MySQL 8.4 fallará en un hosting con MySQL 5.7.

Arquitectura cliente-servidor ​

txt
  ┌──────────────┐   ┌──────────────┐   ┌──────────────┐
  │  App PHP     │   │ phpMyAdmin   │   │ Terminal     │   ← CLIENTES
  │  (PDO)       │   │              │   │ mysql -u ... │
  └──────┬───────┘   └──────┬───────┘   └──────┬───────┘
         │ TCP :3306        │                  │ socket local
         └──────────────────┼──────────────────┘
                     ┌──────▼───────┐
                     │   mysqld     │   ← SERVIDOR (proceso/servicio)
                     │  ┌────────┐  │
                     │  │ InnoDB │  │   ← motor de almacenamiento
                     │  └───┬────┘  │
                     └──────┼───────┘
                     ┌──────▼───────┐
                     │ /var/lib/mysql│  ← archivos de datos en disco
                     └──────────────┘

Piezas clave:

PiezaQué es
mysqldEl servidor (daemon). Corre como servicio de Windows o de Linux
mysqlEl cliente de línea de comandos
Puerto 3306Puerto TCP por defecto (MariaDB también)
SocketEn Linux, conexiones locales por archivo (/var/run/mysqld/mysqld.sock), más rápidas
datadirCarpeta donde viven los datos
my.cnf / my.iniArchivo de configuración (Linux / Windows)

Datos para conectarte ​

Cualquier cliente necesita 5 datos:

DatoEjemplo localEjemplo hosting
Host127.0.0.1 o localhostlocalhost (desde el mismo servidor)
Puerto33063306
Usuarioroot (solo en tu PC)cpuser_tienda
Contraseñala que definistela que creaste en cPanel
Base de datostiendacpuser_tienda

localhost vs 127.0.0.1

En Linux y macOS, localhost hace que el cliente use el socket y 127.0.0.1 usa TCP. Para MySQL son conexiones distintas y un usuario puede tener permisos para una y no para la otra. Si "con localhost sí conecta y con 127.0.0.1 no" (o al revés), esa es la razón. Con Docker usa siempre 127.0.0.1.

Organización de los datos ​

txt
Servidor MySQL
├── base de datos "tienda"          ← en MySQL, DATABASE = SCHEMA
│   ├── tabla clientes
│   ├── tabla productos
│   └── vista v_catalogo
├── base de datos "blog_wordpress"
├── mysql               ← sistema: usuarios y permisos
├── information_schema  ← metadatos (qué tablas y columnas existen)
├── performance_schema  ← métricas de rendimiento
└── sys                 ← vistas amigables sobre performance_schema
sql
SHOW DATABASES;
USE tienda;
SHOW TABLES;

-- Metadatos: columnas de una tabla
SELECT column_name, data_type, is_nullable
FROM information_schema.columns
WHERE table_schema = 'tienda' AND table_name = 'productos';

No toques las bases del sistema

Nunca borres ni modifiques a mano mysql, information_schema, performance_schema ni sys. Para administrar usuarios usa CREATE USER y GRANT.

¿Dónde se usa MySQL? ​

  • WordPress, WooCommerce, Joomla, Drupal, PrestaShop, Moodle: requieren MySQL/MariaDB.
  • Laravel y la mayoría de frameworks PHP: MySQL es la opción por defecto en muchos tutoriales y hostings.
  • Hosting compartido (cPanel, Plesk): casi siempre incluye MySQL/MariaDB y phpMyAdmin.
  • Grandes empresas: Facebook/Meta, YouTube, Booking, GitHub y Uber lo han usado a gran escala.
  • Nube: Amazon RDS / Aurora, Google Cloud SQL, Azure Database for MySQL, PlanetScale, DigitalOcean.

Fortalezas y limitaciones ​

FortalezasLimitaciones
Muy rápido en lecturas típicas de sitios webMenos tipos avanzados que PostgreSQL (sin arrays, enums limitados)
Disponible en cualquier hostingCHECK solo desde 8.0.16; sin vistas materializadas
Enorme comunidad y documentaciónAlgunas conductas "permisivas" si el modo estricto está apagado
Replicación sencillaBúsqueda de texto completo más básica
Herramientas maduras (Workbench, phpMyAdmin)

Ejemplo: tu primera sesión ​

Una vez instalado (siguiente lección), así se ve una sesión en la terminal:

bash
mysql -u root -p
sql
-- Dentro del cliente mysql
SELECT VERSION(), CURRENT_USER(), NOW();

CREATE DATABASE tienda CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;
USE tienda;

CREATE TABLE categorias (
  id INT AUTO_INCREMENT PRIMARY KEY,
  nombre VARCHAR(50) NOT NULL UNIQUE
) ENGINE=InnoDB;

INSERT INTO categorias (nombre) VALUES ('Electrónica'), ('Libros'), ('Hogar');
SELECT * FROM categorias;

EXIT;
txt
+----+-------------+
| id | nombre      |
+----+-------------+
|  1 | Electrónica |
|  3 | Hogar       |
|  2 | Libros      |
+----+-------------+
3 rows in set (0.00 sec)

(¿Por qué salen en otro orden? Porque sin ORDER BY el orden no está garantizado: aquí MySQL leyó el índice UNIQUE de nombre, que está ordenado alfabéticamente.)

Ejercicios ​

  1. ¿Cuál es la diferencia entre mysqld y mysql?
  2. Tu cliente tiene un hosting con "MySQL 5.7". ¿Qué funciones del curso de SQL no podrás usar?
  3. ¿Qué cinco datos necesitas para conectar una aplicación a MySQL?
  4. Ejecuta SELECT VERSION(); en el entorno que tengas (o en DB Fiddle eligiendo MySQL) e identifica si es MySQL o MariaDB.
Ver solución
  1. mysqld es el servidor que guarda los datos y atiende conexiones; mysql es el programa cliente de terminal con el que te conectas a él.
  2. CTEs (WITH), CTEs recursivas, funciones de ventana (ROW_NUMBER, RANK, LAG...), roles, y los CHECK no se aplican (se ignoran). También el charset por defecto era latin1.
  3. Host, puerto, usuario, contraseña y nombre de la base de datos.
  4. Si la versión incluye el texto MariaDB (por ejemplo 10.11.6-MariaDB), es MariaDB; si es solo un número como 8.4.2, es MySQL.

Resumen ​

  • MySQL es un SGBD relacional cliente-servidor; el servidor (mysqld) escucha en el puerto 3306.
  • MariaDB es un fork comunitario muy compatible; para proyectos web típicos funcionan igual.
  • Usa MySQL 8.4 LTS (o la misma versión que tu servidor de producción).
  • Para conectarte necesitas host, puerto, usuario, contraseña y base de datos.
  • En MySQL, database y schema son sinónimos; no toques las bases del sistema.

Academia Web — aprende, copia y construye.