MyCLI: el terminal CLI con autocompletado que necesitas para MySQL y MariaDB

Vistas: 21923
MyCLI: el terminal CLI con autocompletado que necesitas para MySQL y MariaDB

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étricaDetalle
Versión actual2.5.1 (julio 2026)
LicenciaBSD-3-Clause
LenguajePython 3.10+
Estrellas GitHub~11.900 ⭐
Forks~695
Commits~3.441
Repositoriogithub.com/dbcli/mycli
Web oficialmycli.net
CompatibilidadMySQL, 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.

ComponenteFunción
prompt_toolkit 3.xMotor de interfaz de terminal. Maneja el teclado, los atajos, el multilínea, los menús de autocompletado
sqlglot + sqlparseAnalizador SQL. Entiende la estructura de tu consulta para saber qué autocompletar en cada contexto
PygmentsResaltado de sintaxis. Colorea keywords, strings, números y comentarios SQL
PyMySQLConector nativo con MySQL. Gestiona la conexión, las consultas y los resultados
rapidfuzzBúsqueda difusa. Te permite escribir djmi y encontrar django_migrations
ClickCLI 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 * FROM y pulsas Tab, solo te muestra nombres de tablas.
  • Cuando escribes SELECT * FROM usuarios WHERE y 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 = True en ~/.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.

TemaEstilo
monokaiOscuro, el clásico de toda la vida
vimInspirado en el editor Vim
friendlyPara terminales claros
xcodeEstilo Xcode
paraiso-darkOscuro 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.

TeclaFunción
TabForzar autocompletado
C-spaceIniciar autocompletado
C-rBúsqueda en historial (fzf si está instalado)
F2Activar o desactivar SmartCompletion
F3Activar o desactivar modo multilínea
F4Alternar entre modo VI y Emacs
ESC-EnterSalto 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: fzf para búsqueda en el historial, python3-pygments para 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 fzf instalado, 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 /watch para monitorización hasta /llm para 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 mysql de 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 ~/.myclirc tiene muchas opciones. Pero el equipo lo ha solucionado con el comando mycli --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:

myclirc
[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:

HerramientaPara qué es buenaCuándo elegirla
pgcliPostgreSQLSi trabajas con PostgreSQL, es la misma filosofía que MyCLI pero para Postgres. Mismo motor, misma experiencia
litecliSQLiteLa versión ligera de la familia dbcli para bases de datos SQLite. Ideal para desarrollo y análisis rápidos
MySQL WorkbenchGUI gráficaSi prefieres una interfaz gráfica con modelado EER, diagramas y herramientas visuales de diseño
DBeaverMulti-base de datosSi 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,

Deja una respuesta