51 lines
3.5 KiB
Markdown
51 lines
3.5 KiB
Markdown
---
|
||
aliases:
|
||
- MySQL
|
||
tags:
|
||
- type/zero-link
|
||
zero-link:
|
||
- "[[00 Базы Данных]]"
|
||
---
|
||
- [Репликация в MySQL](Репликация%20в%20MySQL.md)
|
||
- [libslave](libslave.md)
|
||
- [Бекап в MySQL](Бекап%20в%20MySQL.md)
|
||
- [Индексы в MySQL](Индексы%20в%20MySQL.md)
|
||
- [Журналы в MySQL](Журналы%20в%20MySQL.md)
|
||
- [Explain в MySQL](Explain%20в%20MySQL.md)
|
||
|
||
## Архитектура MySQL
|
||
![](Pasted%20image%2020240613195204.png)
|
||
|
||
Есть логический слой под названием MySQL, который занимается общими и изолированными от хранения данных операциями: кэширование, построение плана запроса и так далее. А есть конкретный физический слой, который отвечает за хранение данных. Он использует интерфейс подключения, то есть реализации хранилищ могут быть разными.
|
||
|
||
Логический слой, общий для всех движков:
|
||
- В управлении подключением происходит авторизация. Каждый клиент работает в своем независимом потоке. Каждый поток может кэшироваться сервером.
|
||
- Кэш запросов. Представлен одним общим потоком для всех клиентов. Может оказаться узким местом.
|
||
- Парсер. Проверяет синтаксис запроса. Проверяет наличие прав доступа. Проверяет наличие ответов в кэше запросов.
|
||
- Оптимизатор. Составляет план запроса. Из хранилища запрашивается статистика запросов.
|
||
- Исполнитель. Обращается за данными в хранилище согласно плану запроса. Обновляет значения в кэше запросов.
|
||
|
||
Индексы реализуются на уровне движка хранилища, и каждый движок может предоставлять свою реализацию одного и того же индекса.
|
||
|
||
|
||
![](Pasted%20image%2020240528082025.png)
|
||
|
||
- [Журналы в MySQL](Журналы%20в%20MySQL.md)
|
||
## Идентификация транзакций
|
||
До версии 5.5 идентифицировать транзакцию можно было только по имени файла и позиции в этом файле. Потом появились GTID, но надо явно включить gtid_mode =ON. C 5.6.5 GTID используется по умолчанию.
|
||
|
||
binary log position:
|
||
- Пример: mysql-bin.00078:44
|
||
- Локальный для сервера
|
||
- Обязательно сломается
|
||
|
||
GTID:
|
||
- Пример: 7F33BC78-56CA-44B3-5E33-B34CC7689333:44
|
||
- Глобален, генерируется автоматически при коммите
|
||
- Бесплатная трассировка
|
||
- Простой slave promotion
|
||
- ==Используйте его==
|
||
|
||
## Заметки
|
||
- MySQL пишет на диск в три места – хранилище (tablespace), журнал (undo/redo log), и Binary Log
|
||
- mariadb -Форк Mysql, который пытается исправить архитектурные ошибки MySQL |