10 cекретов консольного клиента MySQL

Рубрика: MySQL | 19 October 2007, 13:24 | Vadim Voituk

Всем известно, что в пакете с СУБД MySQL поставляется примитивный консольный клиент.
Но при этом мало кто им всерьез пользуется, предпочитая GUI- и WEB-аналоги (например MySQL Front, phpMyAdmin). Большинство аргументирует это тем, что консольный mysql неудобен.
После 2х лет работы исключительно с консольным клиентом, я с ними категорически не согласен, и уверен что консольный mysql – это мощный и удобный инструмент, как vim, только в своей нише.

Большинство описанных возможностей актуальны для всех версий MySQL, но некоторые будут работать начиная с версии 4.1 и выше.

1. \? , help
Если выполнить без параметров, то отобразится справка по всем командам, но если после команды указать имя функции или оператора MySQL, то с сервера будет загружена справка по указанной функции.
Пример:

mysql> help select
# или
mysql> \? LOAD DATA
# или
mysql> help contents #для отображения списка разделов справки

2. \R , prompt
Устанавливает внешний вид приглашения командной строки MySQL. Также можно указывать с помощью переменной окружения MYSQL_PS1 или параметром –prompt=… при запуске клиента mysql.
Например:

 mysql> prompt (\u@\h) [\d]>
PROMPT set to '(\u@\h) [\d]>'
(root@localhost) [test]>

3. \P, pager и \n, nopager
Устанавливает/отключает утилиту для просмотра результата запроса.
Пример:

>\Pless
PAGER set to 'less'

Об этой возможности я уже писал раньше.
Это значение можно указать при старте клиента mysql параметром –pager=…

4.\T, tee и \t, notee
Включает/выключает сохранение в файл всех введенных команд, а также их результата.

mysql>tee hello.txt
Logging to file 'hello.txt'
# ... тут можно выполнять запросы ...
mysql> notee
Outfile disabled.

Удобно если нужно выполнить несколько запросов, а потом методом copy-paste подготовить по полученным данным отчет в Excel.

5. \W, warnings и \w nowarning
Включает/выключает вывод на экран предупреждений (warnings) сразу после выполнения запроса, который их вызвал. Включение данной опции по умолчанию позволяет существенно сэкономить время на поиске причин некорректного выполнения запроса (особенно что скасается DATA TRUNCATION). Можно также указать при старте клиента параметром –show-warnings.

6. \G, ego
Выполнение указанного запроса, и вывод результата в развернутом, вертикальном виде. Очень удобно, если результат запроса не помещается в ширину экрана

>show databases\G
*************************** 1. row ***************************
Database: information_schema
*************************** 2. row ***************************
Database: mysql
*************************** 3. row ***************************
Database: test
3 rows in set (0.00 sec)

7. \., source
Загружает и выполняет SQL-инструкции из файла. Можно использовать для загрузки дампа в базу.

mysql> \. /home/vadim/dump.sql

8. \e, edit
Очень удобная команда, о которой я узнал недавно. Позволяет редакировать текущий SQL-запрос в системном редакторе (переменная окружения EDITOR).
Небольшой хинт для тех, кто использует vim как стандартный редактор – добавляем в .vimrc такую строку:
[code]au BufNewFile,BufRead *tmp/sql* set syntax=sql[/code]
и в результате имеем ещё и подсветку синтаксиса SQL, которая при редактировании запроса включается автоматически.

9. \! , system
Выполенение команда в системе не выходя из консоли mysql

