Удаление журналов бина в среде репликации

13

У меня есть вопрос об удалении двоичных журналов в среде репликации:

У нас есть среда с 1 ведущим и 2 ведомыми (работает mysql 5.5). Иногда мы сталкиваемся с проблемами пространства во время тяжелых процессов обработки, из-за чего каталог журнала bin заполняется. Срок действия журналов истекает каждые 3 дня. Мне было интересно, есть ли причина, по которой журналы должны храниться в течение 3 дней на всех коробках - ведущем и обоих ведомых? Имеет ли смысл, например, вести журналы в течение 3 дней на ведущем устройстве, но в течение 1 дня на ведомых устройствах? Каков наилучший способ сделать это?

Спасибо!

Анна
источник
Добро пожаловать в DBA.SE. Этот вопрос заслуживает +1, потому что рост двоичного журнала и релейного журнала часто считается само собой разумеющимся и может стать источником многих проблем, если его не остановить.
RolandoMySQLDBA

Ответы:

12

SLAVE

Если ваши подчиненные не являются хозяевами, тогда подчиненные не нуждаются в бинарной регистрации. Вы можете ограничить количество места в журнале ретрансляции, накопленное ведомым устройством. Для дросселирования журналов реле на 4G, добавьте relay_log_space_limit/etc/my/.cnf на каждом подчиненном устройстве.

[mysqld]
relay_log_space_limit=4G

и перезапустите MySQL

Если вы не можете установить это, по крайней мере, у вас должно быть какое-то предупреждение, которое делает SHOW SLAVE STATUS\Gи проверяет значение Relay_Log_Space(общее количество байтов, использованных релейными журналами).

МАСТЕР

Что касается Мастера, вы можете установить expire_logs_daysна 1, но у меня есть серьезное предупреждение для вас ...

Если репликация обрывается, у вас есть 1 день, чтобы это исправить. В противном случае двоичный журнал на ведущем устройстве может сместиться, и вы не сможете выполнить какую-либо команду CHANGE MASTER TO для выравнивания репликации. Я бы оставил expire_logs_daysв 3 на Мастере.

ПРЕДЛОЖЕНИЕ № 1

Если у вас есть какая-то массовая обработка в течение ночи, возможно, следует запустить массовые процессы на Master с SET SQL_LOG_BIN=0;началом сеанса. Это, конечно, не будет повторять раб. Вы можете выполнить одинаковую массовую загрузку параллельно обоим ведомым.

ПРЕДЛОЖЕНИЕ № 2

Еще одна вещь, которую вы можете сделать, чтобы управлять накоплением Master двоичных журналов, это.

Беги SHOW SLAVE STATUS\Gна обоих Рабов. Посмотрите Relay_Master_Log_File. Это представляет двоичный журнал на ведущем устройстве, последняя команда которого была выполнена на ведомом устройстве.

*************************** 1. row ***************************
             Slave_IO_State: Waiting for master to send event
                Master_Host: 10.4.92.250
                Master_User: replicant
                Master_Port: 3306
              Connect_Retry: 60
            Master_Log_File: mysql-bin.009677
        Read_Master_Log_Pos: 855227755
             Relay_Log_File: relay-bin.000674
              Relay_Log_Pos: 757296783
      Relay_Master_Log_File: mysql-bin.009590
           Slave_IO_Running: Yes
          Slave_SQL_Running: Yes
            Replicate_Do_DB:
        Replicate_Ignore_DB:
         Replicate_Do_Table:
     Replicate_Ignore_Table:
    Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
                 Last_Errno: 0
                 Last_Error:
               Skip_Counter: 0
        Exec_Master_Log_Pos: 757296646
            Relay_Log_Space: 94274010765
            Until_Condition: None
             Until_Log_File:
              Until_Log_Pos: 0
         Master_SSL_Allowed: No
         Master_SSL_CA_File:
         Master_SSL_CA_Path:
            Master_SSL_Cert:
          Master_SSL_Cipher:
             Master_SSL_Key:
      Seconds_Behind_Master: 80561
1 row in set (0.00 sec)

В этом примере Relay_Master_Log_File - это mysql-bin.009590. Все двоичные журналы до этого могут быть удалены из Master. Вы можете запустить это на Мастере:

PURGE BINARY LOGS TO 'mysql-bin.009590';

Это сотрет старые журналы и все равно оставит реплику в такте.

ПРЕДОСТЕРЕЖЕНИЕ

Двоичные журналы - это файлы, которые последовательно компилируют (например, очередь FIFO) все завершенные транзакции SQL в виде оператора SQL или изменения строки. Релейный журнал - это файл, который собирает двоичные записи журнала с удаленного сервера (известного как Master).

В MySQL Replication

  1. Мастер должен иметь свои двоичные журналы включены
  2. Ведомый компилирует релейные журналы
  3. Когда весь SQL в релейном журнале обработан, он удаляется
  4. На ведомом устройстве, когда на сервере БД имеется несколько журналов ретрансляции, это может указывать на то, что репликация отстает, поскольку поток ввода-вывода собирает SQL от мастера быстрее, чем поток SQL может обрабатывать журналы ретрансляции.
  5. Использование relay_log_space_limit предотвращает накопление репликации и потенциальное заполнение диска. Журналы ретрансляции вращаются на основе правила № 3
  6. Сервер БД может быть как ведущим, так и ведомым. Это единственное обстоятельство, при котором у ведомого устройства должны быть включены двоичные журналы. В этом случае сервер БД будет иметь как двоичные журналы, так и журналы ретрансляции.

Если вы переключаетесь на Раба, и вы хотите сделать его Мастером

  • служба MySQL остановка
  • Добавьте log-bin=mysql-binв /etc/my.cnf на Рабе
  • служба mysql start

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

ОБНОВЛЕНИЕ 2012-08-13 17:47 ПО ВОСТОЧНОМУ ВРЕМЕНИ

Согласно документации MySQL по relay-logопции , вы должны определить ее. Вот почему:

Из-за способа, которым MySQL анализирует опции сервера, если вы укажете эту опцию, вы должны указать значение; базовое имя по умолчанию используется только в том случае, если эта опция фактически не указана. Если вы используете опцию --relay-log без указания значения, это может привести к непредвиденному поведению; это поведение зависит от других используемых опций, порядка, в котором они указаны, и от того, указаны ли они в командной строке или в файле опций. Для получения дополнительной информации о том, как MySQL обрабатывает параметры сервера, см. Раздел 4.2.3, «Задание параметров программы».

RolandoMySQLDBA
источник
Комментарии не для расширенного обсуждения; этот разговор был перенесен в чат .
Пол Уайт 9