Утилита командной строки 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.
-
-X, --xml
Вывести выходные данные в виде XML.
-
-L, --skip-line-numbers
Не указывать номера строк для ошибок. Полезно для сравнения результирующих файлов, включающих сообщения об ошибках.
-
--no-pager
Блокирует пейджер (программа постраничного вывода) и выводит результат в стандартный вывод stdout (в Unix). Смотрите также команду
\h
(интерактивная помощь). -
--no-tee
Блокирует выходной файл. Смотрите также команду
\h
(интерактивная помощь). -
-n, --unbuffered
Очищать буфер после каждого запроса.
-
-N, --skip-column-names
Не указывать имена столбцов в результатах.
-
-O, --set-variable var=option
Установить значение переменной. Список используемых переменных выводится через
--help
. Обратите внимание, что--set-variable
не используется в MySQL 4.0. Просто используйте--var=option
. -
-o, --one-database
Обновить только базу данных, установленную по умолчанию. Позволяет пропускать обновления другой базы данных в журнале обновления.
-
--pager[=...]
Устанавливает тип данных вывода. По умолчанию это переменная окружения
PAGER
. Ее возможные значения - less, more, cat [> имя файла], и т.д. См. также команду \h (интерактивная помощь). Этот параметр не работает в пакетном (batch) режиме. Пейджер работает только под Unix. -
-p[password], --password[=...]
Пароль, используемый при подсоединении к серверу баз данных. Если в командной строке пароль не указан, то он запрашивается у пользователя. При использовании краткой формы
-p
не оставляйте пробел между параметром и значением пароля. -
-P порт, --port=порт
Номер порта TCP/IP, используемый для подсоединения.
-
--protocol=(TCP | SOCKET | PIPE | MEMORY)
Для указания протокола соединения, который надлежит использовать. Новшество в MySQL 4.1.0.
-
-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
(в MySQL 4.0 используйте
просто --var=option
) можно также установить следующие переменные:
Имя переменной | По умолчанию | Описание |
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 Раздел 5.5.6, «Синтаксис команды SET
».
Результат этого следующий:
-
Не разрешено выполнять команды
UPDATE
илиDELETE
, если не указаны ограничения по ключам в секцииWHERE
. Однако можно заставить выполняться командыUPDATE
/DELETE
, используя операторLIMIT
:UPDATE table_name SET not_key_column=# WHERE not_key_column=# LIMIT 1;
Все слишком большие результаты ограничены строками
#select_limit#
.SELECT
ы, которые могут потребовать для исполнения количество комбинаций строк более, чем#max_join_size#
, будут прерваны.
Несколько полезных советов по использованию клиента 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 4.0.2 можно изменить формат приглашения в командной
строке клиента 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>