digital-garden/_inbox/Statement Based Replication (SBR).md
2024-06-13 21:01:37 +03:00

36 lines
2.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
aliases:
- SBR
tags:
- зрелость/🌱
date:
- - 2024-06-02
zero-link:
- "[[00 MySQL]]"
parents:
- "[[Репликация в MySQL]]"
linked:
- "[[Row Based Replication (RBR)]]"
---
Данная репликация работает на уровне самих запросов. То есть мастер сохраняет в журнал SQL запросы, а слейв получает этот список запросов и проигрывает их у себя.
В основе данной репликации лежит журнал [Statement-based Binary Log](Журналы%20в%20MySQL.md#Statement-based%20Binary%20Log).
**Плюсы:**
- Небольшое количество передаваемых данных, при однотипных изменениях. Например, если мы изменяем 5 миллионов строк одним запросом: `UPDATE users SET bonus=bonus+100`, то нужно передать только 1 строку запроса.
- В журнале все записано в понятном человеко-читаемом виде.
**Проблемы:**
* Недетерминирован. Каждый запрос самостоятельно исполняется на слейве.
* Вызов функций, например функции `now()`. В момент попадания запроса на slave это будет уже другое время.
- [Остальные примеры](https://dev.mysql.com/doc/refman/8.0/en/replication-rbr-safe-unsafe.html)
- uuid()
- fund_rows()
- rand()
- UDF
- триггеры на апдейт
- auto_increment поля
- Сложные запросы выполняются долго.
- Если запрос выполняется 10 минут, то он сначала будет выполняться 10 минут на мастере, а потом еще 10 минут на репликах.
Для того чтобы SBR работала корректно, есть специальный флажок.