MySQL регистрирует 15 последовательных вопросов

интервью Java задняя часть

предисловие

Привет всем, ямаленький мальчик собирает улиток. Пришло золото, девятка, серебро и десятка, и разобрали 15 классических курсов MySQLжурнал вопросов интервью, Я надеюсь, что все должны помочь.

  • публика:маленький мальчик собирает улиток

1. Что такое журнал повторов, зачем нужен журнал повторов?

что такое журнал повторов?

  • журнал повторовжурнал повторов.
  • он записываетстраница данныхизменения выше.
  • это относится кделаИзмененные данные будут скопированы и сохранены.
  • Если сервер базы данных не работает или грязные страницы не записываются на диск, их можно восстановить с помощью журнала повторов.
  • этоИннодб хранилищеуникальный для двигателя

Зачем нужен журнал повторов?

  • Журнал повторов в основном используется как метод восстановления данных после аварийного перезапуска MySQL для обеспечения согласованности данных.
  • По сути, это взаимодействие с механизмом WAL MySQL. Поскольку MySQL выполняет операции обновления, чтобы быстро реагировать, он использует технологию асинхронной обратной записи на диск и возврата после записи в память. Но тогда будетпосле аварииСкрытая опасность потери данных в памяти, и журнал повторов может быть безопасным при сбоях.

2. Что такое технология WAL и в чем ее преимущества.

  • WAL, китайское полное название Write-Ahead Logging, его ключевой момент в том, что лог записывается сначала в память, а потом уже на диск. После того, как MySQL выполнит операцию обновления,Перед фактической записью данных на диск сначала зарегистрируйтесь.
  • Преимущество заключается в том, что данные не нужно записывать на диск в режиме реального времени для каждой операции, и их можно восстановить через журнал повторов даже после сбоя, что позволяет добиться быстрого отклика на операторы SQL.

3. Как вести журнал повторов

Журнал повторов состоит из двух частей, одна из которых находится в памяти.буфер журнала(буфер журнала повторов) и на дискежурнальный файл(файл журнала повторов).

Каждый раз, когда mysql выполняет оператор DML, он сначала записывает записьredo log buffer, Запишите несколько записей операций еще раз в момент времениredo log file. Этот вид записи логов, технология ответа на дискWAL.

В компьютерной операционной системе данные буфера в пользовательском пространстве (пользовательском пространстве), как правило, не могут быть напрямую записаны на диск и должны проходить через буфер пространства ядра операционной системы (т. е. буфер ОС).

  • Журнал изначально записывается в буфер журнала повторов, расположенный в подсистеме хранения Innodb, что делается в пользовательском пространстве.
  • Затем сохраните журнал в буфер (буфер ОС) в пространстве ядра операционной системы.
  • Наконец, через системный вызовfsync(),отOS bufferзаписано на дискredo log file, операция записи завершена. Эта операция записи на диск называетсящетка.

Мы можем обнаружить, что буфер журнала повторов записывается в файл журнала повторов, который передается через буфер ОС. Фактически через параметрinnodb_flush_log_at_trx_commitДля настройки значение параметра следующее:

  • 0: вызванотложенная запись, журнал в буфере журнала повторов не будет записываться в буфер ОС при фиксации транзакции, но будет записываться в буфер ОС каждую секунду и записываться в файл журнала повторов.
  • 1: называетсяПишите в режиме реального времени, сброс в реальном времени», журнал в буфере журнала повторов будет записываться в буфер ОС и сохраняться в файл журнала повторов каждый раз, когда транзакция фиксируется.
  • 2: называетсяЗапись в реальном времени, отложенный сброс. Каждая фиксация транзакции записывается в буфер ОС, затем каждую секунду журнал записывается в файл журнала повторов.

4. Процесс выполнения журнала Redo

Давайте посмотрим на процесс выполнения Redo log, предполагая, что исполняемый SQL выглядит следующим образом:

update T set a =1 where id =666

