mysql-bin 파일을 삭제하는 것이 안전합니까?


92

내가 MySQL의에서 MM 복제를 가지고 있고, 나는 상자에 약간의 여유 공간이 불필요한 파일을 삭제 할 집어 넣은 싶어, 나는이 우연히 mysql-bin내 파일 /var/db/mysql/이 해당 파일의 수백처럼 mysql-bin.000123, mysql-bin.000223등 내가 수행하여 MySQL의 복제를 점검 한 show master status하고 show slave status그들이 특정 위치에서 일부 mysql-bin 파일을 사용하지만 다른 모든 bin 파일은 더 이상 사용되지 않는 남은 것 같습니다 . 이 경우 복제가 현재 가리키는 파일을 제외한 모든 mysql-bin 파일을 삭제하는 것이 안전합니까?

삭제해도 안전한 경우 사용하지 않는 파일 을 자동으로 삭제 하기 위해 수행 할 수있는 작업이 있습니까?

답변:


136

OS에서 삭제하지 마십시오.

mysqld가 당신을 위해 그렇게하도록해야한다. 다음은 mysqld가 관리하는 방법입니다.

이 파일 mysql-bin.[index]은 mysqld가 생성하고 자동 회전 한 모든 이진 로그 목록을 유지합니다. binlog를 정리하는 메커니즘 mysql-bin.[index]은 다음 과 같습니다.

PURGE BINARY LOGS TO 'binlogname';
PURGE BINARY LOGS BEFORE 'datetimestamp';

그러면 방금 지정한 binlog 또는 타임 스탬프 전에 모든 이진 로그가 지워집니다.

예를 들어

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

이 전에 모든 이진 로그가 지워 mysql-bin.000223집니다.

당신이 실행하는 경우

PURGE BINARY LOGS BEFORE DATE(NOW() - INTERVAL 3 DAY) + INTERVAL 0 SECOND;

이렇게하면 3 일 전 자정 전에 모든 이진 로그가 지워집니다.

binlog를 자동으로 회전시키고 3 일 동안 계속 유지하려면 다음을 설정하십시오.

mysql> SET GLOBAL expire_logs_days = 3;

다음에 이것을 추가하십시오 /etc/my.cnf

[mysqld]
expire_logs_days=3

mysqld가 로그를 삭제합니다.

노예 상태 표시 \ G

이것은 중요합니다. 를 실행 SHOW SLAVE STATUS\G하면 마스터에서 두 개의 이진 로그가 표시됩니다.

  • Master_Log_File
  • Relay_Master_Log_File

복제에 지연이 적거나없는 경우 일반적으로 동일한 값입니다. 복제 지연이 많으면이 값이 다릅니다. 간단하게 만들기 위해 무엇이든지 선택 Relay_Master_Log_File하고 마스터로 돌아가서 실행하십시오.

PURGE BINARY LOGS TO 'Whatever Relay_Master_Log_File Is';

이렇게하면 복제가 중단되지 않습니다.


1
대시가 아닌 오타-밑줄을 참고하십시오 : [mysqld] expire_logs_days=3(그리고 [mysqld]섹션을 포함해야합니다
changokun

@changokun 오타가 아닙니다. my.cnf는 대시를 허용합니다. SET GLOBAL expire_logs_days = 3;mysql 클라이언트에서 실행 하면 허용되지 않습니다. MySQL의 문서 도구의 예 : dev.mysql.com/doc/refman/5.5/en/mysqld-option-tables.html
RolandoMySQLDBA

이것은 나를 위해 작동합니다. 질문 사이 ... 차이 무엇 mysql> SET GLOBAL expire_logs_days = 3;expire-logs-days=3에서가 /etc/my.cnf.. 있습니까 그들은 같은? 이 중복입니까? 또는 실행 SET GLOBAL...하고 추가 하는 것이 중요 expire-logs-days=..합니까? 감사.
Nino Paolo

분명히 모든 로그를 신속하게 제거하십시오. PURGE BINARY LOGS BEFORE DATE(NOW());왜 이것에 대한 기본값이 없습니까? 나는 로그 파일 크기를 거대한 양으로 명시 적으로 변경하지 않았습니다. 이 명령을 실행 한 후 mysql.bin 폴더 크기가 1.6GB로 줄어든 10.0GB의 로그 파일이있었습니다.
Michael Trouw 2016 년

20

이것은 실제로 백업 전략에 달려 있습니다. 이진 로그를 유지해야하는 주요 이유 중 하나는 데이터베이스를 '특정 시점'으로 복원하는 것입니다. 데이터베이스가 충돌하여 복원이 필요한 경우 최신 전체 백업을 복원 한 다음 전체 백업 위치에서 시작하여 이진 로그를 재생합니다.

따라서 매일 전체 백업을 수행하고 7 일 분의 이진 로그가있는 경우 지난 4-6 일 분의 이진 로그를 삭제할 수 있습니다. 이 expire_logs_days설정으로 며칠 분의 이진 로그를 유지할지 제어 할 수 있습니다 .

가장 오래된 로그가 무엇인지 먼저 확인하여 필요하지 않은 이진 로그를 삭제할 수 있습니다.

ls -lh /path/to/binary/logs/mysql-bin.0*

그런 다음 mysql에서 :

mysql> PURGE BINARY LOGS TO 'mysql-bin.XXXXX';

4

이 시도:

RESET MASTER;

는 AS 문서는 말했다 :

RESET MASTER를 사용하면 이진 로그 파일 및 관련 이진 로그 인덱스 파일을 삭제하여 마스터를 이진 로깅이 시작되기 전의 상태로 되돌릴 수 있습니다.

이렇게하면 모든 관련 이진 로그 파일이 삭제되므로 원하는 파일이 아닐 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.