Видалення бінних журналів у середовищі реплікації


13

У мене є питання щодо видалення бінарних журналів у середовищі реплікації:

У нас є середовище з 1 господарем і 2 рабами (працює з mysql 5.5). Іноді ми стикаємося з питаннями пробілу під час важких часів обробки, внаслідок чого каталог журналу бін стає повним. Термін дії журналу закінчується кожні 3 дні. Мені було цікаво, чи є причина, чому журнали потрібно три дні тримати на всіх ящиках - хазяїна та обох рабів? Чи було б сенсом, наприклад, тримати журнали 3 дні на хазяїні, а 1 день на рабах? Який найкращий шлях для цього?

Дякую!


Ласкаво просимо до DBA.SE. Це питання заслуговує +1, оскільки зростання бінарного журналу та ретрансляційного журналу часто сприймається як належне і може стати джерелом багатьох проблем, якщо його не встановити.
RolandoMySQLDBA

Відповіді:


12

РОЗСЛІВАТИ

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

[mysqld]
relay_log_space_limit=4G

і перезапустити mysql

Якщо ви не можете встановити це, принаймні у вас повинно бути якесь попередження, яке робить SHOW SLAVE STATUS\Gі перевіряє значення Relay_Log_Space(загальний байт, споживаний журналами ретрансляції).

МАЙСТЕР

Що стосується Майстра, ви можете встановити expire_logs_daysзначення 1, але для мене є суворе попередження ...

Якщо реплікація перервана, у вас є 1 день, щоб виправити це. В іншому випадку бінарний журнал Master може обертатися і ви не можете виконати жодну команду CHANGE MASTER TO, щоб перевстановити реплікацію. Я б пішов expire_logs_daysо 3 на Майстра.

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

Якщо у вас є якась об'ємна обробка за ніч, можливо, слід запустити масові процеси на Майстрі з SET SQL_LOG_BIN=0;на початку сесії. Це, звичайно, не буде повторюватися на Раба. Ви можете виконати однакове насипне навантаження паралельно обом рабами.

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

Ще одна річ, яку ви могли зробити для управління накопиченням бінарних журналів - це це.

Бігайте 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

  1. Мастер повинен увімкнути свої двійкові журнали
  2. Раб компілює ретрансляційні журнали
  3. Коли весь SQL в журналі ретрансляції обробляється, він видаляється
  4. На підлеглому, коли на сервері БД є більше одного журналу ретрансляції, це може означати, що реплікація відстає, оскільки потік IO збирає SQL від Master швидше, щоб потік SQL міг обробляти журнали ретрансляції.
  5. Використання relay_log_space_limit запобігає згубленню реплікації та потенційному заповненню диска. Журнали ретрансляції обертаються на основі правила №3
  6. Можливо, для сервера БД можуть бути як Master, так і Slave. Це єдина обставина, за якої Раб повинен увімкнути бінарні журнали. У цьому сценарії на сервері БД будуть як бінарні, так і журнали ретрансляцій.

Якщо ви перебуваєте в невідомості для раба, і хочете зробити його господарем

  • сервіс mysql зупинка
  • Додати log-bin=mysql-binв /etc/my.cnf на підлеглому
  • служба запуску mysql

Вам доведеться налаштувати реплікацію інших Невільників на щойно просунутого Мастера та переконатися, що дані на Рабі збігаються з щойно просунутим Мастером

ОНОВЛЕННЯ 2012-08-13 17:47 EDT

Відповідно до опції Документація MySQLrelay-log , ви повинні визначити її. Ось чому:

У зв'язку з тим, як MySQL аналізує параметри сервера, якщо ви вказуєте цей параметр, ви повинні надати значення; базове ім'я за замовчуванням використовується лише в тому випадку, якщо параметр фактично не вказаний. Якщо ви використовуєте параметр --relay-log, не вказуючи значення, можлива несподівана поведінка; ця поведінка залежить від інших використовуваних параметрів, порядку, у якому вони вказані, та того, чи вказані вони в командному рядку чи у файлі опцій. Для отримання додаткової інформації про те, як MySQL обробляє параметри сервера, див розділ 4.2.3, "Вказівки параметрів програми".


Коментарі не для розширеного обговорення; ця розмова була переміщена до чату .
Пол Білий 9
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.