Redo log的执行流程

  1. Клиент MySQL запросит операторupdate T set a =1 where id =666, отправленный на уровень сервера MySQL.
  2. После того, как уровень сервера MySQL получает запрос SQL, он анализирует, оптимизирует, выполняет и другую работу по обработке и отправляет сгенерированный план выполнения SQL на уровень механизма хранения InnoDb для выполнения.
  3. Уровень механизма хранения InnoDb будета меняется на 1Эта операция заносится в память.
  4. После записи в память запись журнала повторов будет изменена, и будет добавлена ​​строка записи, содержание которойКакие изменения необходимо внести на какой странице данных.
  5. После этого установите статус транзакции для подготовки, указав, что транзакция готова к фиксации.
  6. После того, как уровень сервера MySQL обработает транзакцию, он установит статус транзакции вcommit, то есть зафиксировать транзакцию.
  7. Получив запрос на фиксацию транзакции,redo logЗапись операции, только что записанная в память, будет записана на диск для завершения всего процесса записи журнала.

5. Почему журнал повторов обеспечивает отказоустойчивость механизма?

  • Поскольку журнал повторов будет записываться после завершения каждой операции обновления, еслизапись не удалась, указывающий, что операция завершилась неудачно и транзакцию не удалось зафиксировать.
  • Внутренняя структура журнала повторов основана на страницах, в которые записываются изменения значений полей этой страницы. Пока журнал повторов читается и воспроизводится после сбоя, данные могут быть восстановлены.

6. Какова концепция бинлога, какую роль он играет и может ли он гарантировать безопасность при сбоях?

  • Журнал бинов — это архивный журнал, который относится к журналу уровня сервера MySQL. может быть реализованрепликация master-slaveиВосстановление данныхдве функции.
  • при необходимостиВосстановление данных, вы можете извлечь бинарный журнал в течение определенного периода времени для восстановления воспроизведения.
  • Но bin log не может быть безопасным при сбоях, потому что перед сбоем bin logможно не до конца написатьMySQL просто зависает. Так что нужно сотрудничатьredo logТолько после этого можно выполнить аварийную защиту.

7. В чем разница между binlog и redolog?

8. Каков процесс исполнителя и innoDB, выполняющих оператор обновления?

  • После того, как исполнитель выберет индекс оптимизатором, он вызовет интерфейс чтения InnoDB, чтобы прочитать строку, которая должна быть обновлена ​​​​в память.
  • После выполнения операции SQL обновите ее в памяти, затем запишите журнал повторов и запишите журнал bin.На этом она завершена.
  • Последующая InnoDB будет записывать результат этой операции обратно на диск, когда это необходимо.

9. Если база данных используется не по назначению, как выполнить восстановление данных?

Если база данных неправильно работает в определенное время, вы можете найти бинарный журнал узла времени, ближайшего к неправильному использованию, воспроизвести его во временную базу данных, а затем выбрать случайно удаленный узел данных и восстановить его в онлайн-базе данных.

10. Три формата бинлога

Журнал binlog имеет три формата

  • Заявление: репликация на основе операторов SQL ((репликация на основе операторов, SBR))
  • Строка: репликация на основе строк. (построчная репликация, RBR)
  • Смешанный: копируется смешанный режим. (смешанная репликация, MBR)

Формат заявления

Каждый sql, который изменяет данные, будет записан в binlog.

  • Преимущества: нет необходимости записывать изменения каждой строки, что уменьшает количество журналов binlog, экономит ввод-вывод и повышает производительность.
  • Недостаток: поскольку записываются только выполняемые операторы, для того, чтобы эти операторы правильно выполнялись в резервной базе данных, некоторая важная информация о каждом операторе во время выполнения также должна быть записана, чтобы гарантировать, что все операторы могут быть получены в резервной базе данных и выполнены на со стороны основной базы данных.время тот же результат.

Формат строки

Не записывает связанную с контекстом информацию SQL-запроса, сохраняет только запись, которая была изменена.

  • Преимущества: связанная с контекстом информация о выполненном операторе SQL не может быть записана в бинарный журнал, и необходимо записывать только запись о том, что было изменено. Таким образом, содержимое журнала уровня строки будет четко записывать детали каждой строки модификации данных. Не будет проблем с тем, что вызов и запуск хранимых процедур, функций или триггеров не может быть правильно скопирован при определенных обстоятельствах.
  • Недостаток: может генерировать большой объем содержимого журнала.

Смешанный формат

По сути, это комбинация Statement и Row. Общая модификация оператора использует формат statment для сохранения binlog.Например, некоторые функции, если оператор не может завершить операцию репликации master-slave, binlog сохраняется в формате строки.MySQL различает формат журнала для записи в соответствии для каждого конкретного выполняемого оператора SQL.

11. Что такое двухфазная фиксация MySQL и почему требуется двухфазная фиксация?

На самом деле, так называемая двухэтапность состоит в том, чтобы разделить транзакцию на две фазы для отправки.

