4.9.4 Бинарный журнал обновлений
Бинарный журнал обновлений в скором времени должен полностью заменить
журнал обновлений, так что мы рекомендуем вам как можно скорее перейти на
его использование!
Бинарный журнал содержит всю информацию, имеющуюся в журнале обновлений, в
более эффективном формате. В нем имеется информация и о времени выполнения
каждого обновляющего базу запроса.
Бинарный журнал используется и при репликации подчиненного сервера (slave)
с головного (master) (see section 4.10 Репликация в MySQL).
При запуске с ключом --log-bin[=file_name]
mysqld
создает файл журнала, в
который вносятся данные обо всех обновляющих данные командах SQL. Если имя
файла не задано, по умолчанию ему дается имя хоста с окончанием -bin
. Если
файлу присвоено имя, не содержащее пути доступа к нему, этот файл
сохраняется в каталоге данных.
При вводе расширения в имя файла (например: --log-bin=filename.extension
)
это расширение удаляется без предупреждения.
К имени файла бинарного журнала программа mysqld
прибавляет специальное
расширение - номер, увеличивающийся при каждом выполнении команд
mysqladmin refresh
, mysqladmin flush-logs
, FLUSH LOGS
или перезапуске
сервера. При достижении файлом журнала максимального размера, заданного в
параметре max_bin_log_size
, автоматически создается новый. Все неактивные
файлы бинарных журналов можно удалить командой RESET
MASTER (see section 4.5.4 Синтаксис команды RESET
.
На выбор данных, записываемых в журнал, влияют следующие настройки mysqld
:
Опция | Описание
|
binlog-do-db=database_name |
Заставляет master заносить в журнал все обновления определенной базы данных, все явно не указанные базы исключаются (пример: binlog-do-db=some_database)
|
binlog-ignore-db=database_name |
Заставляет master отказаться от занесения в журнал обновлений определенной базы данных (пример: binlog-ignore-db=some_database )
|
Чтобы была возможность определить, какие файлы журналов используются в
данный момент, mysqld
создает и индексный файл, содержащий имена всех
находящихся в работе файлов. По умолчанию ему присваивается то же имя, что
и файлу журнала, но с расширением .index. Имя этого файла можно изменить с
помощью параметра --log-bin-index=[filename]
.
При использовании репликации удалять старые файлы журналов не стоит до тех
пор, пока вы не будете уверены в том, что они никогда не понадобятся ни
одной зависимой базе. Добиться такого результата можно, запуская команду
mysqladmin flush-logs
раз в день и затем удаляя все журналы, созданные
более 3 дней назад.
Работать с файлами бинарного журнала можно с помощью программы
mysqlbinlog
. Обновить MySQL в соответствии с записями в журнале можно так:
mysqlbinlog log-file | mysql -h server_name
С помощью программы mysqlbinlog
можно даже считывать файлы журнала прямо с
удаленного сервера MySQL!
При запуске mysqlbinlog
с ключом --help
на экран выводится дополнительная
информация по работе с этой программой.
При работе с настройками BEGIN [WORK]
или SET AUTOCOMMIT=0
для резервного
копирования нужно использовать бинарный журнал, а не старый журнал
обновлений.
Занесение данных в бинарный журнал происходит сразу по завершении
исполнения запроса, но до снятия блокировок. Таким образом обеспечивается
уверенность в том, что журнал ведется именно в порядке выполнения
запросов.
Все обновления (UPDATE
, DELETE
или INSERT
), изменяющие транзакционную
таблицу (например, BDB-таблицу) находятся в кэше до вызова COMMIT
.
Обновления нетранзакционных таблиц заносятся в журнал сразу же. При
запуске каждого потока создается буфер запросов, объем которого
соответствует значению параметра binlog_cache_size
. Если запрос не
помещается в буфере, поток создаст временный файл для кэша. Временный файл
удаляется по завершении работы потока.
Параметр max_binlog_cache_size
позволяет ограничить общий объем памяти,
используемой для кэширования мультитранзакционного запроса.
При использовании журнала обновлений или бинарного журнала параллельные
операции вставки столбцов в таблицу не могут работать с командами CREATE
... INSERT
и INSERT ... SELECT
. Это сделано специально - для того, чтобы
обеспечить возможность создания точной копии таблиц путем объединения
резервной копии с журналом.