Linux для всех

индекс
247,20

Тюнинг консольного клиента MySQL

Мне довольно часто, даже постоянно приходится обращаться к разным базам данных MySQL. Испробовав немало разных GUI клиентов я понял, что они все меня не удовлетворяют. То проблемы с кодировкой, то отсутствует автодополнение кода, то не работает история запросов. В общем пришел я к использованию консольного клиента mysql. И вроде все хорошо, но была пара проблем.
Во-первых заходя в очередную закладку с открытым соединением mysql я тупо смотрел в строку приглашения и старался понять на каком я сервере нахожусь и к какой базе данных подключен. Во-вторых при выводе большого количества полей или при выводе поля с длиной превышающей ширину терминала получалась каша из черточек, букв и палочек :). На днях я покопался в документации и с кое-чем разобрался.
Итак приглашение. Можно интерактивно переключить с помощью команды prompt. Например так:

mysql>
mysql> prompt (\u@\h) [\d]>
PROMPT set to '(\u@\h) [\d]>'
(www@192.168.1.33) [poll]>


где \u — пользователь, \h — хост и \d — база данных

Теперь насчет вывода. Переменная pager определяет через какую программу будет представлен вывод результатов запросов. После некоторых экспериментов с more и less, я пришел к следующему варианту:

(www@192.168.1.33) [poll]>pager less -n -i -S
PAGER set to 'less -n -i -S'


В результате запрос увидим в привычном интерфейсе less со всеми вкусностями типа поиска и т.д.:
image

Конечно можно эти команды вводить в интерактивном режиме, можно их прописать как системные переменные, но все же удобнее один раз прописать их в файл ~/.my.cnf например так:

[client]
default-character-set= utf8
pager = less -n -i -S
prompt =(\u@\h) [\d]>


Надеюсь вам понравится подобный тюнинг и вы возьмете на вооружение мои советы.

UPD. Поскольку статья писалась для использования в linux системах, а вопросы затронутые в ней интересуют и пользователей Windows, считаю необходимым добавить что:
1. В Windows считывание принятых по умолчанию параметров MySQL производится из следующего файла:
C:\my.cnf
2. less для Windows можно установить отдельно. Ссылка — http://gnuwin32.sourceforge.net/packages/less.htm
+51
28 января 2010, 20:53
86

комментарии (55)

0
slimlv #
клёво с prompt-ом
0
mishutka90 #
Укажите пожалуйста под какой ОС Вы проводили эти настройки. А то ведь клиент mysql под разными ОС работает, и выглядеть такой тюнинг может по-разному.

Идея с promt мне тоже понравилась, Вы правы, так гораздо удобнее.
0
neuro #
Тюнинг предполагается для linux, хотя, думаю, prompt без труда можно настроить и под Windows
0
neuro #
добавил поскриптум с ссылкой на less для windows
0
Daedmen #
Еще бы автокомплит был и я бы был счастлив )
0
neuro #
автокомплит частично есть. По крайней мере под Ubuntu. Дополняет названия полей, таблиц, но не синтаксис.
0
Daedmen #
угу знаю, юзаю, но хотелось бы именно всего…
НЛО прилетело и опубликовало эту надпись здесь
0
neuro #
спасибо за замечание, поправил. По утро еще и не такие очепятки случаются
+1
dvolk #
На Ubuntu конфиг файл имеет имя ~/.my.cnf

А в остальном — отлично!
0
k0sh #
В Федоре тоже.
0
mocksoul #
да и в генте. И вообще почти везде по-моему.
0
vazik #
Ну так можно в юзерском конфиге прописать, а можно глобально. Разницы нет.
0
zoxa #
ну согласно документации, он там и должен лежать:
/etc/my.cnf или mysql-data-dir/my.cnf или ~/.my.cnf
–2
grcool #
После 3 лет счастливого пользования Navicat, консольный клиент для меня — дикость)
Тем не менее, информация весьма полезна)
+1
GAmoVeR #
Не все задачи можно решить без консоли, некоторые в ней решаются просто быстрее, а некоторые без нее решить просто невозможно. Например базовая ситуация, когда на голом сервере только root пользователь без доступа в сеть, и все.