两阶段提交

Двухфазная фиксация состоит из трех основных шагов:

  1. После записи журнала повторов он переходит в состояние подготовки.
  2. Исполнитель пишет в бин лог
  3. Войдя в состояние фиксации, транзакция может быть зафиксирована.

Зачем нужен двухэтапный коммит?

  • Если двухэтапная фиксация не используется, может случиться так, что машина выйдет из строя и ее необходимо будет перезапустить до того, как будет записан бинарный журнал. После перезапуска журнал повторов продолжает воспроизводить операции до сбоя, и когда позже журнал бинов потребуется восстановить в качестве резервной копии, возникнет несогласованность данных.
  • Если перед фиксацией произошел сбой бинарного журнала, то после перезапуска обнаруживается, что журнал повторов находится в состоянии подготовки и бинарный журнал завершен (после успешной записи бинарного журнала журнал повторов будет иметь отметку бинарного журнала), он автоматически зафиксируется, и механизм хранения отправит транзакцию.
  • Двухэтапная фиксация предназначена для обеспечения безопасности и согласованности данных журнала повторов и binlog. Только два файла журнала логически очень согласованы. Вы можете безопасно использовать журнал повторов, чтобы помочь вам восстановить состояние в базе данных до состояния до сбоя, и использовать binlog для реализации резервного копирования данных, восстановления и репликации master-slave.

12. Если это не двухэтапная фиксация, какие проблемы возникнут в двух случаях: сначала записывать журнал повторов и сначала записывать журнал bin?

  • Журнал повторов записывается первым, после сбоя резервная копия bin-лога восстанавливается с одним обновлением меньше, что не соответствует текущим данным.
  • Сначала запишите журнал bin, после сбоя, поскольку журнал повторов не записывается, транзакция недействительна, поэтому данные несовместимы при последующем восстановлении резервной копии журнала bin.

13. Механизм прошивки Binlog

Все бинарные журналы, сгенерированные незафиксированными транзакциями, сначала будут записаны в кэш бинарных журналов. Когда транзакция зафиксирована, данные из кеша записываются в файл журнала binlog. Размер кэша определяется параметромbinlog_chache_sizeконтроль.

Когда бинлог сбрасывается на диск? по параметруsync_binlogконтроль

  • когдаsync_binlogКогда он равен 0, это означает, что MySQL не контролирует обновление binlog, но система определяет, когда записывать на диск. С этой стратегией, как только операционная система выйдет из строя, binlog в кеше будет потерян.
  • sync_binlogКогда это N, бинарный журнал будет записываться на диск каждые N транзакций. .
  • когдаsync_binlogКогда он равен 1, это означает, что binlog записывается на диск при каждом коммите.

Давайте посмотрим на более полную блок-схему:

14. Что такое журнал отмен? Для чего это

  • Журнал отмены называется журналом отката и используется для записи информации перед изменением данных.
  • Это противоположно тому, что записывается в журнал повторов, который записывает информацию после изменения данных. Журнал отмен в основном фиксирует логические изменения данных.Чтобы откатить предыдущую операцию при возникновении ошибки, необходимо записать все предыдущие операции, чтобы откат можно было сделать только при возникновении ошибки.

15. Расскажите о методе записи журнала повторов

Размер журнала повторов фиксирован. Он использует циклическую запись для записи, и когда он достигает конца, он возвращается к началу, чтобы записать журнал по кругу. Как показано ниже (сеть источника изображения):

redo log 循环写入

Буфер журнала повторов (в памяти) состоит из четырех файлов, соединенных встык, это: ib_logfile_1, ib_logfile_2, ib_logfile_3, ib_logfile_4.

  • позиция записи указывает текущую позицию записи записи (позиция логической последовательности страницы данных, записанной на диск)
  • Контрольная точка указывает соответствующую позицию после сброса диска (записи на диск).
  • Часть между записью pos и контрольной точкой используется для записи новых журналов, то есть пространство, оставшееся для новых записей.
  • Между контрольной точкой и записью находится запись, которую нужно сбросить.Если диск не сброшен, он будет перезаписан новой записью.

С журналом повторов, когда база данных отключена и перезапущена, данные, которые не были помещены на диск (данные после контрольной точки), могут быть восстановлены через журнал повторов, чтобы гарантировать, что записи зафиксированных транзакций не будут потеряны. называетсяcrash-safe.

Ссылка и спасибо