Статьи

DBA 101: иногда забытая функциональность в клиенте MySQL

Этот пост был изначально написан Дмитрием Вановербеке

MySQL клиент имеет некоторые функции, которые некоторые из нас никогда не используют. Зачем вам их использовать, и какова дополнительная ценность этого?

У каждого администратора БД и разработчика был момент, когда ему или ей нужно было подключиться к базе данных MySQL с помощью инструмента командной строки. Поэтому я записал объяснение некоторых команд командной строки, которые вы можете вставить в CLI, большинство из них дают дополнительную ценность и делают ваш опыт работы с клиентом более приятным.

незамедлительный

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

mysql >\R Production >
PROMPT set to 'Production > '

Или вы можете пойти немного дальше и визуализировать пользователя, хост и активную базу данных в:

mysql > \R \u@\h [\d]>
PROMPT set to '\u@\h [\d]>'
root@testbox [test]>

редактировать

В некоторых ситуациях редактирование запроса в редакторе вместо cli может иметь несколько улучшений. Это дает вам возможность исправить опечатки, внимательно изучить запросы, прежде чем отправлять их и т. Д.
Если вы хотите отредактировать запрос, который вы делаете, в редакторе по умолчанию вместо использования cli.

mysql> \e

Появится редактор, в котором вы можете создать свой запрос (ы).

use sakila;
select * from city
limit 10;
~                                                                                                                                                                                                                                            
~                                                                                                                                                                                                                                            
~

После закрытия и установки разделителя в cli этот запрос будет выполняться к базе данных при выводе в приглашении.

 mysql> \e
-> ;
+---------+--------------------+------------+---------------------+
| city_id | city               | country_id | last_update         |
+---------+--------------------+------------+---------------------+
|       1 | A Corua (La Corua) |         87 | 2006-02-15 04:45:25 |
|       2 | Abha               |         82 | 2006-02-15 04:45:25 |
|       3 | Abu Dhabi          |        101 | 2006-02-15 04:45:25 |
|       4 | Acua               |         60 | 2006-02-15 04:45:25 |
|       5 | Adana              |         97 | 2006-02-15 04:45:25 |
|       6 | Addis Abeba        |         31 | 2006-02-15 04:45:25 |
|       7 | Aden               |        107 | 2006-02-15 04:45:25 |
|       8 | Adoni              |         44 | 2006-02-15 04:45:25 |
|       9 | Ahmadnagar         |         44 | 2006-02-15 04:45:25 |
|      10 | Akishima           |         50 | 2006-02-15 04:45:25 |
+---------+--------------------+------------+---------------------+
10 rows in set (0.03 sec)

тройник

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

Пример:

mysql> \T /tmp/tee.log
Logging to file '/tmp/tee.log'

Это обеспечит в выводе выполняемые вами запросы.

dim0@testing101:~$ cat /tmp/tee.log
mysql> select * from city limit 5;
+---------+--------------------+------------+---------------------+
| city_id | city               | country_id | last_update         |
+---------+--------------------+------------+---------------------+
|       1 | A Corua (La Corua) |         87 | 2006-02-15 04:45:25 |
|       2 | Abha               |         82 | 2006-02-15 04:45:25 |
|       3 | Abu Dhabi          |        101 | 2006-02-15 04:45:25 |
|       4 | Acua               |         60 | 2006-02-15 04:45:25 |
|       5 | Adana              |         97 | 2006-02-15 04:45:25 |
+---------+--------------------+------------+---------------------+
5 rows in set (0.00 sec)

Всякий раз, когда у вас есть доступ только к интерфейсу MySQL, и вам нужен доступ к одному из созданных вами файлов, чтобы увидеть, что выводится, вы можете сделать это, используя \! нажатие клавиши, которая будет выполнять системные команды.

Выполнение команды оболочки из интерфейса командной строки MySQL:

mysql> \! cat /tmp/tee.log
mysql> select * from city limit 5;
+---------+--------------------+------------+---------------------+
| city_id | city               | country_id | last_update         |
+---------+--------------------+------------+---------------------+
|       1 | A Corua (La Corua) |         87 | 2006-02-15 04:45:25 |
|       2 | Abha               |         82 | 2006-02-15 04:45:25 |
|       3 | Abu Dhabi          |        101 | 2006-02-15 04:45:25 |
|       4 | Acua               |         60 | 2006-02-15 04:45:25 |
|       5 | Adana              |         97 | 2006-02-15 04:45:25 |
+---------+--------------------+------------+---------------------+
5 rows in set (0.00 sec)

положение дел

В некоторых случаях вы хотели бы видеть параметры, в настоящее время активные на вашем клиенте MySQL. Поэтому вы можете использовать команду \ s. Эта команда уточнит, какие из опций активны на клиенте. Информация, которая отображается, не следует путать с SHOW VARIABLES. который сосредоточен на переменных соединения.

Запустите информацию о состоянии вашего соединения, используя \ s :

mysql> \s>
--------------
mysql  Ver 14.14 Distrib 5.6.15, for Linux (x86_64) using  EditLine wrapper
 
Connection id:        13149
Current database:    sakila
Current user:        root@localhost
SSL:            Not in use
Current pager:        stdout
Using outfile:        ''
Using delimiter:    ;
Server version:        5.6.15-63.0-log Percona Server (GPL), Release 63.0
Protocol version:    10
Connection:        127.0.0.1 via TCP/IP
Server characterset:    latin1
Db     characterset:    latin1
Client characterset:    utf8
Conn.  characterset:    utf8
TCP port:        3306
Uptime:            10 days 23 hours 32 min 57 sec
 
Threads: 1  Questions: 1203169  Slow queries: 43745  Opens: 626  Flush tables: 1  Open tables: 178  Queries per second avg: 1.268
--------------

Чисто

Очистка вашего текущего входного запроса. Используйте \ c, чтобы очистить поле ввода:

mysql> SELECT *
-> FROM city
-> \c
mysql>

пейджер

Честно говоря, одним из наиболее полезных инструментов в mysqlclient является пейджер. Для людей, склонных печатать запросы, но забывающих добавить ограничение, если им не нужно просматривать полный вывод.
«\ P less» выводит данные запроса с использованием команды UNIX less.

Вы также можете выбрать вывод результатов запроса в формате для анализа в файловой системе, используя ‘\ P cat> voila.log’ .

например:

mysql> \P cat > /tmp/voila.log
PAGER set to 'cat > /tmp/voila.log'
mysql> SELECT *  FROM city;
600 rows in set (0.01 sec)

Это создаст файл ‘voila.log’, в котором сохраняются только выходные данные запроса. Это решение имитирует запрос SELECT INTO OUTFILE.

Во время оптимизации рабочей нагрузки может быть интересно посмотреть, имеет ли измененный запрос тот же вывод запроса

 mysql >\P md5sum
PAGER set to 'md5sum'
root@127.0.0.1 [sakila]>select * from city limit 10;
449d5bcae6e0e5b19e7101478934a7e6  -
10 rows in set (0.00 sec)
 
mysql >select city_id, city, country_id, last_update FROM city LIMIT 10 ;
449d5bcae6e0e5b19e7101478934a7e6  -
10 rows in set (0.00 sec)

Другие команды

Есть, конечно, несколько других вариантов, которые вы можете использовать. Вы можете получить обзор всех внутренних функций cli через \ ?.

Отключение команд tee и pager, описанных в этом блогерстве, можно сделать с помощью \ t или notee, \ n или \ nopager.