Spec-Zone .ru
спецификации, руководства, описания, API
|
Работая в MIXED
регистрируя формат, сервер автоматически переключается от
основанного на операторе до основанного на строке журналирования при следующих условиях:
Когда функция содержит UUID()
.
Когда одна или более таблиц с AUTO_INCREMENT
столбцы
обновляются и триггер или сохранили функцию, вызывается. Как все другие опасные операторы, это
генерирует предупреждение если binlog_format = STATEMENT
.
Для получения дополнительной информации см. Раздел
16.4.1.1, "Репликация и AUTO_INCREMENT
".
Когда тело представления требует построчной репликации, оператор, создающий
представление также, использует это. Например, это происходит, когда оператор, создающий представление,
использует UUID()
функция.
Когда звонок в UDF включается.
Когда любой INSERT
DELAYED
выполняется для нетранзакционной таблицы.
Если оператор регистрируется строкой и сеансом, который выполнился, у оператора есть любые временные таблицы, регистрирующий строкой используется для всех последующих операторов (за исключением тех, которые получают доступ к временным таблицам), пока все временные таблицы в использовании тем сеансом не отбрасываются.
Это - истина, регистрируются ли какие-либо временные таблицы фактически.
Временные таблицы не могут быть зарегистрированы, используя основанный на строке формат; таким образом, как только основанное на строке журналирование используется, все последующие операторы, используя ту таблицу опасны. Сервер приближает это условие, обрабатывая все операторы, выполняемые во время сеанса как опасное, пока сеанс больше не содержит временных таблиц.
Когда FOUND_ROWS()
или ROW_COUNT()
используется. (Ошибка #12092, Ошибка #30244)
Когда USER()
,
CURRENT_USER()
,
или CURRENT_USER
используется. (Ошибка #28086)
Когда оператор обращается к одной или более системным переменным. (Ошибка #31168)
Исключение. Следующие системные переменные, когда использующийся с контекстом сеанса (только), не заставляют формат журналирования переключаться:
Для получения информации об определении системного контекста переменной см. Раздел 5.1.5, "Используя Системные Переменные".
Для получения информации о том, как репликация обрабатывает sql_mode
, см. Раздел
16.4.1.33, "Репликация и Переменные".
Когда одна из включенных таблиц является таблицей журнала в mysql
база данных.
Когда LOAD_FILE()
функция используется. (Ошибка #39701)
Предупреждение сгенерировано, если Вы пытаетесь выполнить оператор, используя основанное на
операторе журналирование, которое должно быть записано, используя основанное на строке журналирование.
Предупреждению показывают обоих в клиенте (в выводе SHOW WARNINGS
) и через mysqld журнал ошибок. Предупреждение добавляется к SHOW WARNINGS
таблица каждый раз такой оператор выполняется. Однако,
только первый оператор, который генерировал предупреждение для каждого клиентского сеанса, пишется журналу
ошибок, чтобы предотвратить лавинную рассылку журнала.
В дополнение к решениям выше, отдельные механизмы могут также определить формат журналирования, используемый, когда информация в таблице обновляется. Возможности журналирования отдельного механизма могут быть определены следующим образом:
Если механизм поддерживает основанное на строке журналирование, механизм, как говорят, является способным журналированием строки.
Если механизм поддерживает основанное на операторе журналирование, механизм, как говорят, является способным журналированием оператора.
Данный механизм хранения может поддерживать или или оба формата журналирования. Следующая таблица приводит форматы, поддерживаемые каждым механизмом.
Механизм хранения | Поддерживаемое Журналирование строки | Поддерживаемое Журналирование оператора |
---|---|---|
ARCHIVE |
Да | Да |
BLACKHOLE |
Да | Да |
CSV |
Да | Да |
EXAMPLE |
Да | Нет |
FEDERATED |
Да | Да |
HEAP |
Да | Да |
InnoDB |
Да | Да, когда уровень изоляции транзакции REPEATABLE READ или SERIALIZABLE ; Nootherwise.
|
MyISAM |
Да | Да |
MERGE |
Да | Да |
NDB |
Да | Нет |
В MySQL 5.6, должен ли оператор быть зарегистрирован и режим журналирования, который будет использоваться,
определяется согласно типу оператора (безопасный, опасный, или введенный двоичный файл), двоичный формат
журналирования (STATEMENT
, ROW
, или MIXED
), и возможности журналирования механизма хранения (способный оператор,
способная строка, оба, или ни один). Операторы могут быть зарегистрированы с или без предупреждения; отказавшие
операторы не регистрируются, но генерируют ошибки в журнале. Это показывают в следующей таблице решений, где
SLC обозначает "журналирование оператора, способное"
и стенды RLC для "журналирования строки, способного".
Условие | Действие | ||||
---|---|---|---|---|---|
Ввести | binlog_format
|
SLC | RLC | Ошибка / Предупреждение | Зарегистрированный как |
* | * |
Нет | Нет | Ошибка: не Может выполнить оператор: Двоичное журналирование невозможно, так как по крайней мере один механизм включается, который и неспособен к строке и неспособен к оператору. | - |
Безопасный | STATEMENT |
Да | Нет | - | STATEMENT |
Безопасный | MIXED |
Да | Нет | - | STATEMENT |
Безопасный | ROW |
Да | Нет | Ошибка: не Может выполнить оператор: Двоичное журналирование
невозможно с тех пор BINLOG_FORMAT = ROW и по крайней мере одна таблица
использует механизм хранения, который не способен к основанному на строке журналированию.
|
- |
Опасный | STATEMENT |
Да | Нет | Предупреждение: оператор Unsafe binlogged в формате оператора, с тех
пор BINLOG_FORMAT = STATEMENT |
STATEMENT |
Опасный | MIXED |
Да | Нет | Ошибка: не Может выполнить оператор: Двоичное журналирование опасного
оператора невозможно, когда механизм хранения ограничивается основанным на операторе
журналированием, даже если BINLOG_FORMAT = MIXED .
|
- |
Опасный | ROW |
Да | Нет | Ошибка: не Может выполнить оператор: Двоичное журналирование
невозможно с тех пор BINLOG_FORMAT = ROW и по крайней мере одна таблица
использует механизм хранения, который не способен к основанному на строке журналированию.
|
- |
Инжекция строки | STATEMENT |
Да | Нет | Ошибка: не Может выполнить инжекцию строки: Двоичное журналирование не возможно, так как по крайней мере одна таблица использует механизм хранения, который не способен к основанному на строке журналированию. | - |
Инжекция строки | MIXED |
Да | Нет | Ошибка: не Может выполнить инжекцию строки: Двоичное журналирование не возможно, так как по крайней мере одна таблица использует механизм хранения, который не способен к основанному на строке журналированию. | - |
Инжекция строки | ROW |
Да | Нет | Ошибка: не Может выполнить инжекцию строки: Двоичное журналирование не возможно, так как по крайней мере одна таблица использует механизм хранения, который не способен к основанному на строке журналированию. | - |
Безопасный | STATEMENT |
Нет | Да | Ошибка: не Может выполнить оператор: Двоичное журналирование
невозможно с тех пор BINLOG_FORMAT = STATEMENT и по крайней мере одна
таблица использует механизм хранения, который не способен к основанному на операторе журналированию.
|
- |
Безопасный | MIXED |
Нет | Да | - | ROW |
Безопасный | ROW |
Нет | Да | - | ROW |
Опасный | STATEMENT |
Нет | Да | Ошибка: не Может выполнить оператор: Двоичное журналирование
невозможно с тех пор BINLOG_FORMAT = STATEMENT и по крайней мере одна
таблица использует механизм хранения, который не способен к основанному на операторе журналированию.
|
- |
Опасный | MIXED |
Нет | Да | - | ROW |
Опасный | ROW |
Нет | Да | - | ROW |
Инжекция строки | STATEMENT |
Нет | Да | Ошибка: не Может выполнить инжекцию строки: Двоичное журналирование
не возможно с тех пор BINLOG_FORMAT = STATEMENT .
|
- |
Инжекция строки | MIXED |
Нет | Да | - | ROW |
Инжекция строки | ROW |
Нет | Да | - | ROW |
Безопасный | STATEMENT |
Да | Да | - | STATEMENT |
Безопасный | MIXED |
Да | Да | - | ROW |
Безопасный | ROW |
Да | Да | - | ROW |
Опасный | STATEMENT |
Да | Да | Предупреждение: оператор Unsafe binlogged в формате оператора с тех
пор BINLOG_FORMAT = STATEMENT .
|
STATEMENT |
Опасный | MIXED |
Да | Да | - | ROW |
Опасный | ROW |
Да | Да | - | ROW |
Инжекция строки | STATEMENT |
Да | Да | Ошибка: не Может выполнить инжекцию строки: Двоичное журналирование
не возможно потому что BINLOG_FORMAT =STATEMENT .
|
- |
Инжекция строки | MIXED |
Да | Да | - | ROW |
Инжекция строки | ROW |
Да | Да | - | ROW |
Когда предупреждение производится определением, стандартный MySQL, предупреждающий, производится (и доступное
использование SHOW WARNINGS
). Информация также пишется mysqld журналу ошибок. Только одна ошибка для каждого
ошибочного экземпляра на клиентское соединение регистрируется, чтобы предотвратить лавинную рассылку журнала.
Сообщение журнала включает SQL-оператор, который был предпринят.
Если ведомый сервер был запущен с --log-warnings
включенный, ведомое устройство печатает сообщения к журналу ошибок,
чтобы предоставить информацию о ее состоянии, таком как двоичный журнал и релейные координаты журнала, где это
запускает свое задание, когда это переключается на другой релейный журнал, когда это повторно соединяется после
разъединения и т.д.