Llevo muchos años trabajando con MySQL y MariaDB. Y siempre he tenido la misma sensación cuando uso el cliente nativo. Escribes una consulta, te equivocas en el nombre de una columna, pulsas Enter, y aparece el error. Corriges, vuelves a escribir, otro error. Y así toda la mañana. Luego escribes un SELECT * y te llegan 40 columnas que no te caben en la pantalla. O peor aún, ejecutas un UPDATE sin el WHERE y te das cuenta cuando ya es demasiado tarde.
El problema no es que no sepas SQL. El problema es que el terminal no te ayuda. No hay autocompletado, no hay resaltado de sintaxis, no hay una forma decente de navegar por el historial. Y si trabajas con varias bases de datos, tienes que recordar todas las conexiones de memoria o tener un gestor de contraseñas a mano.
Hasta que hace un tiempo descubrí MyCLI, una herramienta que me cambió la forma de trabajar con bases de datos desde el terminal. Y lo mejor es que desde entonces no ha parado de mejorar. En este artículo te voy a contar por qué MyCLI se ha convertido en mi compañero inseparable para trabajar con MySQL y MariaDB, cómo instalarlo, configurarlo y sacarle el máximo partido.
Para quién es esto: administradores de bases de datos, desarrolladores backend, DevOps y cualquier persona que trabaje con MySQL o MariaDB desde el terminal y quiera ser más productiva.
Para quién no es: si solo usas interfaces gráficas como MySQL Workbench o DBeaver y no tienes intención de cambiar, este artículo no es para ti. Aunque te recomiendo que le eches un vistazo, porque igual cambias de opinión.
Un poco de historia
MyCLI nació en 2015 como un proyecto de dbcli, la misma organización que mantiene pgcli y litecli. La idea era simple: coger el motor de autocompletado y resaltado de sintaxis que ya funcionaba tan bien en pgcli y adaptarlo a MySQL. El resultado fue un cliente que desde el primer día ofrecía una experiencia muy superior al mysql nativo.
En 2019, cuando escribí el artículo original, MyCLI estaba en la rama 1.x y tenía alrededor de 7.000 estrellas en GitHub. Siete años después, en 2026, ha superado las 11.900 estrellas, ha lanzado la versión 2.0.0 con cambios importantes, y sigue incorporando funcionalidades que ni siquiera imaginaba entonces: soporte para LLMs, transformación de datos con Polars, trailing redirects al estilo shell, y un largo etcétera.
Qué es MyCLI
MyCLI no es ni más ni menos que un cliente para MySQL y MariaDB con autocompletado inteligente y resaltado de sintaxis. Funciona en el terminal, pesa lo mismo que el cliente nativo, pero te ofrece una experiencia mucho más cercana a la de un editor moderno.
Está escrito en Python, es código abierto con licencia BSD-3-Clause, y forma parte de la familia dbcli. Esa misma familia a la que pertenecen pgcli para PostgreSQL y litecli para SQLite. Los tres comparten el mismo motor, así que si aprendes uno, sabes usar los otros.
En el repositorio de GitHub tiene más de 11.900 estrellas, y el equipo publica actualizaciones con regularidad. De hecho, en julio de 2026 han lanzado la versión 2.5.1, y la rama 2.x ha traído cambios importantes.
Ficha técnica
| Métrica | Detalle |
|---|---|
| Versión actual | 2.5.1 (julio 2026) |
| Licencia | BSD-3-Clause |
| Lenguaje | Python 3.10+ |
| Estrellas GitHub | ~11.900 ⭐ |
| Forks | ~695 |
| Commits | ~3.441 |
| Repositorio | github.com/dbcli/mycli |
| Web oficial | mycli.net |
| Compatibilidad | MySQL, MariaDB, Percona, TiDB, Apache Doris |
¿Qué lo hace diferente del cliente nativo?
El cliente nativo de MySQL (mysql) es funcional, pero espartano. No tiene colores, no completa nada, y el historial es el que te da el shell, que no entiende de SQL. MyCLI, en cambio, entiende lo que estás escribiendo. Sabe cuándo estás escribiendo una tabla, una columna, un JOIN o una función. Y te lo pone fácil.
Core Architecture & Key Features
Cómo funciona por dentro
MyCLI se apoya en tres bibliotecas fundamentales que hacen que funcione como un reloj suizo.
| Componente | Función |
|---|---|
| prompt_toolkit 3.x | Motor de interfaz de terminal. Maneja el teclado, los atajos, el multilínea, los menús de autocompletado |
| sqlglot + sqlparse | Analizador SQL. Entiende la estructura de tu consulta para saber qué autocompletar en cada contexto |
| Pygments | Resaltado de sintaxis. Colorea keywords, strings, números y comentarios SQL |
| PyMySQL | Conector nativo con MySQL. Gestiona la conexión, las consultas y los resultados |
| rapidfuzz | Búsqueda difusa. Te permite escribir djmi y encontrar django_migrations |
| Click | CLI framework. Gestiona los argumentos de línea de comandos |
El flujo es sencillo pero efectivo: escribes, el parser analiza lo que llevas escrito, el motor de autocompletado consulta los metadatos de la base de datos (tablas, columnas, índices, procedimientos), y te muestra las opciones relevantes. Todo en segundo plano, sin que notes ralentizaciones.
El uso de sqlglot como parser SQL es un acierto. Es un parser escrito en Python puro que entiende la gramática de MySQL, MariaDB, PostgreSQL y otros dialectos. Esto le permite a MyCLI saber con precisión qué esperar en cada punto de la consulta. Cuando escribes SELECT * FROM usuarios WHERE, sqlglot ha identificado que estás dentro de una cláusula WHERE y que lo que toca autocompletar son columnas de la tabla usuarios, no nombres de tablas ni funciones.
Además, desde la versión 1.70.0, MyCLI carga los metadatos de los schemas en segundo plano mientras escribes. Esto se llama prefetch de schemas y hace que el autocompletado sea instantáneo incluso en bases de datos con cientos de tablas.
Las funcionalidades que marcan la diferencia
Autocompletado inteligente y contextual
Aquí está la clave de MyCLI, el motivo por el que una vez que lo pruebas no vuelves al cliente nativo. El autocompletado es contextual, lo que significa que no te sugiere lo mismo en todas partes:
- Cuando escribes
SELECT * FROMy pulsas Tab, solo te muestra nombres de tablas. - Cuando escribes
SELECT * FROM usuarios WHEREy pulsas Tab, solo te muestra las columnas de esa tabla. - Cuando escribes
SELECT * FROM usuarios JOIN, te sugiere las tablas con las que hay relaciones de foreign key. - Cuando escribes
ALTER TABLE usuarios ADD COLUMN, te sugiere los tipos de datos.
Además, el autocompletado es fuzzy. Si escribes djmi, MyCLI entiende que buscas django_migrations. No hace falta que escribas el nombre completo, solo unos pocos caracteres.
Mi consejo: activa el prefetch de schemas en segundo plano. Así los metadatos se cargan mientras escribes y no notas ningún retardo. Se hace con
prefetch_schemas = Trueen~/.myclirc.
Resaltado de sintaxis con temas
MyCLI usa Pygments, y viene con una colección de temas que puedes cambiar sobre la marcha. Si eres de los que pasan horas en el terminal, agradecerás tener los keywords SQL en un color, los strings en otro y los números en otro.
syntax_style = monokai
Algunos temas que merecen la pena.
| Tema | Estilo |
|---|---|
monokai | Oscuro, el clásico de toda la vida |
vim | Inspirado en el editor Vim |
friendly | Para terminales claros |
xcode | Estilo Xcode |
paraiso-dark | Oscuro con colores vivos |
Puedes ver la lista completa en mycli.net/syntax.
Búsqueda en el historial con fzf
El historial de MyCLI guarda todas las consultas que ejecutas en ~/.mycli-history. Con C-r puedes buscar en él. Si tienes fzf instalado (y te recomiendo que lo instales), la búsqueda es difusa y con previsualización del resultado. Es increíblemente rápido aunque tengas miles de consultas guardadas.
Configuración de key bindings
Puedes elegir entre el modo Emacs (por defecto) y el modo VI. Además, desde la versión 1.61.0, puedes configurar los atajos de teclado a tu gusto.
| Tecla | Función |
|---|---|
Tab | Forzar autocompletado |
C-space | Iniciar autocompletado |
C-r | Búsqueda en historial (fzf si está instalado) |
F2 | Activar o desactivar SmartCompletion |
F3 | Activar o desactivar modo multilínea |
F4 | Alternar entre modo VI y Emacs |
ESC-Enter | Salto de línea en modo multilínea |
Instalación paso a paso
Dependiendo de tu sistema, tienes varias opciones. Te pongo todas para que elijas la que mejor se adapte a tu caso.
Prerrequisitos
- Python 3.10 o superior
- pip (para la instalación con Python)
- Opcional pero recomendado:
fzfpara búsqueda en el historial,python3-pygmentspara resaltado de sintaxis
Ubuntu y Debian
sudo apt-get update sudo apt-get install mycli fzf python3-pygments
Fíjate que he incluido fzf y python3-pygments. El primero te da la búsqueda difusa en el historial con previsualización. El segundo es el que se encarga de colorear la sintaxis SQL.
Arch Linux y Manjaro
yay -S mycli fzf python-pygments
Fedora
sudo dnf install mycli fzf python-pygments
macOS
brew update && brew install mycli fzf pygments
Con pip (siempre la versión más reciente)
Si quieres la versión más actualizada, siempre puedes usar pip. Esta es la opción que recomiendo porque te asegura tener las últimas novedades y correcciones:
pip install --upgrade 'mycli[all]'
El [all] instala todas las dependencias opcionales. Si prefieres una instalación más minimalista, puedes instalar solo lo básico:
pip install --upgrade mycli
Y luego añadir las dependencias que necesites:
pip install 'mycli[llm]' # Para soporte LLM pip install 'mycli[polars]' # Para transformaciones con Polars pip install 'mycli[ssh]' # Para SSH jump hosts
Verificar la instalación
Una vez instalado, puedes verificar que todo funciona correctamente:
mycli --version
Deberías ver algo como:
mycli 2.5.1
Primeros pasos
Conectarte es tan sencillo como hacerlo con el cliente nativo:
mycli -u root -h localhost mi_basedatos
Pero MyCLI también acepta URIs de conexión, que es mucho más cómodo cuando tienes varios servidores:
mycli mysql://usuario:contraseña@hostname:3306/base_de_datos
Y aquí viene una de las cosas que más uso en mi día a día: los alias DSN. Puedes definir conexiones en ~/.myclirc y luego conectarte con un nombre corto:
[alias_dsn] local = mysql://root@localhost:3306/mydb prod = mysql://admin@prod-server:3306/mydb desarrollo = mysql://dev@dev-server:3306/mydb
Y después te conectas así:
mycli -d produccion
Menudo cambio, sobre todo cuando tienes que saltar entre varios entornos a lo largo del día.
Casos de uso avanzados y ejemplos reales
Escenario A: Monitorización de una base de datos en producción
Imagina que tienes una aplicación web con cientos de usuarios concurrentes y quieres monitorizar el estado de la base de datos en tiempo real. Con MyCLI puedes hacerlo sin salir del terminal.
Primero, conectas a la base de datos de producción usando tu alias DSN:
mycli -d produccion
Una vez dentro, activas el modo timing para ver cuánto tarda cada consulta:
\timing
Ahora puedes ejecutar consultas de monitorización. Por ejemplo, para ver las conexiones activas:
\fs conexiones SELECT * FROM information_schema.PROCESSLIST \f conexiones
Para ver el tamaño de las tablas:
\fs tamanos SELECT table_name, round(((data_length + index_length) / 1024 / 1024), 2) AS 'Size (MB)' FROM information_schema.TABLES WHERE table_schema = '$1' ORDER BY (data_length + index_length) DESC \f tamanos "mi_basedatos"
Y si quieres monitorizar en tiempo real cuántos pedidos se están procesando:
/watch 5 -c SELECT COUNT(*) FROM pedidos WHERE estado='pendiente'
Esto ejecuta la consulta cada 5 segundos limpiando la pantalla. Perfecto para ver cómo evoluciona una cola de trabajos o un proceso de importación.
Escenario B: Exportación de datos con trailing redirects
Una de las novedades que más he usado desde que salió es la posibilidad de redirigir la salida de las consultas directamente a archivos o a otros comandos, todo desde la misma línea de MyCLI.
SELECT * FROM usuarios $> /tmp/usuarios.csv SELECT * FROM usuarios $>> /tmp/usuarios.csv SELECT * FROM usuarios $| grep 'admin'
El $> guarda el resultado en un archivo, el $>> añade al final si el archivo ya existe, y el $| pasa el resultado a otro comando. Es como trabajar con tuberías en el shell, pero dentro de MyCLI.
Puedes combinar esto con diferentes formatos de salida:
\T csv SELECT * FROM pedidos $> pedidos.csv \T jsonl SELECT * FROM pedidos $> pedidos.jsonl
Escenario C: Automatización con batch mode
MyCLI tiene un modo batch pensado para ejecutar scripts SQL de forma automatizada. Ideal para tareas nocturnas, migraciones o procesos ETL.
# Ejecutar un archivo SQL mycli --batch script.sql -d produccion # Batch con checkpoint (reanudable) mycli --batch importacion.sql --checkpoint progreso.txt -d produccion # Execute directo mycli -e "SELECT COUNT(*) FROM usuarios" -t -d produccion
El modo checkpoint es especialmente útil para importaciones largas: si algo falla, puedes reanudar desde donde se quedó.
Escenario D: Consultas favoritas con parámetros
De todas las funcionalidades de MyCLI, esta es la que más me ha salvado el pellejo. Puedes guardar consultas habituales con parámetros y ejecutarlas con un solo comando.
Para guardar una consulta:
\fs tablas SELECT TABLE_NAME, TABLE_ROWS FROM information_schema.TABLES WHERE TABLE_SCHEMA='$1'
Para ejecutarla:
\f tablas "mi_basedatos"
Y MyCLI sustituye $1 por el valor que le has pasado. Puedes tener tantos parámetros como necesites: $1, $2, $3…
En mi caso tengo una docena de consultas guardadas para tareas que hago a diario:
\fs conexiones SELECT * FROM information_schema.PROCESSLIST \fs tamanos SELECT table_name, round(((data_length + index_length) / 1024 / 1024), 2) AS 'Size (MB)' FROM information_schema.TABLES WHERE table_schema = '$1' ORDER BY (data_length + index_length) DESC \fs lentas SELECT * FROM information_schema.PROCESSLIST WHERE TIME > 10
Para ver las consultas guardadas:
\f
Para eliminar una:
\fd tablas
Escenario E: Usar el LLM para consultas en lenguaje natural
Desde la versión 1.38.0, MyCLI incluye soporte para consultar la base de datos con lenguaje natural. Lo activas con el comando /llm:
/llm Cuántos usuarios tenemos registrados? /llm Dame los 5 productos más vendidos de este mes /llm help
El LLM analiza la pregunta, genera la consulta SQL y la ejecuta. No es perfecto, desde luego, pero para consultas rápidas de análisis te puede ahorrar tiempo. Necesitas instalar las dependencias adicionales:
pip install 'mycli[llm]'
Escenario F: Transformación de datos con Polars
Desde la versión 2.5.0, puedes transformar resultados usando Polars directamente:
SELECT * FROM ventas .| df.group_by('mes').agg(pl.sum('total'))
Y también puedes guardar resultados como Parquet:
SELECT * FROM ventas .> ventas.parquet
Para los que trabajamos con análisis de datos, esto es una pasada. Puedes hacer transformaciones complejas sin salir de MyCLI y guardar el resultado en un formato eficiente como Parquet.
Pros y contras
Ninguna herramienta es perfecta, y MyCLI no iba a ser la excepción. Te pongo los pros y contras desde mi experiencia.
Lo bueno
- Autocompletado inteligente y contextual. Ahorra muchísimo tiempo cuando trabajas con bases de datos con muchas tablas y columnas.
- Historial con búsqueda difusa. Con
fzfinstalado, es rapidísimo encontrar consultas anteriores. - Consultas favoritas con parámetros. Un matadragones para tareas repetitivas.
- Soporte para múltiples formatos de salida. CSV, JSONL, vertical, MySQL, PostgreSQL, etc.
- Comandos internos muy completos. Desde
/watchpara monitorización hasta/llmpara consultas en lenguaje natural. - Multiplataforma. Funciona en Linux, macOS y Windows (WSL).
- Comunidad activa. El proyecto tiene releases casi semanales y responde rápido a los issues.
Lo menos bueno
- Dependencia de Python. Si no tienes Python en el sistema, la instalación no es tan directa como con el cliente nativo. En sistemas mínimos o contenedores, a veces es más rápido usar el
mysqlde toda la vida. - Consumo de recursos algo mayor. Nada preocupante, pero el cliente nativo arranca al instante y MyCLI tarda un segundo más en cargar los metadatos la primera vez que te conectas.
- No tiene soporte nativo para MongoDB, Redis u otras bases de datos. Para eso necesitas pgcli (PostgreSQL) o litecli (SQLite), pero no hay una versión unificada que cubra todos los motores.
- La configuración inicial puede abrumar. El archivo
~/.myclirctiene muchas opciones. Pero el equipo lo ha solucionado con el comandomycli --checkup, que te muestra qué opciones no has configurado y te hace recomendaciones. - Los breaking changes de la v2.0.0. Si actualizaste desde la 1.x, te llevaste alguna sorpresa: el formato de tabla por defecto cambió, se eliminaron variables de entorno obsoletas, y el soporte SSH integrado se reemplazó por
--ssh-jump. Nada grave, pero hay que tenerlo en cuenta al migrar.
Veredicto
MyCLI no es perfecto, pero para el uso diario con MySQL y MariaDB en el terminal, es la mejor opción que he probado. El autocompletado contextual, las consultas favoritas y el historial con fzf hacen que sea mucho más productivo que el cliente nativo. Y si además quieres usar el LLM o transformar datos con Polars, no hay competencia.
Configuración avanzada
El archivo ~/.myclirc se crea automáticamente la primera vez que ejecutas MyCLI. Ahí puedes ajustar desde el formato de las tablas hasta los colores de la interfaz.
Un par de opciones que recomiendo activar.
timing = True auto_vertical_output = True use_keyring = True
Con timing ves cuánto tarda cada consulta. Con auto_vertical_output, si el resultado es muy ancho, MyCLI lo muestra en vertical para que no se te descuadre el terminal. Y con use_keyring las contraseñas se guardan en el llavero del sistema, mucho más seguro que tenerlas en texto plano.
Seguridad
Si compartes el equipo con más gente, protege el archivo de configuración:
chmod 600 ~/.myclirc
Y para conexiones SSH intermedias, usa el nuevo --ssh-jump:
mycli -d produccion --ssh-jump usuario@bastion.example.com
Checkup mode
Si no estás seguro de qué opciones te faltan por configurar, ejecuta:
mycli --checkup
MyCLI analiza tu configuración y te muestra recomendaciones personalizadas. Muy útil después de una actualización.
Si quieres un ejemplo completo del archivo de configuración con DSNs, colores personalizados y consultas favoritas, te he preparado este gist:
[main]
smart_completion = True
multi_line = False
destructive_warning = True
history_file = ~/.mycli-history
log_file = ~/.mycli.log
log_level = INFO
timing = True
table_format = mysql_unicode
syntax_style = monokai
key_bindings = emacs
wider_completion_menu = False
enable_pager = True
auto_vertical_output = True
use_keyring = True
null_string = <null>
numeric_alignment = right
binary_display = hex
keyword_casing = auto
min_completion_trigger = 1
[alias_dsn]
local = mysql://root@localhost:3306/mydb
prod = mysql://admin@prod-server:3306/mydb
desarrollo = mysql://dev@dev-server:3306/mydb
[colors]
completion-menu.completion.current = bg:#ffffff #000000
output.header = #00ff5f bold
bottom-toolbar = bg:#222222 #aaaaaa
[favorite_queries]
tablas = SELECT TABLE_NAME, TABLE_ROWS FROM information_schema.TABLES WHERE TABLE_SCHEMA='$1'
conexiones = SELECT * FROM information_schema.PROCESSLIST
tamanos = SELECT table_name, round(((data_length + index_length) / 1024 / 1024), 2) AS 'Size (MB)' FROM information_schema.TABLES WHERE table_schema = '$1' ORDER BY (data_length + index_length) DESC
Conclusión
MyCLI ha pasado de ser un cliente curioso con autocompletado a convertirse en una herramienta indispensable para cualquiera que trabaje con MySQL o MariaDB en el terminal. Con casi 12.000 estrellas en GitHub, una comunidad activa y releases prácticamente semanales, el proyecto está más vivo que nunca.
Alternativas
Si MyCLI no te convence, tienes otras opciones. Cada una tiene su lugar y su momento:
| Herramienta | Para qué es buena | Cuándo elegirla |
|---|---|---|
| pgcli | PostgreSQL | Si trabajas con PostgreSQL, es la misma filosofía que MyCLI pero para Postgres. Mismo motor, misma experiencia |
| litecli | SQLite | La versión ligera de la familia dbcli para bases de datos SQLite. Ideal para desarrollo y análisis rápidos |
| MySQL Workbench | GUI gráfica | Si prefieres una interfaz gráfica con modelado EER, diagramas y herramientas visuales de diseño |
| DBeaver | Multi-base de datos | Si necesitas una herramienta que funcione con varios motores y no quieres aprender un CLI diferente para cada uno |
De todas formas, mi recomendación es que tengas MyCLI siempre instalado aunque uses una GUI. Para consultas rápidas, monitorización o cuando estás trabajando por SSH en un servidor, no hay nada más práctico que un CLI que entiende lo que escribes.
Cierre
Si usas PostgreSQL, no te preocupes, porque pgcli te espera con la misma filosofía y el mismo motor. Y si trabajas con SQLite, tienes litecli. Los tres forman una trilogía que cubre prácticamente cualquier base de datos que puedas necesitar desde el terminal.
Y tú, ¿has probado MyCLI? ¿Sigues usando el cliente nativo de MySQL?
Más información,