digital-garden/wiki/zero/00 MySQL.md

51 lines
3.5 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:
- 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