Рейтинг:0

Почему бинлоги включены по умолчанию в MySQL 8 и будут ли они удалены автоматически?

флаг in

Недавно мы обнаружили, что в конфигурациях MySQL 8 по умолчанию бинлог.* файлы засоряются в /var/lib/mysql на машинах Ubuntu 20.04.

у нас есть размер базы данных 4,2 ГБ и около 500 МБ бинарных журналов в день.

Из-за этого у нас заканчивается место на диске.

Конечно, мы можем отключить и удалить бинарные журналы, но нам интересно, в чем причина этой конфигурации по умолчанию и будут ли они все удалены (и нам просто нужно немного увеличить хранилище на наших машинах).

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

флаг ua
Принадлежит dba.stackexchange.com
Рейтинг:1
флаг ua

Настроить binlog_expire_logs_seconds. 86400 сказал бы очищать журналы каждый день. Мне нравится продлевать его до недели или двух.

При этом проверьте max_binlog_size. Если вы хотите, чтобы бинарные журналы очищались ежедневно, и вы генерируете 5 МБ в день, я предлагаю установить это значение на 100 МБ.

Очистка через день и 100 МБ сохранит использование диска между 500 и 600 МБ (или, может быть, это 500 МБ и 1100 МБ, я не знаю точного алгоритма).

500м в день кажется много. Вы часто обновляете каждую строку в большой таблице? Или что-то другое?

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

  • Репликация (для этого нужен бинлог). «Срок действия» мог быть установлен по умолчанию.
  • Хотите «моментальное восстановление». Опять же нужен бинлог, а что такое хороший дефолт?
  • Бинлог не нужен.
  • Другие?
флаг in
Таким образом, в настройках Ubuntu по умолчанию бинарные журналы будут храниться вечно?
флаг ua
@ Алекс - я так думаю, но у меня нет никаких доказательств, подтверждающих это. Облачные сервисы, скорее всего, добавят такую ​​настройку.
Рейтинг:1
флаг cn

вступление

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

Кодовая база размещена на https://github.com/mysql/mysql-сервер Фактический файл, в котором двоичное ведение журнала включено по умолчанию, sql/sys_vars.cc

Копаясь в обвинениях, в конце концов я нашел коммит, который изменил значение по умолчанию: https://github.com/mysql/mysql-сервер/коммит/9fa9504e5aaf68661aef2d735cecbd3c58eb7790

В нем упоминается элемент рабочего журнала для команды mysql: # 10470. Вы можете посмотреть их здесь: https://dev.mysql.com/worklog/

Раздел обоснования этого элемента Worklog предлагает следующее:

Обоснование

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

Учитывая это, мы должны включить его по умолчанию по следующим причинам:

  1. Мы исключаем один шаг настройки для пользователей. 1А. Включение его позже требует перезапуска mysqld.
  2. Мы получаем более производственное внутреннее тестирование сервера.
  3. Мы можем лучше знать и учитывать влияние двоичного журнала на производительность.

Срок действия

В mysql 8.0 истечение срока действия по умолчанию для файлов журнала 30 дней, управляемый переменной binlog_expire_logs_seconds, который по умолчанию равен 2592000 секунд. Чтобы очистка действительно произошла, должна быть выполнена очистка журналов. Согласно документации, сброс журнала происходит автоматически, когда один двоичный файл журнала закрывается и запускается новый. Максимальный размер отдельных файлов может регулироваться max_binlog_size который составляет максимум 1 ГБ. Однако есть оговорка, что транзакции не разделяются по файлам журналов, и теоретически они могут иметь размер до 4 ГБ. Вы также можете оформить сбросить журналы или очистить бинарные журналы выписка ежедневно самостоятельно.

флаг in
Поэтому я думаю, что лучшей стратегией будет «сбрасывать журналы» после любого успешного резервного копирования на основе mysqldump, которое мы в любом случае делаем регулярно.Или бинлоги хоть как-то (частично) могут заменить бэкап на основе mysqldump? (вероятно, я должен задать новый вопрос по этому поводу?)
Gerrit avatar
флаг cn
Просто --flush-logs внутри командной строки mysqldump имеет недостаток, заключающийся в выполнении этой очистки для каждой базы данных в дампе. Тогда вам действительно следует использовать его вместе с параметрами --master-data и --single-transaction, которые также дадут вам возможность использовать двоичные журналы для восстановления на определенный момент времени вместе с последней полной резервной копией. Но это определенно стоит нового вопроса.

Ответить или комментировать

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