Подтвердить что ты не робот

Expire_logs_days игнорируется в my.cnf

У меня есть пара баз данных MySQL, которые настроены для репликации Master Slave. Раб прекрасно работает.

Мастер, с другой стороны, хранит двоичные журналы, несмотря на мои лучшие (автоматизированные) усилия.

Я пытаюсь настроить переменную 'expire_logs_days' в файле my.cnf MySQL, но по какой-то причине она, кажется, игнорируется. Мой файл my.cnf выглядит примерно так:

[mysqld]
...
log-bin=/var/log/mysql/mysql-bin.log
server-id=1
expire_logs_days=3
log_bin_trust_function_creators=TRUE
sync_binlog=1

[mysqld_safe]
...

Но когда я запускаю SHOW VARIABLES WHERE Variable_Name='expire_logs_days' в MySQL, он возвращает мне значение 0

Я пробовал:

  • Перезапуск MySQL
  • Используя эту строку: expire_logs_days='3'
  • Проверено для других файлов my.cnf:
    • mysqld --help --verbose | grep cnf
    • Найдено строку: /etc/mysql/my.cnf /etc/my.cnf ~/.my.cnf order of preference
    • Мой my.cnf файл находится в /etc/my.cnf
    • В других местах нет файлов, называемых my.cnf.
  • SET GLOBAL expire_logs_days=3 Работает в MySQL, но на самом деле не решает мою проблему как таковую

И это обо всем, что я мог подумать. Я запустил ручную команду PURGE, которая работает очень хорошо, но я бы предпочел (хотя, если ее нет, я все равно сделаю это), чтобы не запускать команду PURGE с помощью cron.

У кого-нибудь есть идеи? Я только что нажал.

Спасибо.

4b9b3361

Ответ 1

Факты из вашего вопроса

  • Двоичные журналы не могут вращаться
  • Вы сказали, что можете запустить PURGE BINARY LOGS

Вот моя рабочая теория

Поскольку вы можете стереть двоичные журналы с помощью PURGE BINARY LOGS;, у меня есть два места, чтобы вы могли посмотреть, что вы не упомянули

МЕСТО # 1: mysql-bin.index

Этот файл содержит расположение всех двоичных журналов. Когда установлено значение expire_logs_days, mysqld откроет этот текстовый файл, проверьте штампы datetime в каждом файле, пока он не встретит двоичные журналы с временной меткой меньше NOW() - INTERVAL expire_logs_days DAY).

Ожидается, что бинарные журналы в mysql-bin.index будут численно последовательными. Если двоичные журналы не являются численно последовательными, вращение журнала отключено.

МЕСТО # 2: /var/log/mysql папка

В соответствии с вашим my.cnf, эта папка содержит все двоичные журналы.

Вот 2 вопроса:

  • Существуют ли бинарные журналы в /var/log/mysql, которые не являются численно последовательными?
  • Существуют ли бинарные журналы в /var/log/mysql, которые НЕ IN mysql-bin.index?

Почему возникли эти ситуации?

Иногда люди удаляют двоичные журналы в ОС. Это может отбросить mysqld, поскольку mysqld использует mysql-bin.index для внутреннего отслеживания существования двоичных журналов. Простое удаление двоичных журналов с rm -f логическим нарушением механизма вращения журнала, поскольку mysqld знает его.

РЕКОМЕНДАЦИЯ

Если любой из этих двух или обоих вариантов, вы можете очистить его следующим образом:

mysql -ANe"RESET MASTER"
service mysql stop
cd /var/log/mysql
rm -f mysql-bin.*
cd
service mysql start

После этого у вас должна быть маркировка новой бинарной записи журнала.

Дайте ему попробовать!!!

Ответ 2

Я не уверен, что происходит с вашим my.cnf, но w/re для большей проблемы. Похоже, у вас есть несколько вариантов:

  • запустите mysqldump и укажите, что вы хотите, чтобы файлы были сброшены/очищены
  • запустите 'purge' (как вы были)
  • установите max_binlog_size. Согласно документам:

Возможные удаления происходят при запуске и при бинарном журнале.

и

Кроме того, двоичный журнал очищается, когда его размер достигает значения системной переменной max_binlog_size.

Похоже, что # 3 будет делать expire_logs_days, когда он выполняет очистку/очистку.

Ответ 3

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

Если никакого эффекта, найдите нужный файл, запустив:

ps aux | grep mysqld

И посмотрите на значения --defaults-file или -defaults-extra-file

И если вы все еще в тупике, убедитесь, что в нем нет файла -init-file, устанавливающего значение 0.

Ответ 4

Mysql (сообщество) Версия 8.0.17-1.sles12 - OpenSUSE перекидной 2019.10.02

mysql> SET GLOBAL expire_logs_days = 4;
ERROR 3683 (HY000): The option expire_logs_days and binlog_expire_logs_seconds
cannot be used together. Please use binlog_expire_logs_seconds to set the expire
time (expire_logs_days is deprecated)

..