4.8.2 mysql
, Утилита командной строки
Утилита командной строки mysql
является простой SQL-оболочкой (с
возможностями библиотеки readline
проекта GNU). Она поддерживает
интерактивный и неинтерактивный режимы. В интерактивном режиме результаты
запроса представляются в ASCII-формате. При использовании в
неинтерактивном режиме (например, в качестве фильтра) результат
представляется в текстовом формате с символом табуляции в качестве
разделителя (выходной формат можно изменить при помощи параметров
командной строки). Сценарии можно запускать, как показано ниже:
shell> mysql database < script.sql > output.tab
Если возникают проблемы из-за недостатка памяти на данном клиенте,
применяйте параметр --quick
! Это заставит mysql
использовать функцию
mysql_use_result()
вместо функции mysql_store_result()
для получения
результирующей выборки данных.
Использовать mysql
очень легко. Запустите mysql database
или mysql
--user=user_name --password=your_password databas
e. Наберите SQL-команду
прямо в командной строке, завершив ее одним из символов: `;', `\g' или
`\G', и нажмите клавишу ``Ввод''.
Утилита командной строки mysql
поддерживает следующие параметры:
-?, --help
-
Вывод справочной информации об использовании программы и выход из нее.
-A, --no-auto-rehash
-
Отключает автоматическое рехеширование.
rehash
следует использовать для
получения хеша таблиц и полей. Это обеспечивает более быстрый старт mysql
.
--prompt=...
-
Устанавливает приглашение на ввод команд в заданном формате.
-b, --no-beep
-
Выключает звуковой сигнал об ошибке.
-B, --batch
-
Выводит результаты в пакетном режиме с символом табуляции в качестве
разделителя, каждая строка с новой строки. Файл истории не используется.
--character-sets-dir=...
-
Директория, где находятся наборы символов.
-C, --compress
-
Использовать сжатие данных в протоколе сервер/клиент.
-#, --debug[=...]
-
Журнал отладки. Значение по умолчанию - 'd:t:o,/tmp/mysql.trace'.
-D, --database=...
-
Имя используемой базы данных. Большей частью применяется в
конфигурационном файле `my.cnf'.
--default-character-set=...
-
Установить набор символов по умолчанию.
-e, --execute=...
-
Выполнить команду и завершить программу (вывод результата как и для
--batch
).
-E, --vertical
-
Вывести результаты запроса (строки) по вертикали. Можно произвести вывод
подобным образом и без данного параметра, завершая команды символами
\G
.
-f, --force
-
Продолжать обработку даже при обнаружении ошибки SQL.
-g, --no-named-commands
-
Выключает именованные команды. Следует использовать только команды вида \*
либо применять именованные команды только в начале строки, заканчивающейся
символом `;'. Начиная с версии 10.9 клиент запускается с этой опцией,
включенной по умолчанию! С опцией
-g
, однако, длинные команды все еще
работают с первой строки.
-G, --enable-named-commands
-
Разрешает именованные команды. Допускаются длинные команды, а также
укороченные команды вида \*.
-i, --ignore-space
-
Игнорировать пробел после имен функций.
-h, --host=...
-
Подсоединиться к базе данных на указанном хосте.
-H, --html
-
Вывести выходные данные в виде HTML.
-L, --skip-line-numbers
-
Не указывать номера строк для ошибок. Полезно для сравнения результирующих
файлов, включающих сообщения об ошибках.
--no-pager
-
Блокирует пейджер (программа постраничного вывода) и выводит результат в
стандартный вывод stdout (в Unix). Смотрите также команду
\
h
(интерактивная помощь).
--no-tee
-
Блокирует выходной файл. Смотрите также команду
\h
(интерактивная помощь).
-n, --unbuffered
-
Очищать буфер после каждого запроса.
-N, --skip-column-names
-
Не указывать имена столбцов в результатах.
-O, --set-variable var=option
-
Установить значение переменной. Список используемых переменных выводится
через
--help
.
-o, --one-database
-
Обновить только базу данных, установленную по умолчанию. Позволяет
пропускать обновления другой базы данных в журнале обновления.
--pager[=...]
-
Устанавливает тип данных вывода. По умолчанию это переменная окружения
PAGER
. Ее возможные значения - less, more, cat [> имя файла], и т.д. См.
также команду \h (интерактивная помощь). Этот параметр не работает в
пакетном (batch) режиме. Пейджер работает только под Unix.
-p[password], --password[=...]
-
Пароль, используемый при подсоединении к серверу баз данных. Если в
командной строке пароль не указан, то он запрашивается у пользователя. При
использовании краткой формы
-p
не оставляйте пробел между параметром и
значением пароля.
-P --port=...
-
Номер порта TCP/IP, используемый для подсоединения.
-q, --quick
-
Не кэшировать результат. Выводить его строка за строкой так, как он
приходит от сервера. Это может замедлить скорость работы сервера, если
вывод результата будет приостановлен. Файл истории не используется.
-r, --raw
-
Показывать значения столбцов без какого-либо преобразования. Используется
с
--batch
.
-s, --silent
-
Режим молчания. Выводить только сообщения об ошибках.
-S --socket=...
-
Файл сокета, используемый для подсоединения.
-t --table
-
Выводить результат в табличном формате. Установлено по умолчанию для
непакетного режима.
-T, --debug-info
-
Выводить некоторые отладочные данные при выходе из программы.
--tee=...
-
Присоединить что-либо к выходному файлу. Смотрите также команду \h
(интерактивная помощь). Этот параметр не работает в пакетном режиме.
-u, --user=#
-
Имя пользователя MySQL, если этот пользователь не является активным в
данное время.
-U, --safe-updates[=#], --i-am-a-dummy[=#]
-
Разрешает выполнять только операции
UPDATE
и DELETE
, используя ключи.
Более полная информация об этом параметре приведена ниже. Можно сбросить
данный параметр, установив в конфигурационном файле `my.cnf' значение
аргумента --safe-updates=0
.
-v, --verbose
-
Более расширенный режим вывода результатов (
-v -v -v
дает формат вывода
таблицы).
-V, --version
-
Вывод информации о версии и выход из программы.
-w, --wait
-
Если соединение с сервером упало, подождать и попытаться восстановить его,
вместо того, чтобы прервать работу.
Через параметры командной строки -O
или --set-variable
можно также
установить следующие переменные:
Имя переменной | По умолчанию | Описание
|
connect_timeout | 0 | Число секунд до истечения времени ожидания соединения
|
max_allowed_packet | 16777216 | Максимальная величина пакета, посылаемого/принимаемого с сервера
|
net_buffer_length | 16384 | Размер буфера для TCP/IP и сокетного соединения
|
select_limit | 1000 | Автоматическое ограничение количества команд SELECT при использовании --i-am-a-dummy
|
max_join_size | 1000000 | Автоматическое ограничение количества связанных строк при использовании --i-am-a-dummy.
|
Если ввести в командной строке help
, программа mysql
выведет список
поддерживаемых ею команд:
mysql> help
Команды MySQL
help (\h) Выводит данный текст.
? (\h) Синоним для help.
clear (\c) Команда очистки.
connect (\r) Снова подключиться к серверу.
Дополнительные аргументы - db и host.
edit (\e) Редактировать текущую команду с помощью $EDITOR.
ego (\G) Послать текущую команду MySQL серверу
и вывести результат по вертикали.
exit (\q) Выйти из программы. То же что и quit.
go (\g) Послать текущую команду MySQL серверу.
nopager (\n) Блокировать пейджер, выводить через stdout.
notee (\t) Не добавлять записи в выходной файл outfile.
pager (\P) Установить PAGER [to_pager].
Выводить результаты запроса через PAGER.
print (\p) Вывести текущую команду.
prompt (\R) Изменить формат приглашения на ввод команд mysql.
quit (\q) Выйти из программы.
rehash (\#) Восстановить таблицу хэшей.
source (\.) Запустить на выполнение файл с SQL-сценарием.
Указать имя файла в качестве аргумента.
status (\s) Получить информацию о статусе сервера.
tee (\T) Установить параметр outfile [to_outfile].
Присоединить что-либо к данному выходному файлу.
use (\u) Использовать другую базу данных.
Указать имя базы данных в качестве аргумента.
Команда pager
работает только под Unix.
Команда status
дает информацию о текущем соединении и используемом
сервере. Если вы работаете в режиме --safe-updates
, команда status
также
выведет значения переменных для mysql
, которые влияют на ваши запросы.
Для начинающих рекомендуется пользоваться программой mysql
с установленным
параметром (введен в MySQL 3.23.11) --safe-updates
(или --i-am-a-dummy
для
пользователей, выполнивших DELETE FROM table_name
, но забывших указать
аргументы в WHERE
). В этом случае mysql
при установлении соединения
посылает следующую команду MySQL-серверу:
SET SQL_SAFE_UPDATES=1,SQL_SELECT_LIMIT=#select_limit#,
SQL_MAX_JOIN_SIZE=#max_join_size#"
где #select_limit#
и #max_join_size#
- переменные, которые можно
установить из командной строки mysql. See section 5.5.6 Синтаксис команды SET
.
Результат этого следующий:
Несколько полезных советов по использованию клиента mysql
:
Некоторые данные более удобочитаемы при выводе их по вертикали вместо
обычно используемого горизонтального окна вывода. Например, текст, который
больше по длине, чем по ширине, и содержит в себе много новых строк, часто
намного легче читать в вертикальном представлении.
mysql> SELECT * FROM mails WHERE LENGTH(txt) < 300 lIMIT 300,1\G
*************************** 1. row ***************************
msg_nro: 3068
date: 2000-03-01 23:29:50
time_zone: +0200
mail_from: Monty
reply: [email protected]
mail_to: "Thimble Smith" <[email protected]>
sbj: UTF-8
txt: >>>>> "Thimble" == Thimble Smith writes:
Thimble> Hi. I think this is a good idea. Is anyone familiar with UTF-8
Thimble> or Unicode? Otherwise, I'll put this on my TODO list and see what
Thimble> happens.
Yes, please do that.
Regards,
Monty
file: inbox-jani-1
hash: 190402944
1 row in set (0.09 sec)
-
Для входа в систему можно использовать опции команды tee. Она может
быть запущена с помощью параметра
--tee=...
для mysql
или
интерактивно из командной строки вводом команды tee
. Все
представляемые на экране данные будут также добавлены к заданному
файлу. Это может быть очень полезно для целей отладки программы.
Утилиту tee можно блокировать из командной строки командой notee
.
Повторный запуск команды tee
снова включит журналирование. Если при
этом параметр для команды tee
не указан, то будет использоваться
предыдущий файл. Следует учесть, что команда tee
будет записывать
результаты в файл после каждой выполненной команды, как раз перед
появлением командной строки для ввода очередной команды.
-
При помощи опции
--pager[=...]
стал возможным просмотр или поиск
результатов в интерактивном режиме с помощью Unix-программ less
, more
или иных подобных. Если явно не указать аргумент в этом параметре,
клиент mysql
будет искать переменную окружения PAGER
и установит
значение pager
. Программу pager
также можно запустить из интерактивной
командной строки командой pager
и остановить командой nopager
. Команда
может принимать аргумент, который является необязательным; pager
будет
установлена в значение этого аргумента.. Команда pager
может быть
вызвана и без аргумента, но это требует использования опции --pager
или соответствующей установки по умолчанию стандартного вывода stdout
.
Команда pager работает только в Unix, поскольку использует функцию
popen()
, отсутствующую в Windows. Вместо этого в Windows можно
использовать параметр tee
, хотя в ряде ситуаций это менее удобно, чем
применение команды pager
.
-
Несколько советов касательно команды
pager
: Ее можно использовать для
записи в файл:
mysql> pager cat > /tmp/log.txt
и результаты будут направлены только в файл. Вызываемые командой pager
программы могут принимать любые допустимые опции:
mysql> pager less -n -i -S
Обратите особое внимание на опцию -S в вышеприведенном примере. Она может
быть очень полезна при просмотре результатов. Попробуйте применить ее с
горизонтальным выводом (завершайте команды символами '\g', or ';') и с
вертикальным (в конце команд - '\G'). Очень громоздкие результаты вывода
иногда трудно бывает прочесть с экрана, в этом случае команда less с
опцией -S позволит просмотреть результаты в интерактивном режиме слева
направо, при этом при появлении строк с длиной больше, чем ширина экрана,
их вывод будет продолжен вывод с новой строки. Вывод данных в таких
случаях получается более удобочитаемым. При интерактивном вызове команды
less с опцией '-S' можно переключать режим ее работы (включено/выключено)
из командной строки. Чтобы получить дополнительную информацию относительно
less, обращайтесь к описанию команды 'h'.
-
В заключение отметим (если вы этого еще не поняли из предыдущих
примеров), что существует возможность комбинировать очень сложные
способы обработки результатов. Так, в следующем примере результаты
будут посланы в два различных каталога, смонтированных на двух
различных жестких дисках в /dr1 and /dr2, и, несмотря на это,
результаты можно увидеть на экране посредством команды less:
mysql> pager cat | tee /dr1/tmp/res.txt | \
tee /dr2/tmp/res2.txt | less -n -i -S
-
Приведенные выше функции можно тоже комбинировать: запустив
tee
и
установив pager
в less
, можно просматривать результаты с помощью
Unix-команды less
и при этом одновременно производить запись в файл.
Разница между служебной Unix-утилитой tee
, используемой в программе
pager
, и встроенной в клиент mysql
командой tee
заключается в том, что
встроенная команда tee
работает даже в том случае, если в Unix утилита
tee
недоступна. Встроенная команда tee
также ведет запись всего, что
выводится на экран, тогда как утилита Unix tee
, используемая с pager
,
не делает этого в достаточном объеме. Последнее, но тем не менее
важное обстоятельство состоит в том, что интерактивная команда tee
более удобна для переключения режимов работы включено/выключено, если
при записи в файл иногда возникает необходимость отключить эту
функцию.
Можно изменить формат приглашения в командной строке клиента mysql
.
Возможны следующие опции приглашения:
Опция | Описание
|
\v | версия mysqld
|
\d | имя используемой базы данных
|
\h | имя хоста, к которому производится подсоединение
|
\p | номер порта, через который производится подсоединение
|
\u | имя пользователя
|
\U | полный адрес username@host
|
\\ | обратный слэш `\'
|
\n | символ новой строки
|
\t | табуляция
|
\ | пробел
|
\_ | пробел с подчеркиванием
|
\R | время по военному часовому поясу (0-23)
|
\r | время по стандартному часовому поясу (1-12)
|
\m | минуты
|
\y | два разряда года
|
\Y | четыре разряда года
|
\D | полный формат даты
|
\s | секунды
|
\w | день недели в трехбуквенном формате (Mon, Tue, ...)
|
\P | Время до полудня/после полудня (am/pm)
|
\o | месяц в числовом формате
|
\O | месяц в трехбуквенном формате (Jan, Feb, ...)
|
\c | Счетчик, подсчитывающий количество вводимых команд
|
Символ `\' за которым следует любая другая буква, просто дополняет эту
букву.
Установить параметры приглашения можно следующими способами:
- В переменных окружения
-
Можно установить переменную окружения
MYSQL_PS1
для строки приглашения.
Например:
shell> export MYSQL_PS1="(\u@\h) [\d]> "
- `my.cnf'
-
- `.my.cnf'
-
Можно установить опцию prompt в любом конфигурационном файле MySQL в
группе
mysql
. Например:
[mysql]
prompt=(\u@\h) [\d]>\_
- В командной строке
-
Можно установить опцию
--prompt
из командной строки утилиты mysql
.
Например:
shell> mysql --prompt="(\u@\h) [\d]> "
(user@host) [database]>
- В интерактивном режиме
-
Можно также использовать команду
prompt
(или \R
) для изменения настроек
приглашения в интерактивном режиме. Например:
mysql> prompt (\u@\h) [\d]>\_
PROMPT set to '(\u@\h) [\d]>\_'
(user@host) [database]>
(user@host) [database]> prompt
Возвращение к исходным (по умолчанию) настройкам PROMPT в утилите mysql>
mysql>
Add your own comment.