пятница, 12 сентября 2008 г.

Немного о логах в MySQL


Несколько практически важных команд из файла /etc/my.cnf, относящиеся к ведению журнала (расположены в секции [mysqld]):
log=filename
пишет в файл все запросы, поступающие на сервер. Может быть крайне полезна при отладке. На рабочем сервере этот прекрасный способ создания гиганских файлов лучше отключить.
Эти две команды включают ведение бинарного журнала (используется при реплицицировании):
bin-log=filename
server-id=1

(в последней команде важен именно параметр 1 - он задает master сервер, значения от 2 и выше - slave).
Если ничего реплицировать не планируется. бинарный лог лучше выключить - больно уж он большой. Если реплика все-таки необходима, неплохо ограничить размер бинарного лога - и устроить ротацию - например, вот так:
max_binlog_size=8192000
expire_logs_days=1

несмотря на свое название, последняя команда действут только на бинарный лог. Если нужно ротировать остальные логи, на то есть команда:
$ mysqladmin flush-logs
она закрывает/открывает текстовые логи - т.е. действует так, как на нормальные программы kill -HUP (хотя в документации на MySQL мне этого читать не приходилось, но на моей системе - Ver 5.1.24-rc-log for portbld-freebsd7.0 on i386 - привычная kill -HUP прекрасно справляется с этой операцией) - а бинарный лог начинает писать в новый файл.
Еще есть журнал медленных запросов. Кроме самого SQL выражения и времени выполнения, в него пишется, сколько строк возвращено и сколько было просмотрено. Возможно, это пригодиться при оптимизации самых тяжелых запросов. Первый параметр - куда писать, второй - после скольки секунд выполнения запрос считается медленным:
log-slow-queries=filename
long_query_time=5

1 комментарий:

m0ps комментирует...

спасибо, выручил.. как раз уперся в проблему - закончилось место в var на двух серверах...