\! ls -la /home/vadim/*.sql

10. -U, –i-am-a-dummy
Этот параметр консольного mysql, не позволяет выполнять обновления и удаления данных если в запросе не указан PRIMARY KEY. Обязательно насильно включать новичкам, а также тем, кто при выполнении DELETE/UPDATE запросов забывает писать оператор WHERE :)

Я специально тут не упямянул такие команды как use (\u), rehash (\#), clear (\c) и go (\g) так как считаю их общеизвестными и понятными абсолютно всем.
Вот собственно и все, надеюсь эти советы будут полезны и используемы.
Также буду признателен, если читатели поделятся своими mysql-related tips&tricks.

Комментариев: 25

25 Responses to “10 cекретов консольного клиента MySQL”

Комментарии:

  1. Скакунов Александр

    Офигительно!

  2. vadim

    Спасибо. А что именно?

  3. Скакунов Александр

    У нас вечно вставал вопрос, а в какой собсно базе мы щас работаем. Научились пускать такой запрос: SELECT DATABASE();

    А оказалось, можно просто промпт настроить как ты написал или в my.cnf…

  4. Скакунов Александр

    Еще не знал (понравилось) tee (логирование) и \! (внешняя команда). Постоянно делал ворк-эраунды…

  5. eugene

    >> Всем известно, что в пакете с СУБД MySQL поставляется примитивный консольный клиент.
    Но при этом мало кто им всерьез пользуется, предпочитая GUI- и WEB-аналоги (например MySQL Front, phpMyAdmin).

    Ну вы даёте, прям все так и пользуются админками вместо консоли. Небось только пых-пых программеры. Недавно видел такого, говорю mysql на 3306-м порту. В аську жаловался мне, что на том порту Phpmysqladmin нету, ай-яй-яй!!!

  6. vadim

    @eugene: Причем тут вообще PHP-программисты вообщем и ваш недоученный в часности?
    Вы на примере одного неудачного случая делаете поспешные обобщенные выводы.

  7. eugene

    Прошу прощения, если оскорбил кого-то, просто показалось, что эта фраза не совсем подходит – “Но при этом мало кто им всерьез пользуется”. Да, хороший гуй может ускорить работу во многих случаях, но команды знать надо, чтобы не сделать другим смешно…

  8. vadim

    @eugene: Это очевидно для тех разработчиков, которые “дружат” с unix и для них работа с консольными утилитами – обычное дело. Но не стоит забывать что некоторые программисты не не умеют / не желают работать в unix. Чаще всего таких встречаю среди Java-разработчиков – им даже не нужно знать какая ОС на их production сервере.
    В противовес LAMP разработчики как правило комфортно чуствуют себя в unix консоли, – к ним фраза “мало кто им всерьез пользуется” не относится.
    Судя по всему Евгений принадлежит к касте вторых :)

  9. Рослый

    Полезная статейка, спасибо!

  10. ICE

    Это конечно всё круто, полезно и знать нужно, но всёже работа с MySQL через GUI на порядок ускоряет работу с БД. Сам пользуюсь MySQL Front, к сожалению его перестали поддерживать :(. Думаю бессмысленно спорить что с повседневными задачами, такими как создание таблиц, представлений, ф-ций, триггеров и их отладка, консоль не лучшая среда.

  11. vadim

    Конечно же удобнее пользоваться MySQL Front чем вбивать DDL в консоль, но если БД находится на удаленном сервере (что неминуемо при стремительном росте проекта), то MySQL Front – нам не помощник.
    Посему знание возможностей консольного MySQL – это сродни умения пользоваться консольным редактором: неудобно, некрасиво, но иногда надо.

  12. ICE

    Это почему же не помошник? Вы ведь не исправляете БД прям на сервере, или исправляете? Я лично делаю так.
    Делаю дамп на удалённой машине, копирую его домой. Разворачиваю её, провожу необходимые правки (если нужно отредактировать например процедуру) и разворачиваю БД назад на удалённый. Тут есть варианты, если изменения коснулись только некоторых объектов БД, например пара триггеров и процедура, то в разворачиваемый дамп кладутся только они. Я не утверждаю, что консоль не нужно вообще, просто пользование её скорее исключение (именно для полноценной работы с БД) чем правило. Конечно же без консоли не обойтись если необходимо бэкапить – ресторить БД, тут она незаменимый инструмент.

    PS. каждый инструмент должен применятся по назначению и не стоит учится линейкой забивать гвозди, для этого существует молоток :)

  13. vadim

    Вы ведь не исправляете БД прям на сервере, или исправляете?

    Или исправляю…
    Хотя бы потому что сделать дапм базы размером в 20-30 ато и 500 Гб очень неблагодарное занятие :)
    Да и за “копирую его домой” можно от службы безопасности по шее получить :)

    P.S. Я думаю и Саня Скакунов тоже не дампит себе БД на локальную машину ввиду подобных причин.

  14. ICE

    К сожалению не знаю кто такой Александр Скакунов, но можно например не всю БД сливать, а необходимые таблицы или другие объекты БД.

    P.S. наверное я ещё не сталкивался с такой уж жёсткой политикой безопасности…

  15. vadim

    @ice: Александр Скакунов – это первый комментатор к этому посту :) Читай выше…
    Я его упомянул потому что догадываюсь о размерах БД, с какими ему приходится работать.

    Судя по всему вы не сталкивались с действительно большими проектами, где связей между таблицами сотни и выделить и сдампить только необходимые таблицы нет возможности.
    Такая ситуация чаще всего наблюдается в результате долгосрочного еволюционирования проекта, и как результат огромного количества “заплаток” и “притянутых за уши связей”

  16. Скакунов Александр

    Таким образом (стянул-поправил-на место) мне неудобно работать даже с небольшими таблицами, в которых хотя бы больше 10-20 мегабайт. Править по живому проще, но и уровень ответственности выше.

    Так что у обоих подходов есть свои плюсы.

  17. Скакунов Александр

    Ну вот, дожили – полез сюда смотреть команду (\.) как в хелп :]

  18. vadim

    :)

  19. vanja K.

    А я когда то правил на сервере и написал ооооооочень страшную команду по ошибке DELETE FROM … – так рухнула 1 GB база статей (бекапов естественно небило) :(

  20. Melon

    :) пользуюсь только консольным клиентом Mysql
    хоть и нравиться navicat

  21. пых-пых программист

    phpmyadmin пользуется популярностью среди веб-программистов не потому что он более удобен (а он ничем не удобен :) а тем что в подавляющем большинстве случаев альтернативы просто нет! Представьте себе сайт с базой данных на виртуальном-хостинге. MySQL, как правило, слушает только локальный интерфейс и соединиться снаружи с портом 3306 при помощи десктопной программы как кто-то тут предлагал нельзя, а ssh тоже далеко не всегда не дают – зайти удаленно на сервер и запустить консольный mysql на хостинге тоже не получится. Остается только phpmyadmin независимо от личных предпочтений…

  22. Vadim Voituk

    Ну у phpMyAdmin есть менее монстрообразные конкуренты.
    Например sqlbuddy.

  23. Олег

    Зачем мучать себя (и остальных!) работой в консоли, если есть такие тулы для мускла как dbForge Studio for MySQL (русская версия к тому же бесплатна).

  24. Илья

    Спасибо. В закладки.

Leave a Reply