предисловие
Текст был включен в мою избранную статью на GitHub, Welcome Star:GitHub.com/Zhongf UC очень…
Некоторое время назад мой старший брат спросил меня: «Вы знаете, как гарантируется атомарность MySQL?» Я запутался, как MySQL гарантирует атомарность? Я не буду.
Все знают, что означает атомарность в транзакции:Транзакция состоит из нескольких операций, все или ни одна из которых не выполняется."
Так что мой старший брат сказал мне: «Что используется,undo log
Какие".
Я: "Блять, опять слепое пятно знаний"
Позже я посмотрел его в Интернете, и в MySQL есть несколько распространенных.log
, соответственно:
undo log
binlog
redo log
Если вы не следовали этимlog
, пожалуйста, оставьте мне сообщение в области комментариев,Заставляет меня чувствовать, что я не единственный, кто делает это, хорошо??
Позже я снова поискал, на самом деле такие журналы есть винтервьюЯ часто спрашиваю, когда я, эта статья в самом простом виде, и я надеюсь, что она будет полезна для всех.
1. Что такое бинлог
binlog
На самом деле, это много слышно в повседневной разработке, потому что во многих случаях обновление данных зависит отbinlog
.
Возьмем очень простой пример: наши данные хранятся в базе данных, и вот мы изменили содержимое поля товара (изменение базы данных), иДанные, полученные пользователем, проходят через поисковую систему.. Чтобы пользователи могли искать последние данные, нам также необходимо изменить данные движка.
В одном предложении:База данных меняется, данные поисковых систем тоже нужно менять.
Так что будем следитьbinlog
меняется, еслиbinlog
Если есть изменение, то нам нужно записать изменение в соответствующий источник данных.
что
binlog
?
binlog
Записывает структуру таблицы базы данных и изменения данных таблицы, такие какupdate/delete/insert/truncate/create
. это не будет регистрироватьсяselect
(поскольку это не внесло изменений в таблицу)
binlog
На что это похоже?
binlog
Мы можем просто понять это как: сохранение каждого измененияSQL
Заявление (разумеется, из рисунка ниже не только SQL, но и XID «идентификатор транзакции» и т. д.)
binlog
для чего обычно используется
Есть две основные функции:Копировать и восстанавливать данные
- MySQL часто используется в компанияхОдин хозяин, много рабовКонструктивно подчиненный сервер должен быть согласован с данными главного сервера, что через
binlog
достигать - Данные в базе удалены, можем пройти
binlog
для восстановления данных.
так какbinlog
изменения в таблице базы данных записываются, поэтому мы можем использоватьbinlog
Выполнение репликации (репликация master-slave) и восстановление данных.
2. Что такое журнал повторов
Предположим, у нас есть оператор sql:
update user_table set name='java3y' where id = '3'
Когда MySQL выполняет этот оператор SQL, он должен сначалаid=3
чтобы узнать эту запись , а затемname
поле, которое нужно изменить. Это нормально?
Фактически, основная структура хранения Mysql такова:Страница(Все записи хранятся на странице), поэтому MySQL сначала помещает запись туда, гдеСтраницаНайдите, затем загрузите страницу в память и измените соответствующую запись.
Теперь может быть проблема:Что делать, если данные в памяти изменились, а база данных зависла, не успев сброситься на диск?? Видимо, это изменение было потеряно.
Если каждый запрос долженНемедленноПосле сброса диска скорость будет очень низкой, и MySQL может не выдержать этого. Так как же MySQL это делает?
Представлен MySQLredo log
, память закончилась, а потом копия будет записанаredo log
, этоredo log
записать это времякакие изменения были сделаны на странице.
на самом деле написатьredo log
, также будетbuffer
, это написать сначалаbuffer
, а потом действительно падают на диск. Что касается отbuffer
Когда диск будет сброшен, нам нужно будет настроить конфигурацию.
Писатьredo log
Ему тоже нужно писать на диск, но его преимущество в том, что顺序IO
(Мы все знаем, что последовательный ввод-вывод намного быстрее, чем случайный ввод-вывод).
так,redo log
Существование: когда мы модифицируем, память записывается, но данные на самом деле не записывались на диск. На данный момент наша база данных не работает, мы можемredo log
для восстановления данных. так какredo log
является последовательным вводом-выводом, поэтомуНаписание быстро,иredo log
Записи являются физическими изменениями (страница xxxx была изменена на xxx), размер файла очень мал,Восстановление быстрое.
Три, бинлог и журнал повторов
Увидев это, вы можете подумать:binlog
иredo log
Эти два слишком похожи, они оба используются для «восстановления».
По сути они похожи кроме "рекавери", но много и разных.Позвольте мне перечислить их ниже.
сохраненный контент
binlog
записал, чтоupdate/delete/insert
Оператор SQL, подобный этому, в то время какredo log
То, что записывается, является содержанием физической модификации (xxxx страница изменена xxx).
Итак, при поиске информации будет что-то вроде этого:redo log
данные записываютсяфизические изменения,binlog
данные записываютсялогическое изменение
Функции
redo log
рольУпорствородившийся. После записи памяти, если БД зависнет, то можно пройтиredo log
Для восстановления данных, которые память не успела сбросить на диск,redo log
Загружается в память, память можно восстановить до данных до зависания.
binlog
Роль - воспроизводить и восстанавливать.
- Главный-подчиненный сервер должен поддерживать согласованность данных посредством
binlog
для синхронизации данных. - Если все данные базы данных будут удалены,
binlog
Сохраняет все изменения данных, затем вы можете пройтиbinlog
для восстановления данных.
Когда вы увидите это снова, вы подумаете: «Если данные во всей базе удалены, то я могу использоватьredo log
записи восстанавливать? "не может
Из-за разных функций,redo log
Он хранит изменения физических данных.Если данные в нашей памяти были сброшены на диск, тоredo log
данные недействительны. такredo log
не будет хранитьсяисторияВсе данные меняются,Содержимое файла будет перезаписано.
Детали записи binlog и redo log
redo log
Он генерируется движком MySQL InnoDB.
binlog
Независимо от того, какой движок использует MySQL, он будет.
InnoDB является транзакционной, что является одной из четырех основных характеристик транзакций: постоянство зависит отredo log
(Если запись в память прошла успешно, но данные фактически не были сброшены на диск, если в это время база данных зависла, мы можем полагаться наredo log
для восстановления данных в памяти, что обеспечивает постоянство).
Как упоминалось выше, при изменении данныхbinlog
запишет содержание изменения,redo log
Изменения также будут записаны. (Только один хранит физические изменения, а другой хранит логические изменения). Так каков их порядок записи?
redo log
бизнес начинаетсяКогда , начните записывать информацию о каждом изменении иbinlog
вфиксация транзакциитолько при записи.
Итак, возникает новая проблема: я пишу один из нихlog
, не получилось, что тогда будет? Теперь наша предпосылка состоит в том, чтобы сначала написатьredo log
, затем написатьbinlog
, Посмотрим:
- если написать
redo log
Если не получается, то думаем, что проблема с этой транзакцией, откатываемся и больше не пишемbinlog
. - если написать
redo log
успехов, пишиbinlog
,Писатьbinlog
Я на полпути к написанию, но что, если я потерплю неудачу? Мы все равно сделаем это в этот разоткат транзакции, будет недействительнымbinlog
удалить (потому чтоbinlog
Это повлияет на данные из библиотеки, поэтому нужно удалить) - если написать
redo log
иbinlog
Если они увенчаются успехом, то на этот раз сделка будет по-настоящему удачной.
Вкратце: MySQL должен гарантироватьredo log
иbinlog
изданные согласуютсяДа, если это не совпадает, это испорчено.
- если
redo log
писать не получается, покаbinlog
Пишите успешно. Что предполагает, что данные в памяти не успели сбросить на диск, и машина зависнет. Данные главного и подчиненного серверов несовместимы. (с сервера черезbinlog
получать самые свежие данные, а главный сервер из-заredo log
Нет записей, нет возможности восстановить данные) - если
redo log
писать успешно иbinlog
Написать не удалось. Тогда вы не сможете получить последние данные с сервера.
MySQL черездвухэтапная фиксациягарантироватьredo log
иbinlog
данные согласуются.
процесс:
-
Фаза 1: InnoDB
redo log
Запись на диск, транзакция InnoDB входитprepare
государство -
Этап 2:
binlog
Запись на диск, транзакция InooDB входитcommit
государство -
за транзакцию
binlog
в конце аXID event
, указывающий, успешно ли совершена транзакция, то есть в процессе восстановления,binlog
Все после последнего события XID должно быть очищено.
4. Что такое журнал отмен
undo log
Какая польза?
undo log
Есть две основные функции: откат и контроль многоверсионности (MVCC)
Когда данные изменяются, не только записиredo log
, также записьundo log
, если транзакция завершается сбоем или по какой-либо причине откатывается, вы можете использоватьundo log
откат
undo log
Основное хранилище также является логическим журналом.Например, мы хотимinsert
часть данных,undo log
запишет соответствующийdelete
бревно. мы хотимupdate
Когда запись записана, она запишет соответствующийНапротивзапись обновления.
Это также должно быть легко понять, ведь откат — это обратная операция, которую необходимо изменить, чтобы можно было достичь цели отката. Поскольку мы поддерживаем операции отката, мы можем гарантировать:Транзакция состоит из нескольких операций, все или ни одна из которых не выполняется.". [атомарность]
так какundo log
Сохраняет данные перед модификацией, что эквивалентноПредыдущая версия, MVCC реализует неблокирующие операции чтения и записи и при чтении должен возвращать только данные предыдущей версии.
Наконец
В этой статье ставитсяbinlog
/redo log
/undo log
Были объяснены самые основные знания, и есть некоторые детали, которые можно дополнить самостоятельно (например,binlog
Есть несколько режимов, а также упомянутая в статье стратегия чистки и т.д.)
Если вы думаете, что узнали что-то, пожалуйста, дайте мне большой палец вверх.
Использованная литература:
- woohoo.brief.com/afraid/4 метод сохранения версии 27…
- Особенно Aliyun.com/articles/61…
- ACID-принцип MySQL!
- Как MySQL реализует D в ACID?
- Блог Woohoo.cn на.com/no series/afraid/…
если ты хочешьв реальном времениЕсли вы обратите внимание на мои обновленные статьи и галантерейные товары, которыми я делюсь, вы можете подписаться на мой публичный аккаунт "Java3y".
- 🔥Java красивая карта мозга
- 🔥Маршрут обучения Java
- 🔥Разработка общих инструментов
Ответить под публичным аккаунтом"888", чтобы получить его! !
Эта книга была включена в мои избранные статьи на GitHub, добро пожаловать, звезда:GitHub.com/Zhongf UC очень…
попросить лайк Пожалуйста, следите за ️ поделитесь пожалуйста 👥 Спросите сообщение 💬верно для меняочень полезно! ! !