복제 환경에서 빈 로그 삭제


13

복제 환경에서 이진 로그를 삭제하는 방법에 대한 질문이 있습니다.

우리는 1 개의 마스터와 2 개의 슬레이브가있는 환경이 있습니다 (mysql 5.5 실행). 때때로 처리량이 많은 시간 동안 빈 문제가 발생하여 bin 로그 디렉토리가 가득 찰 수 있습니다. 로그는 3 일마다 만료됩니다. 궁금합니다. 마스터와 두 슬레이브 모두 모든 상자에 3 일 동안 로그를 보관해야하는 이유가 있습니까? 예를 들어, 마스터에 3 일 동안, 노예에 1 일 동안 로그를 보관하는 것이 합리적입니까? 가장 좋은 방법은 무엇입니까?

감사합니다!


DBA.SE에 오신 것을 환영합니다. 이 질문은 +1이 필요합니다. 이진 로그 및 릴레이 로그 증가는 종종 당연한 것으로 간주되며 선택하지 않은 경우 많은 문제의 원인이 될 수 있습니다.
RolandoMySQLDBA

답변:


12

노예

슬레이브가 마스터가 아닌 경우, 슬레이브는 이진 로깅이 전혀 필요하지 않습니다. 슬레이브에 의해 누적 된 릴레이 로그 공간의 양을 제한 할 수 있습니다. 4G에서 릴레이 로그를 조절하려면 relay_log_space_limit모든 슬레이브에서 /etc/my/.cnf에 추가하십시오.

[mysqld]
relay_log_space_limit=4G

mysql을 다시 시작하십시오.

이 값을 설정할 수없는 경우, 최소한 (릴레이 로그에서 소비 한 총 바이트 수) SHOW SLAVE STATUS\G값을 확인하는 경고가 있어야합니다 Relay_Log_Space.

석사

스승에 관해서는 expire_logs_days1로 설정할 수 는 있지만 심각한 경고가 있습니다 ...

복제가 중단되면 하루를 고쳐야합니다. 그렇지 않으면 마스터의 이진 로그가 회전하고 CHANGE MASTER TO 명령을 실행하여 복제를 다시 정렬 할 수 없습니다. 나는 expire_logs_days3시에 스승님께 떠날 것 입니다.

제안 # 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입니다. 이 로그 이전의 모든 이진 로그는 마스터에서 제거 할 수 있습니다. 이것을 마스터에서 실행할 수 있습니다.

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

이렇게하면 오래된 로그가 지워지고 복제는 그대로 유지됩니다.

경고

이진 로그는 완료된 모든 SQL 트랜잭션을 SQL 문 또는 행 변경으로 FIFO 대기열과 같이 직렬로 컴파일하는 파일입니다. 릴레이 로그는 원격 서버 (일명 마스터)에서 이진 로그 항목을 수집하는 파일입니다.

MySQL 복제에서

  1. 마스터는 이진 로그를 활성화해야합니다
  2. 슬레이브는 릴레이 로그를 컴파일
  3. 릴레이 로그의 모든 SQL이 처리되면 삭제됩니다.
  4. 슬레이브에서 DB 서버에 둘 이상의 릴레이 로그가있는 경우 IO 스레드가 마스터에서 SQL을 수집하여 SQL 스레드가 릴레이 로그를 처리 할 수 ​​있기 때문에 복제가 뒤 떨어지고 있음을 나타낼 수 있습니다.
  5. relay_log_space_limit를 사용 하면 복제가 쌓여 디스크가 가득 차게 되는 것을 방지 할 수 있습니다. 규칙 # 3에 따라 릴레이 로그가 회전합니다
  6. DB 서버가 마스터 및 슬레이브 일 수 있습니다. 이것이 슬레이브가 바이너리 로그를 활성화해야하는 유일한 상황입니다. 이 시나리오에서 DB 서버에는 이진 로그와 릴레이 로그가 모두 있습니다.

슬레이브로 페일 오버하고 마스터로 만들려는 경우

  • 서비스 mysql 중지
  • log-bin=mysql-bin슬레이브의 /etc/my.cnf에 추가
  • 서비스 MySQL 시작

다른 슬레이브의 복제를 새로 승격 된 마스터에 설정하고 슬레이브의 데이터가 새로 승격 된 마스터와 일치하는지 확인해야합니다.

업데이트 2012-08-13 17:47 EDT

MySQL Documentation on relay-logoption 에 따르면이를 정의해야합니다. 이유는 다음과 같습니다.

MySQL이 서버 옵션을 구문 분석하는 방식으로 인해이 옵션을 지정하면 값을 제공해야합니다. 기본 이름은 옵션이 실제로 지정되지 않은 경우에만 사용됩니다. 값을 지정하지 않고 --relay-log 옵션을 사용하면 예기치 않은 동작이 발생할 수 있습니다. 이 동작은 사용 된 다른 옵션, 지정된 순서 및 명령 줄 또는 옵션 파일에 지정되어 있는지에 따라 다릅니다. MySQL이 서버 옵션을 처리하는 방법에 대한 자세한 내용은 4.2.3 절“프로그램 옵션 지정”을 참조하십시오.


의견은 긴 토론을위한 것이 아닙니다. 이 대화는 채팅 으로 이동 되었습니다 .
Paul White 9
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.