Но вообще Navicat хорош :) Умеет все что умеет MySQL Query Browser и еще чуть чуть, для разработки очень удобно
0
grcool #
Потому и написал вторую строку своего коммента) Так сказать, бывают случаи)
0
evgenyk #
+1
А еще вывод консольный клиент легко вставляется в скрипты.
+1
AgaFonOff #
Я уже много лет никак не слезу с code.google.com/p/sqlyog/.
Я перелез на Ubuntu, в бесплатной версии появилось окно «купи меня» при запуске, а я лучше найти не могу… В wine работает чудесно (тестируют специально).
Стандартные GUI от mysql аляповатые, а все другие какие-то нефичастые :(
НЛО прилетело и опубликовало эту надпись здесь
0
kartoshin #
Бесплатный Community Edition, который при запуске показывает nagscreen, сообщающий, что есть версии попрофессиональней.
0
AgaFonOff #
Да, именно так, я неточно выразился.
0
Zyava #
Слушайте, удобная штука однако, спасибо за наводку.
0
rednaxi #
Лично я тоже считал его лучшим инструментом для работы с бд очень долгое время, но недавно столкнулся с проблемами с кодировкой которые решить не смог и пришлось от него отказываться. Хз откуда была проблема, база вся в ютф8, дамп базы в ютф8, но ни в какую не импортируется.
:(
0
kartoshin #
Чем заменили?
0
rednaxi #
на сервере пока пользуюсь phpMyAdmin для мелких задач или консолью для чего-то покрупнее
на локали пользуюсь чем придется пока не нашел достойной замены :(
+2
bio #
Для mysql вместо «less -niS» лучше использовать «less -iMSx4 -FX», более информативно и удобно.

Для postgresql хинт от Merlin Moncure:

#to profile (~/.zshrc)
export PAGER=less
export LESS="-iMSx4 -FX"

#to ~/.psqlrc
\timing
\pset pager always


0
neuro #
необходимые для себя опции каждый сам подберет, я так думаю.
0
roller #
*бормочет* вы еще оракловый клиент не видели…
0
xosino #
+1
тоже искал что нибудь потипу sqlplus
что бы во внешнем редакторе можно было править
сохранять комманды в файл, append…
0
neuro #
еще как видели. Только речь пока про mysql
0
flashvoid #
Супер… больше спасибо ))
0
bosha #
По сабжу — спасибо, полезно.

[offtop] Лучше выключить прозрачность в терминале: глазам легче станет [/offtop]
0
neuro #
на таком уровне прозрачность не мешает, и частенько нужно когда пишу в консоли видеть документ под ней — такая уж работа, а второй монитор не дают
0
Mid #
Вот спасибо большое
0
dvolk #
Небольшая проблема — mysqladmin начал ругаться на неизвестные переменные pager и prompt.

Гуглить сильно неохота — кто-нибудь знает, как помирить предложенный конфиг с mysqladmin-ом?
0
neuro #
что-то напутал в синтаксисе? посмотри что бы переменные были указаны обязательно в блоке [client]
0
dvolk #
Не-не, все правильно сделал. В mysql все прекрасно выглядит, а когда запускаю что-нибудь вроде mysqladmin -uroot create mynewdatabase получаю по голове:
mysqladmin: unknown variable 'pager=less -n -i -S'
0
kreon #
mysql -e 'CREATE DATABASE mynewdatabase'. Только так.
0
dvolk #
Почему только так?!

Или это вариант, как обойтись без mysqladmin-а?
0
neuro #
мб пробел между 'pager' и '='? Судя по сообщению mysqladmin считает за имя переменной всю строку 'pager=less -n -i -S'
0
dvolk #
А почему тогда mysql не ругается?

Вот как выглядит мой конфиг: pastebin.com/f6c92e12d

Судя по ошибке, с проблемами вокруг '=' клиент справляется прекрасно.

Я попробовал разные варианты расположения пробелов — ни в какую
0
neuro #
хз. я не сталкивался с подобным. Но я и mysqladmin не так часто пользую
0
neuro #
проблема есть. Самый простой выход перенести определение этих переменных из ~/.my.cnf непосредственно в строку запуска например:

user$mysql -u vasia -p --pager='less -n -i -S'
0
crtman #
попробуйте завернуть в кавычки в my.cnf. Вот так, например: prompt = '\u@\h \d > '
0
crtman #
это, кстати, помогает добавть пробел в конце промта, без обрамляющих кавчек пробелы в начале и конце удаляются.
0
stager #
надо вышеназванные переменные помещать не с секцию [client] а в секцию [mysql]
0
italiano #
А как не переподключаясь к mysql вернуть переменную pager на дефолтную?
0
neuro #
просто пишешь «pager» без параметров
(www@192.168.1.33) [poll]>pager
0
neuro #
а на самом деле не так, а вот так:
(www@192.168.1.33) [poll]>pager
PAGER set to stdout
(www@192.168.1.33) [poll]>
0
neuro #
идиот!

а на самом деле не так, а вот так:
(www@192.168.1.33) [poll]>nopager
PAGER set to stdout
(www@192.168.1.33) [poll]>
0
crtman #
Спасибо автору. От себя добавлю, что если вы часто используете консольный клиент для разработки, можно добавить настройки БД по умолчанию:

[client]
default-character-set = 'utf8'
pager = 'less -n -i -S'
prompt = '\u@\h \d > '
socket = '/Applications/MAMP/tmp/mysql/mysql.sock'
user = 'root'
password = '123'
+1
mmib #
Все хорошо, но если захотите сделать mysqldump получите ошибку mysqldump: unknown variable 'prompt=(\u@\h) [\d]>'
что бы это исправить, секцию нужно назвать не [client], а [mysql]
0
slavaz #
Конечно можно эти команды вводить в интерактивном режиме, можно их прописать как системные переменные, но все же удобнее один раз прописать их в файл ~/my.cnf например так:

Простите, а точно файл должен быть ~/my.cnf? У меня Fedora-12, ожидает файл ~/.my.cnf (начинается на точку). man mysql тоже говорит про:

You can set the prompt option in the [mysql] group of any MySQL option file, such as /etc/my.cnf or the .my.cnf file in your home directory.

+1
neuro #
Вы правы, у меня там была опечатка. Поправил.

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