Spec-Zone .ru
спецификации, руководства, описания, API
|
Двоичный журнал содержит "события", которые
описывают изменения базы данных, такие как табличные операции создания или изменения, чтобы представить данные в
виде таблицы. Это также содержит события для операторов, которые потенциально, возможно, произвели изменения
(например, a DELETE
который не соответствовал строк), если основанное на строке журналирование не используется. Двоичный журнал
также содержит информацию о том, сколько времени каждый оператор взял те обновленные данные. У двоичного журнала
есть две важных цели:
Для репликации входит в систему двоичный файл, главный сервер репликации обеспечивает, запись данных изменяется, чтобы быть отправленной ведомым серверам. Главный сервер отправляет события, содержавшиеся в его двоичном журнале к его ведомым устройствам, которые выполняют те события, чтобы произвести те же самые изменения данных, которые были сделаны на ведущем устройстве. См. Раздел 16.2, "Реализация Репликации".
Определенные операции восстановления данных требуют использования двоичного журнала. После того, как резервное копирование было восстановлено, события в двоичном журнале, которые были записаны после того, как резервное копирование было сделано, повторно выполняются. Эти события осовременивают базы данных от точки резервного копирования. См. Раздел 7.5, "Момент времени (Инкрементное) Восстановление Используя Двоичный Журнал".
Двоичный журнал не используется для операторов такой как SELECT
или SHOW
это не изменяет данные. Зарегистрировать все операторы (например, чтобы
идентифицировать проблемный запрос), используют общий журнал запросов. См. Раздел
5.2.3, "Общий Журнал запросов".
Выполнение сервера с двоичным включенным журналированием делает производительность немного медленнее. Однако, преимущества двоичного файла входят в систему, позволяя Вам установить репликацию, и для операций восстановления обычно перевешивают это незначительное снижение работоспособности.
Двоичный журнал безопасен от катастрофического отказа. Только полные события или транзакции регистрируются или читают назад.
Пароли в операторах, записанных двоичному журналу, переписываются сервером, чтобы не произойти буквально в простом тексте. См. также Раздел 6.1.2.3, "Пароли и Журналирование".
Следующее обсуждение описывает некоторые из параметров сервера и переменных, которые влияют на работу двоичного журналирования. Для полного списка см. Раздел 16.1.4.4, "Двоичные Опции Журнала и Переменные".
Чтобы включить двоичному журналу, запустите сервер с --log-bin[=
опция. Если нет
base_name
]base_name
значение дается, имя по умолчанию является значением pid-file
опция (который по умолчанию является именем хост-машины), сопровождаемый
-bin
. Если базовое имя дается, сервер пишет файл в каталоге данных, если базовое
имя не дается с ведущим абсолютным путем, чтобы определить различный каталог. Рекомендуется, чтобы Вы определили
базовое имя явно вместо того, чтобы использовать значение по умолчанию имени хоста; см. Раздел
C.5.8, "Известные Проблемы в MySQL", по причине.
Если Вы предоставляете расширение на имя журнала (например, --log-bin=
),
расширение тихо удаляется и игнорируется. base_name.extension
mysqld добавляет числовое расширение двоичного базового имени
журнала, чтобы генерировать двоичные имена файла журнала. Число увеличивается каждый раз, когда сервер создает
новый файл журнала, таким образом создавая упорядоченный ряд файлов. Сервер создает новый файл в ряду каждый
раз, когда это запускает или сбрасывает журналы. Сервер также создает новый двоичный файл журнала автоматически
после того, как размер текущего журнала достигает max_binlog_size
. Двоичный файл журнала может стать больше чем max_binlog_size
если Вы используете большие транзакции, потому что транзакция
пишется файлу в одной части, никогда не разделяйте между файлами.
Отслеживать, из которых двоичные файлы журнала использовались, mysqld также, создает двоичный индексный файл журнала, который
содержит имена всех используемых двоичных файлов журнала. По умолчанию у этого есть то же самое базовое имя как
двоичный файл журнала с расширением '.index'
. Можно поменять имя двоичного
индексного файла журнала с --log-bin-index[=
опция.
Недопустимо вручную отредактировать этот файл, в то время как mysqld работает; выполнение так перепутало бы mysqld.
file_name
]
Термин "двоичный файл журнала" обычно обозначает человека пронумерованный файл, содержащий события базы данных. Термин "двоичный журнал" все вместе обозначает набор пронумерованных двоичных файлов журнала плюс индексный файл.
Клиент, который имеет SUPER
полномочие может отключить двоичное журналирование своих собственных операторов при использовании a SET sql_log_bin=0
оператор. См. Раздел
5.1.4, "Системные Переменные Сервера".
По умолчанию сервер регистрирует длину события так же как события непосредственно и использует это, чтобы
проверить, что событие было записано правильно. Можно также заставить сервер писать контрольные суммы для
событий, устанавливая binlog_checksum
системная переменная. Читая назад из двоичного журнала, ведущее устройство использует длину события по
умолчанию, но может быть заставлено использовать контрольные суммы при наличии, включая master_verify_checksum
системная переменная. Ведомый поток ввода-вывода также
проверяет события, полученные от ведущего устройства. Можно заставить ведомый поток SQL использовать контрольные
суммы при наличии, читая из релейного журнала, включая slave_sql_verify_checksum
системная переменная.
Формат событий, записанных в двоичном журнале, зависит от двоичного формата журналирования. Три типа формата
поддерживаются, основанное на строке журналирование, основанное на операторе журналирование и смешано-основное
журналирование. Двоичный используемый формат журналирования зависит от версии MySQL. Для общих описаний форматов
журналирования см. Раздел 5.2.4.1, "Двоичные Форматы
Журналирования". Для получения дальнейшей информации о формате двоичного журнала, см.
Сервер оценивает --binlog-do-db
и --binlog-ignore-db
опции таким же образом, как это делает --replicate-do-db
и --replicate-ignore-db
опции. Для получения информации о том, как это делается,
см. Раздел 16.2.3.1,
"Оценка Репликации На уровне базы данных и Двоичных Опций Журналирования".
Ведомый сервер репликации по умолчанию не пишет в его собственный двоичный журнал модификаций данных, которые
получаются от ведущего устройства репликации. Чтобы зарегистрировать эти модификации, запустите ведомое
устройство с --log-slave-updates
опция в дополнение к --log-bin
опция (см. Раздел 16.1.4.3, "Ведомые Опции
репликации и Переменные"). Это делается, когда ведомое устройство должно также действовать как
ведущее устройство к другим ведомым устройствам в цепочечной репликации.
Можно удалить все двоичные файлы журнала с RESET
MASTER
оператор, или подмножество их с PURGE BINARY LOGS
. См. Раздел
13.7.6.6,"RESET
Синтаксис", и Раздел
13.4.1.1,"PURGE BINARY LOGS
Синтаксис".
Если Вы используете репликацию, недопустимо удалить старые двоичные файлы журнала на ведущем устройстве, пока Вы
не уверены, что никакое ведомое устройство все еще не должно использовать их. Например, если Ваши ведомые
устройства, никогда выполняемые больше чем три дня позади, один раз в день, можно выполниться, сброс mysqladmin - входит в систему ведущее устройство, и
затем удалите любые журналы, которые является больше чем тремя днями. Можно удалить файлы вручную, но
предпочтительно использовать PURGE BINARY
LOGS
, который также безопасно обновляет двоичный индексный файл журнала для Вас (и который может
взять параметр даты). См. Раздел 13.4.1.1,"PURGE BINARY LOGS
Синтаксис".
Можно вывести на экран содержание двоичных файлов журнала с mysqlbinlog утилитой. Это может быть полезно, когда Вы хотите повторно обработать операторы в журнале для работы восстановления. Например, можно обновить сервер MySQL от двоичного журнала следующим образом:
shell> mysqlbinlog log_file
| mysql -h server_name
mysqlbinlog также может использоваться, чтобы вывести на экран ведомое устройство репликации релейное содержание файла журнала, потому что они пишутся, используя тот же самый формат в качестве двоичных файлов журнала. Для получения дополнительной информации по mysqlbinlog утилите и как использовать это, см. Раздел 4.6.8, "mysqlbinlog — Утилита для Обработки Двоичных Файлов журнала" . Для получения дополнительной информации о двоичном журнале и операциях восстановления, см. Раздел 7.5, "Момент времени (Инкрементное) Восстановление Используя Двоичный Журнал".
Двоичное журналирование сразу делается после оператора или транзакции завершается, но прежде, чем любые блокировки будут выпущены, или любая фиксация делается. Это гарантирует, что журнал зарегистрирован порядок фиксации.
Обновления к нетранзакционным таблицам сразу сохранены в двоичном журнале после выполнения.
В пределах незафиксированной транзакции, все обновления (UPDATE
, DELETE
,
или INSERT
) то изменение транзакционные таблицы такой как InnoDB
таблицы кэшируются до a COMMIT
оператор получается сервером. В той точке mysqld пишет всю транзакцию в двоичный журнал перед COMMIT
выполняется.
Модификации к нетранзакционным таблицам не могут откатываться. Если транзакция, которая откатывается, включает
модификации в нетранзакционные таблицы, вся транзакция регистрируется с a ROLLBACK
оператор в конце, чтобы гарантировать, что модификации к тем
таблицам тиражируются.
Когда поток, который обрабатывает транзакцию, запускается, это выделяет буфер binlog_cache_size
буферизовать операторы. Если оператор больше, чем это, поток
открывает временный файл, чтобы сохранить транзакцию. Временный файл удаляется, когда поток заканчивается.
Binlog_cache_use
переменная состояния показывает число транзакций, которые
использовали этот буфер (и возможно временный файл) для того, чтобы сохранить операторы. Binlog_cache_disk_use
переменная состояния показывает, сколько из тех
транзакций фактически должно было использовать временный файл. Эти две переменные могут использоваться для того,
чтобы настроиться binlog_cache_size
к достаточно большому значению, которое избегает использования временных файлов.
max_binlog_cache_size
системная переменная (значение по умолчанию 4 Гбайт,
который является также максимумом) может использоваться, чтобы ограничить полный размер, используемый, чтобы
кэшировать транзакцию многократного оператора. Если транзакция больше чем это много байтов, она приводит к сбою
и откатывает. Минимальное значение 4096.
Если Вы используете двоичный журнал и строку, базируемую, регистрируя, параллельные вставки преобразовываются в
нормальные вставки для CREATE ... SELECT
или INSERT ... SELECT
операторы. Это делается, чтобы гарантировать, что можно
воссоздать точную копию своих таблиц, применяя журнал во время операции резервного копирования. Если Вы
используете основанное на операторе журналирование, исходный оператор пишется журналу.
У двоичного формата журнала есть некоторые известные ограничения, которые могут влиять на восстановление после резервных копий. См. Раздел 16.4.1, "Функции репликации и Проблемы".
Двоичное журналирование для сохраненных программ делается как описано в Разделе 18.7, "Двоичное Журналирование Сохраненных Программ".
Отметьте, что двоичный формат журнала отличается по MySQL 5.7 от предыдущих версий MySQL, из-за улучшений в репликации. См. Раздел 16.4.2, "Версии MySQL Replication Compatibility Between".
Записи к двоичному файлу журнала и двоичному индексному файлу журнала обрабатываются таким же образом как записи
к MyISAM
таблицы. См. Раздел
C.5.4.3, "Как MySQL Handles a Full Disk".
По умолчанию двоичный журнал не синхронизируется с диском в каждой записи. Так, если операционная система или
машина (не только сервер MySQL) катастрофические отказы, есть шанс, что последние операторы двоичного журнала
теряются. Чтобы предотвратить это, можно заставить двоичный журнал синхронизироваться с диском после каждого N
записи к двоичному журналу, с sync_binlog
системная переменная. См. Раздел
5.1.4, "Системные Переменные Сервера". 1 самое безопасное значение для sync_binlog
, но также и самое медленное. Даже с sync_binlog
набор к 1, есть все еще шанс несогласованности между табличным
контентом и двоичным контентом журнала в случае катастрофического отказа. Например, если Вы используете InnoDB
таблицы и серверные процессы MySQL a COMMIT
оператор, это пишет целую транзакцию в двоичный журнал и затем
фиксирует эту транзакцию в InnoDB
. Если катастрофические отказы сервера между теми
двумя операциями, транзакция откатывается InnoDB
в перезапуске, но все еще
существует в двоичном журнале. Чтобы разрешить это, следует установить --innodb_support_xa
к 1. Хотя эта опция связывается с поддержкой транзакций XA
в InnoDB, это также гарантирует, что двоичный журнал и файлы данных InnoDB синхронизируются.
Для этой опции, чтобы обеспечить больший запас прочности, сервер MySQL должен также быть сконфигурирован, чтобы
синхронизировать двоичный журнал и InnoDB
журналы к диску прежде, чем фиксировать
транзакцию. InnoDB
журналы синхронизируются по умолчанию, и sync_binlog=1
может использоваться, чтобы синхронизировать двоичный журнал. Эффект этой опции состоит в том что в перезапуске
после катастрофического отказа, после выполнения отката транзакций, откатываемых сокращений сервера MySQL InnoDB
транзакции от двоичного журнала. Это гарантирует, что двоичный журнал
отражает точные данные InnoDB
таблицы, и таким образом, что ведомое устройство
остается в синхронии с ведущим устройством (не получение оператора, который откатывался).
Если сервер MySQL обнаруживает при восстановлении катастрофического отказа, что двоичный журнал короче, чем это
должно было быть, это испытывает недостаток в по крайней мере одном успешно фиксировавшем InnoDB
транзакция. Это не должно произойти если sync_binlog=1
и диск/файловая система
делает фактическую синхронизацию, когда их требуют к (некоторые не делают), таким образом, сервер печатает
сообщение об ошибке The binary log
. В этом случае этот двоичный журнал не корректен, и репликация должна
быть перезапущена от нового снимка данных ведущего устройства. file_name
is
shorter than its expected size
Значения сеанса следующих системных переменных пишутся двоичному журналу и соблюдаются ведомым устройством репликации, анализируя двоичный журнал:
sql_mode
(за исключением того, что NO_DIR_IN_CREATE
режим не тиражируется; см. Раздел
16.4.1.33, "Репликация и Переменные"),