Как стать автором
Обновить

Продуктивная работа с MySQL в командной строке

MySQL
Перевод
Автор оригинала: Stephane Combaudon
Даже если Вы используете GUI-инструменты для работы с MySQL, однажды Вам предстоит столкнуться с командной строкой. Поэтому полезно знать некоторые трюки, которые облегчают работу.

Примечание: эти команды работают только для Unix/Linux.

Постраничный вывод


Большинство GUI-утилит выводят результат постранично, что очень удобно. Но в командной строке mysql Вам высыпет весь результат полностью. Это легко решаемо при помощи команды pager:

mysql> pager more
PAGER set to 'more'
mysql> select title from sakila.film;
+-----------------------------+
| title                       |
+-----------------------------+
| ACADEMY DINOSAUR            |
| ACE GOLDFINGER              |
| ADAPTATION HOLES            |
| AFFAIR PREJUDICE            |
| AFRICAN EGG                 |
| AGENT TRUMAN                |
| AIRPLANE SIERRA             |
| AIRPORT POLLOCK             |
| ALABAMA DEVIL               |
| ALADDIN CALENDAR            |
| ALAMO VIDEOTAPE             |
| ALASKA PHANTOM              |
| ALI FOREVER                 |
| ALICE FANTASIA              |
| ALIEN CENTER                |
| ALLEY EVOLUTION             |
| ALONE TRIP                  |
| ALTER VICTORY               |
| AMADEUS HOLY                |
--Plus--

Другой пример использования этой команды состоит в том, что Вы, например, хотите прикинуть какой размер установить для InnoDB redo логов. Оценка этого размера основывается на изменении значения Log Sequence Number на заданном промежутке времени. Вместо ручного поиска нужной строки в выводе SHOW ENGINE INNODB STATUS (который может быть довольно большим), можно использовать pager:

mysql> pager grep sequence
PAGER set to 'grep sequence'
mysql> show engine innodb status\Gselect sleep(60);show engine innodb status\G
Log sequence number 380166807992
1 row in set (0.41 sec)

1 row in set (1 min 0.00 sec)

Log sequence number 380170274979
1 row in set (0.00 sec)

Чтобы отключить постраничный вывод запустите:

mysql> pager
Default pager wasn't set, using stdout.

Редактирование


При оптимизации запросов в командной строке, очень неудобно их редактировать и дико не хватает текстового редактора. Это тоже решаемо. Например, у Вас есть такой запрос:

mysql> select count(*) from film left join film_category using(film_id) left join category using(category_id) where name='Music';

и Вы хотите изменить LEFT джоины на INNER джоины и использовать верхний регистр для зарезервированных в SQL слов. Вместо унылого ручного редактирования, просто вызовите edit:

mysql> edit

и перед Вами откроется текстовый редактор, содержащий Ваш последний запрос. Редактор по-умолчанию — это vi. Когда Вы закончите редактирование, сохраните изменения и выйдите из редактора. Вы окажетесь обратно в mysql клиенте, где можете ввести ; или \G, чтобы запустить запрос.

Использование tee


В некоторых ситуациях, например когда Вы тестируете набор команд при написании документации или когда Вы в чрезвычайной ситуации, Вы хотите записать запросы, которые выполняете. Консольный клиент предоставляет Вам такую возможность при помощи команды tee, которая запишет в лог все запросы, что Вы запустили и их вывод:

mysql> tee queries.log
Logging to file 'queries.log'
mysql> use sakila
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> select count(*) from sakila;
ERROR 1146 (42S02): Table 'sakila.sakila' doesn't exist
mysql> select count(*) from film;
+----------+
| count(*) |
+----------+
|     1000 |
+----------+
1 row in set (0.00 sec)

mysql> exit

Если сейчас Вы заглянете в файл queries.log, то увидите копию Вашей сессии.

Заключение


Консольный клиент, может быть не так удобен, как графические инструменты, но если “уметь его готовить”, он может быть очень мощным.
Теги:mysqlmysql clientclilinux
Хабы: MySQL
Всего голосов 109: ↑103 и ↓6 +97
Просмотры37.9K

Похожие публикации

MySQL/PHP Application Developer
от 160 000 ₽Cbonds.ruСанкт-ПетербургМожно удаленно
Senior golang developer
до 200 000 ₽ZonatelecomТулаМожно удаленно
PHP-разработчик
от 120 000 до 160 000 ₽ЧИТАЙ-ГОРОДМосква
Бэкенд разработчик
от 150 000 до 250 000 ₽XIAG AGНовосибирск
Программист Битрикс / Программист PHP
от 90 000 до 120 000 ₽Свободные разработчикиМоскваМожно удаленно

Лучшие публикации за сутки