mycli: удобный консольный клиент для MySQL вместо стандартного mysql
Подсветка синтаксиса, автодополнение по именам таблиц и столбцов, избранные запросы: разбираем, чем mycli удобнее стандартного клиента и когда лучше остаться на нём.

Стандартный консольный клиент mysql делает свою работу, но не больше: ни подсветки синтаксиса, ни автодополнения по именам таблиц, ни вменяемого форматирования длинных результатов. Mycli, написанный тем же сообществом, что и pgcli для Postgres, закрывает именно эти неудобства, оставаясь при этом обычным консольным клиентом, без графического интерфейса и лишней магии.
Чем стандартный mysql неудобен на практике
Три вещи раздражают в mysql почти сразу после знакомства. Во-первых, он не подсказывает имена таблиц и столбцов, автодополнение по Tab работает только для ключевых слов SQL и то не всегда. Во-вторых, вывод широкой таблицы с десятком столбцов разваливается на экране в нечитаемую простыню. В-третьих, история запросов хранится как плоский список без контекста, найти нужный SELECT из прошлой недели среди сотен строк почти невозможно.
Автодополнение по таблицам и столбцам
Mycli при подключении к базе читает её схему и дальше подсказывает имена таблиц, столбцов и даже значения после WHERE column =, если в таблице не слишком много строк. Автодополнение контекстное: после FROM предлагаются таблицы, а после SELECT подсказываются столбцы именно той таблицы, которая упомянута в FROM.
pip install -U mycli
mycli -u root -h 127.0.0.1 myproject_dbДля разовой установки без системного Python подойдёт и apt install mycli на Debian и Ubuntu, версия в репозитории чуть более старая, но для повседневной работы разницы почти нет.
Подсветка синтаксиса и человеческое форматирование таблиц
Результаты запросов в mycli выводятся аккуратной таблицей с рамками, а не слипшимся текстом, при этом ширина столбцов подстраивается под терминал. SQL-запрос, который вы печатаете, подсвечивается по синтаксису прямо во время ввода: ключевые слова, строки и числа визуально различимы, опечатку в имени функции проще заметить до отправки запроса.
Избранные запросы вместо копипасты из заметок
Частые запросы, посчитать активных пользователей, найти дубликаты по email, проверить размер таблиц, обычно живут в текстовом файле рядом с проектом, откуда их копируют вручную. В mycli для этого есть команда favoritequery, которая сохраняет запрос под именем прямо в сессии клиента.
favoritequery save active_users SELECT count(*) FROM users WHERE status = 'active';
favoritequery active_users
favoritequery listПосле сохранения запрос вызывается по имени одной командой, без повторного набора условий, а favoritequery list показывает весь список сохранённых запросов для текущего подключения. Избранные запросы хранятся в текстовом конфигурационном файле клиента, поэтому их легко скопировать на другую машину или положить в репозиторий проекта рядом с остальными dev-инструментами, чтобы вся команда пользовалась одним и тем же набором диагностических запросов, а не изобретала свой заново.
Избранные запросы поддерживают параметры через именованные плейсхолдеры, это удобно для запросов, которые повторяются с разными значениями: например, поиск заказов конкретного пользователя по его идентификатору. Вместо переписывания условия каждый раз достаточно вызвать запрос с новым значением параметра, а сам текст запроса остаётся неизменным и живёт в одном месте.
Конфигурация через ~/.myclirc
Поведение клиента настраивается в текстовом файле ~/.myclirc: можно включить или выключить подсветку, задать тему цветов, включить предупреждение перед опасными командами и настроить лимит строк для безопасного вывода.
destructive_warning = Trueспрашивает подтверждение перед потенциально опасными запросамиrow_limit = 1000обрывает вывод очень больших результатов, чтобы не забить терминалsyntax_styleиthemeменяют цветовую схему подсветки
| Возможность | mysql | mycli |
|---|---|---|
| Подсветка синтаксиса | нет | есть |
| Автодополнение по схеме | частично, по ключевым словам | по таблицам и столбцам |
| Избранные запросы | нет | есть, favoritequery |
| Подтверждение опасных команд | нет | настраивается |
Когда стандартный mysql всё же лучше
В продовых скриптах и автоматизации, миграциях, бэкапах, cron-джобах, стоит оставить стандартный mysql: он гарантированно есть на любом сервере без дополнительной установки, не тянет Python-зависимости и ведёт себя предсказуемо в неинтерактивном режиме. Mycli создан для интерактивной работы разработчика за терминалом, а не для встраивания в пайплайны.
Подключение к удалённым базам и SSL
Mycli поддерживает те же параметры подключения, что и стандартный клиент: хост, порт, имя пользователя и пароль передаются через те же флаги -h, -P, -u и -p, а соединение по SSL настраивается через переменные ssl-ca, ssl-cert и ssl-key в том же формате, что и в my.cnf. Это удобно, если в команде уже есть готовый конфигурационный файл для стандартного клиента: его можно переиспользовать без изменений, mycli читает секцию [client] из ~/.my.cnf так же, как и mysql.
Для работы с несколькими окружениями, локальная база, стейджинг, продовая реплика только для чтения, удобно заводить отдельные алиасы в шелле на каждое подключение, а не держать единую команду с разными флагами. Это снижает риск случайно выполнить деструктивный запрос не в том окружении, особенно если в приглашении mycli настроено отображение текущей базы и хоста, что по умолчанию включено.
Отдельно стоит упомянуть работу с большими дампами и экспортом: mycli не заменяет mysqldump и не предназначен для пакетной выгрузки данных, для этого остаются специализированные утилиты. Роль mycli ограничена интерактивным исследованием данных и написанием запросов, и попытка использовать его как инструмент миграции обычно приводит к менее предсказуемому поведению, чем при использовании выделенных для этого программ.
Полезная мелочь для ежедневной работы: mycli умеет вертикальный вывод результата, когда строка не помещается в ширину терминала даже после автоподбора ширины столбцов. Команда \G в конце запроса, тот же синтаксис, что в стандартном mysql, переключает вывод построчно на каждое поле вместо таблицы, это особенно удобно при просмотре одной записи с десятками столбцов, где построчный вывод читается заметно легче таблицы с переносами.
Автодополнение mycli работает и для имён баз данных после команды USE, и для системных переменных после SHOW VARIABLES LIKE, то есть покрывает не только пользовательские запросы, но и администраторские команды, которые разработчик обычно печатает реже и хуже помнит наизусть. На практике это снижает число обращений к документации прямо во время работы за терминалом.
Есть и более узкие форки и альтернативы, вроде клиентов с поддержкой нескольких диалектов СУБД сразу, но для разработчика, который работает конкретно с MySQL или MariaDB, они обычно избыточны: лишняя универсальность редко окупается, если нужен именно быстрый и удобный клиент под одну конкретную базу, а не универсальный инструмент на все случаи сразу.
Переход на mycli не требует отказа от привычек, накопленных со стандартным клиентом: большинство команд и флагов совпадают буквально, а новые возможности, автодополнение, подсветка, избранные запросы, включаются сами по умолчанию и просто ускоряют уже привычную работу, а не заставляют переучиваться с нуля.
Частые вопросы
Работает ли mycli с MariaDB так же, как с MySQL?
Да, mycli подключается по тому же протоколу, который использует и MariaDB, различия в диалекте SQL клиент не интерпретирует сам, он просто передаёт запросы серверу. Автодополнение по схеме работает одинаково для обеих баз.
Можно ли использовать mycli в неинтерактивных скриптах?
Технически можно передать запрос через параметр -e, но для скриптов и автоматизации лучше оставить стандартный mysql: он предсказуемее в коде выхода и не требует Python-окружения на сервере, где выполняется скрипт.
Безопасно ли хранить пароль в конфигурации mycli?
Хранить пароль открытым текстом в конфигурационном файле не стоит ни для одного клиента. Пароль лучше передавать через переменную окружения или вводить интерактивно при подключении, а постоянные доступы держать в менеджере секретов.



