Статья была выбрана Github, добро пожаловать в Star:GitHub.com/Yehongqin/Лай…
предисловие
Вы когда-нибудь задумывались, почему базы данных MySQL могут выполнять репликацию ведущий-ведомый, сохраняемость и откат? На самом деле ключ лежит в трех типах MySQL.log
, Соответственно:
- binlog
- redo log
- undo log
Эти три журнала также являются проблемой, которую часто будут задавать на собеседовании.Давайте посмотрим на нее.
1. бинлог
Binlog должен быть журналом в mysql, который я слышу чаще всего в повседневной жизни.
Итак, что такое бинлог?
бинлог используется дляДвоичные журналы, которые записывают структуру таблицы базы данных и изменения данных таблицы.Такие, как вставка, обновление, удаление, создание, усечение и т. д., операция не будет записывать выборку, показывать операцию, потому что изменение не произошло с самими данными.
Как выглядит файл binlog?
использоватьmysqlbinlog
команду можно просмотреть.
Каждый измененный оператор SQL будет записан, а также время начала выполнения, время окончания, идентификатор транзакции и другая информация.
Как проверить открыт ли бинлог, если нет, то как его установить?
использовать командуshow variables like '%log_bin%';
Проверьте, открыт ли бинлог.
Если бинлог не включается как на картинке выше, как его включить?
оказатьсяmy.cnf
Файл конфигурации, добавьте следующую конфигурацию (версия mysql 5.7.31):
# 打开binlog
log-bin=mysql-bin
# 选择ROW(行)模式
binlog-format=ROW
После модификации перезапустите mysql и конфигурация вступит в силу.
воплощать в жизньSHOW MASTER STATUS;
Вы можете просмотреть текущее записанное имя файла binlog.
Для чего используется бинлог?
Во-первых, для репликации master-slave. Как правило, когда компания имеет структуру из одного ведущего и двух ведомых, главный узел должен открыть журнал binlog, а ведомый подписывается на информацию журнала binlog.Поскольку журнал binlog записывает изменения данных базы данных, когда мастер изменяет данные, ведомый также может быть изменен с изменением данных главного узла для достижения эффекта репликации ведущий-ведомый.
Во-вторых, для восстановления данных. Поскольку binlog записывает изменения базы данных, его можно использовать для восстановления данных. Мы видим, что на приведенном выше рисунке есть поле с именем Position, и этот параметр является указателем, используемым для записи журнала binlog. Когда нам нужно восстановить данные, просто укажите--start-position
и--stop-position
, или указать--start-datetime
и--stop-datetime
, то данные в указанном интервале могут быть восстановлены.
Два, журнал повтора
Предположим, что есть оператор обновления:
UPDATE `user` SET `name`='刘德华' WHERE `id`='1';
Давайте представим шаги изменения данных mysql, это должно быть сначалаid
= '1', чтобы узнать данные, а затем измените имя на 'Энди Лау'. Идя глубже, MySQL использует страницы в качестве структур хранения, поэтому MySQL сначала загрузит страницу, на которой находится запись, в память, а затем изменит запись. Но все мы знаем, что mysql поддерживает персистентность, а окончательные данные существуют на диске.
Предположим, что данные для модификации загружены в память, и модификация прошла успешно, но не успела сбросить на диск, в это время база данных не работает, и данные после успешной модификации будут потерял.
Чтобы избежать этой проблемы, MySQL представил журнал повторов.
Как показано на рисунке, при выполнении операции изменения данных данные сначала загружаются в память, а затем обновляются в памяти, после завершения обновления записываются в буфер журнала повторов, а затем записываются в журнал повторов с помощью файла буфера журнала повторов.
Файл журнала повторов записывает, что страница xxx была изменена xxx, поэтому, даже если mysql не работает, восстановление данных может быть выполнено через журнал повторов, то есть после успешного обновления в памяти, даже если это не так. сброшен на диск, это не приведет к потере данных из-за простоя.
Как журнал повторов и механизм транзакций работают вместе?
как показано на рисунке:
Шаги 1-3 заключаются в том, чтобы изменить данные и затем записать их в память.
Четвертый шаг — запись в журнал повторов, а затем перевод записи в состояние подготовки.
Шаги 5 и 6 фиксируют транзакцию.После того как транзакция зафиксирована, шаг 7 изменяет состояние записи на состояние фиксации.
Согласованность между транзакциями и журналом повторов гарантируется.
И бинлог, и журнал повторов могут восстанавливать данные, в чем разница?
Журнал повторов предназначен для восстановления данных, которые еще не были сброшены на диск после обновления памяти.
Бинлог сохраняет все изменения данных.Теоретически, пока данные, записанные в бинлоге, можно восстановить.
Например,Если данные всей базы данных случайно удалены, можно ли восстановить данные с помощью файла журнала повторов??
Нельзя использовать Redo Log File Recovery, восстановление файла можно использовать только Binlog. Поскольку файл журнала Redo не хранит все изменения данных изменений данных, когда данные обновления памяти на диске, данные журнала REDO по сбою, который является содержимым файла журнала Redo, будет перезаписан.
Когда записывается бинлог?
А, в момент совершения транзакции.
3. журнал отмены
Роль журнала отмены в основномдля отката, Атомарность транзакций базы данных mysql достигается за счет журнала отмены. Все мы знаем, что атомарность относится к серии операций с базой данных, которые либо завершаются успешно, либо завершаются неудачно.
Журнал отмен в основном хранит журнал логических изменений данных.Например, мы хотимinsert
Часть данных, после чего журнал отмены будет генерировать соответствующий журнал удаления. Проще говоря, журнал отмены записывает данные до изменения данных, потому что он должен поддерживать откат.
Затем, когда вам нужно откатиться, вам нужно только использовать журнал журнала отмены, чтобы восстановить данные до модификации.
Еще одна роль журнала отмены:Реализует управление несколькими версиями (MVCC), запись отмены содержит изображение до изменения записи,Если транзакция, изменившая данные, не зафиксирована, для транзакций, уровень изоляции которых больше или равен фиксации чтения,Не должен возвращать измененные данные, но должен возвращать старую версию данных.
Суммировать
После изучения мы знаем, что эти три вида журналов играют важную роль в mysql.Давайте рассмотрим:
- binlog в основном используется для репликации и восстановления данных.
- Журнал повторов используется для восстановления данных, которые еще не были сброшены на диск после обновления памяти.
- Журнал отмены используется для реализации отката и управления несколькими версиями.
Это все, что касается этой статьи, спасибо за чтение, я надеюсь, что вы сможете что-то получить после ее прочтения!
Статьи постоянно обновляются. Wechat ищет «энтузиастов технологии Java», а отправленные технические статьи получают как можно скорее после того, как обращают на них внимание. Статьи классифицируются и включаются в github:github.com/yehongzhi, вы всегда сможете найти то, что вас интересует
Ставьте лайки, если считаете это полезным, ваши лайки — самая большая мотивация для моего творчества.~
Я программист, который изо всех сил старается запомниться. Увидимся в следующий раз! ! !
Возможности ограничены, если есть какие-то ошибки или неуместности, пожалуйста, критикуйте и исправьте их, учитесь и общайтесь вместе!