| |
MySQL имеет несколько различных журналов (протоколов), которые могут
помочь Вам выяснить то, что происходит внутри mysqld
:
Файл регистрации ошибок | Проблемы со стартом, работой или
остановкой mysqld . |
Файл регистрации isam | Регистрирует все изменения для таблиц системы ISAM. Использован только для отладки isam-кода. |
Файл регистрации запросов | Регистрирует все установленные подключения и выполненные запросы. |
Файл регистрации модификаций | Сохраняет все инструкции, которые изменяют данные. |
Двоичный файл регистрации | Сохраняет все инструкции, которые изменяет что-либо. Использован также для репликации. |
Медленный файл регистрации | Сохраняет все запросы, которые
заняли времени больше, чем long_query_time для своего выполнения
или не использовали индексы. |
Все файлы регистрации могут быть найдены в каталоге данных
mysqld
. Вы можете вынуждать mysqld
вновь открывать
журналы (или переключаться на новые журналы), выполняя команду FLUSH
LOGS
. Подробности в разделе "4.5.3
Синтаксис FLUSH
".
Сервер mysqld
пишет все ошибки на stderr, который скрипт
safe_mysqld
переназначает в файл с именем
'hostname'.err
. В Windows mysqld
пишет ошибки в
файл с именем \mysql\data\mysql.err.
Этот протокол содержит информацию, указывающую, когда mysqld
был запущен и остановлен, а также любые критические ошибки. Если
mysqld
неожиданно свалился, и safe_mysqld
должен
перезапустить mysqld
, safe_mysqld
оставит строку
restarted mysqld
в этом файле. Этот файл регистрации также
сохраняет предупреждение, если mysqld
обращает внимание на
таблицу, которая должна быть автоматически проверена или восстановлена.
На некоторых операционных системах, файл регистрации ошибок будет
содержать трассировку стека для случая падения mysqld
. Это может
использоваться, чтобы выяснить, где и почему свалился mysqld
.
Подробности в разделе "6.1.4
Использование трассировки стека".
Если Вы хотите знать, что происходит внутри mysqld
, Вы должны
запустить его с опцией --log[=file]
. Это регистрирует все
подключения и запросы в журнале (по умолчанию `'hostname'.log').
Этот файл регистрации может быть очень полезен, когда Вы подозреваете ошибку
в коде клиента и хотите знать точно, что именно ему передавал
mysqld
.
По умолчанию скрипт mysql.server
запускает сервер MySQL с
опцией -l
. Если Вы нуждаетесь в лучшей эффективности, когда
запускаете MySQL в промышленной среде, Вы можете удалить опцию
-l
из mysql.server
или заменить ее на
--log-binary
.
Записи в этом файле регистрации записываются в порядке получения запросов
mysqld
. Это может отличаться от порядка выполнения инструкций.
Этим данный журнал отличается от файла регистрации модификаций и двоичного
файла регистрации, которые пишутся после того, как запрос выполнен, но
прежде, чем любые блокировки будут сняты.
ОБРАТИТЕ ВНИМАНИЕ: Файл регистрации модификаций заменен двоичным файлом регистрации. Подробности в разделе "4.9.4 Двоичный файл регистрации".
При запуске с опцией --log-update[=file_name]
mysqld
пишет журнал, содержащий все команды SQL, которые меняют
данные. Если имя файла не задано, в качестве значения по умолчанию
используется имя хоста. Если имя файла задано, но не содержит путь, файл
будет написан в каталоге данных. Если file_name не имеет расширения,
mysqld
создаст имена журнала так: file_name.###, здесь
###
номер, который будет увеличен каждый раз, когда Вы
выполняете команды mysqladmin refresh
, mysqladmin
flush-logs
, FLUSH LOGS
или перезапускаете сервер.
ОБРАТИТЕ ВНИМАНИЕ: Для работы вышеупомянутой схемы Вы НЕ должны создавать свои собственные файлы с именами, совпадающими с именем файла регистрации модификаций + некоторые расширения, которые могут быть расценены как номер, в каталоге, используемом файлом регистрации модификаций!
Если Вы используете параметры --log
или -l
,
mysqld
пишет общий файл регистрации с именем файла
`hostname.log'. Перезапуски не создадут новый журнал, просто старый
будет закрываться и открываться вновь. В этом случае его можно копировать
(в Unix-системах) так:
mv hostname.log hostname-old.log mysqladmin flush-logs cp hostname-old.log to-backup-directory rm hostname-old.log
Регистрация модификаций интеллектуальна потому, что регистрирует только
инструкции, которые, действительно, модифицирует данные. Так что команда
UPDATE
или DELETE
с WHERE
, которая не
находит никаких строк, не будет записана в файл регистрации. Это даже
пропускает инструкции UPDATE
, которые устанавливают столбец в
значение, которое он уже имеет!
Регистрация модификации будет выполнена немедленно после того, как запрос завершится, но прежде, чем любые блокировки будут сняты. Это гарантирует, что файл регистрации будет отражать порядок выполнения процессов.
Если Вы хотите модифицировать базу данных из журналов модификации, Вы могли бы делать следующее (считается, что Ваши файлы регистрации модификаций имеют имена формы `file_name.###'):
shell> ls -1 -t -r file_name.[0-9]* | xargs cat | mysql
Здесь команда ls
используется, чтобы получить все журналы в
правильном порядке, что очень важно.
Это может быть полезно, если Вы должны возвратиться к файлам копии после аварийной ситуации, и Вы хотите восстановить модификации, которые произошли между резервированием и слетом системы.
В будущем двоичный файл регистрации полностью заменит собой файл регистрации модификаций, так что я рекомендую Вам перейти на этот формат файла регистрации как можно скорее!
Двоичный файл регистрации содержит всю информацию, которая является доступной для обновлений, в более эффективном формате. Он также содержит информацию относительно того, как долго обрабатывался каждый запрос, который модифицировал базу данных.
Двоичный файл регистрации также используется, когда Вы копируете данные на подчиненный компьютер с главного. Подробности в разделе "4.10 Репликация в MySQL".
При запуске с параметром --log-bin[=file_name]
mysqld
пишет журнал, содержащий все команды SQL, которые меняли
данные в базе. Если имя файла не задано, используется имя хоста с суффиксом
-bin
. Если имя файла задано, но не содержит путь, файл будет
записан в каталог данных.
Вы можете использовать следующие параметры для mysqld
, чтобы
воздействовать на то, что регистрируется в двоичном файле регистрации:
binlog-do-db=database_name |
Сообщает, что следует регистрировать модификации для определенной базы данных
и исключать все другие, не упомянутые явно (например:
binlog-do-db=some_database ). |
binlog-ignore-db=database_name |
Сообщает, что модификации данной базы данных не должны регистрироваться в
двоичном файле регистрации (например:
binlog-ignore-db=some_database ). |
К имени двоичного файла регистрации mysqld
конкатенирует
расширение, которое является номером, растущим каждый раз, когда Вы
выполняете команды mysqladmin refresh
,
mysqladmin flush-logs
, FLUSH LOGS
или
перезапускаете весь сервер.
Чтобы знать, которые двоичные журналы использовались, mysqld
также создает двоичный индексный файл регистрации, который содержит имена
всех используемых двоичных журналов. По умолчанию он имеет то же самое имя,
что и двоичный журнал, но с расширением '.index'
. Вы можете
изменять имя двоичного индексного файла опцией
--log-bin-index=[filename]
.
Если Вы используете репликацию, то не должны удалять старые двоичные
журналы, пока не будете уверены, что никакой подчиненный сервер не будет
когда-либо их использовать. Один способ сделать это состоит в том, чтобы
использовать команду mysqladmin flush-logs
один раз в день и
затем удалять любые файлы регистрации, которые старше трех дней.
Вы можете исследовать двоичный журнал командой mysqlbinlog
.
Например, Вы можете обновить сервер MySQL из двоичного файла регистрации
следующим образом:
mysqlbinlog log-file | mysql -h server_name
Вы можете также использовать программу mysqlbinlog
, чтобы
читать двоичный файл регистрации непосредственно с удаленного сервера MySQL!
Вызов mysqlbinlog --help
даст Вам большее количество
информации того, как использовать эту программу.
Если Вы используете BEGIN [WORK]
или
SET AUTOCOMMIT=0
, то Вы должны использовать двоичный файл
регистрации MySQL для целей резервирования вместо старого формата файла
регистрации модификаций.
Двоичная регистрация будет выполнена немедленно после того, как запрос завершится, но прежде, чем любые блокировки будут сняты. Это гарантирует, что файл регистрации будет отражать порядок выполнения команд.
Все модификации (UPDATE
, DELETE
или
INSERT
), которые изменяют транзакционные таблицы (подобные
таблицам BDB), кэшируются до COMMIT
. Любые модификации в
нетранзакционных таблицах будут сохранены в двоичном файле регистрации сразу.
Каждый процесс будет на старте распределять буфер
binlog_cache_size
, чтобы буферизовать запросы. Если запрос
больше, чем этот буфер, процесс откроет временный файл, чтобы обработать
большой кэш. Временный файл будет удален, когда процесс заканчится.
Параметр max_binlog_cache_size
может использоваться, чтобы
ограничить максимальный размер буфера, используемого, чтобы кэшировать запрос
для нескольких транзакций.
Если Вы используете модификацию или двоичный файл регистрации,
параллельные вставки не будут работать вместе с
CREATE ... INSERT
и INSERT ... SELECT
. Это должно
гарантировать, что Вы можете пересоздать точную копию Ваших таблиц, применяя
регистрацию к резервной копии.
При запуске с опцией --log-slow-queries[=file_name]
mysqld
пишет журнал, содержащий все команды SQL, которые
обрабатывались дольше, чем long_query_time
. Время, которое
понадобилось, чтобы получить начальные блокировки таблицы, не учитывается как
время выполнения запроса.
Медленный файл регистрации запроса регистрируется после того, как запрос выполнен, и после того, как все блокировки были сняты. Это может отличаться от порядка выполнения инструкций.
Если никакое имя файла не задано, используется имя хоста с окончанием
-slow.log
. Если имя файла задано, но не содержит путь, файл
будет записан в каталоге данных.
Медленный файл регистрации запроса может использоваться, чтобы найти
запросы, которые берут длительное время, и таким образом являются кандидатами
на оптимизацию. Имея дело с большим файлом регистрации, который может стать
трудной задачей, Вы можете пропустить его через программу
mysqldumpslow
, чтобы получать резюме запросов, которые
появляются в файле регистрации.
Если Вы используете --log-long-format
, также будут выведены
запросы, не использующие индексы. Подробности в разделе
"4.1.1 Параметры командной строки
mysqld".
MySQLимеет много журналов, которые весьма облегчают работу. Однако, их нужно время от времени чистить, чтобы гарантировать, что файлы регистрации не занимают слишком много дискового пространства.
При использовании MySQL с журналами Вы будете время от времени удалять/резервировать старые журналы и сообщать, чтобы MySQL начал регистрацию событий в новых файлах. Подробности есть в разделе "4.4.1 Обновление протоколов ".
В Linux (дистрибутив Redhat
) Вы можете для этого использовать
скрипт mysql-log-rotate
. Если Вы установили
MySQL из пакета RPM, нужный скрипт должен быть уже
установлен автоматически.
На других системах Вы должны установить скрипт сами так, чтобы он
вызывался для обработки журналов из cron
.
Вы можете вынуждать MySQL начать использование новых
журналов, используя mysqladmin flush-logs
или через команду
SQL FLUSH LOGS
. Если Вы используете MySQL 3.21,
Вы должны использовать mysqladmin refresh
.
Вышеупомянутая команда делает следующее:
--log
) или отслеживание медленных запросов (опция
--log-slow-queries
), файл протокола будет закрыт и открыт заново
(по умолчанию это `mysql.log' и ``hostname`-slow.log').
--log-update
), то закрывается обновленный протокол и открывается
новый файл протокола с более высоким номером последовательности.Если Вы используете только регистрацию модификации, Вы должны только сбросить протокол на диск, переместить его в резервную копию и начать новый файл протокола. Например, таким образом:
shell> cd mysql-data-directory shell> mv mysql.log mysql.old shell> mysqladmin flush-logs
Закладки на сайте Проследить за страницей |
Created 1996-2024 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |