
그래서... 어제 제가 운영하는 서비스 중 하나에 대해 시작된 캠페인에 대한 "사후 이메일"을 받았습니다. 이제 DB 서버는 복제를 위한 바이너리 로깅에서 약 300MB/분의 속도로 조정되고 있습니다. 상상할 수 있듯이 이것은 상당히 엄청난 속도로 공간을 씹어먹고 있습니다.
바이너리 로그의 일반적인 7일 만료는 문제가 되지 않습니다. 나는 4시간 동안 마지막 로그만 잘라내는 방법을 사용했습니다(복제가 최신 상태인지 확인 중입니다 mk-heartbeat
).
PURGE MASTER LOGS BEFORE DATE_SUB( NOW(), INTERVAL 4 HOUR);
저는 폭풍우를 극복하기 위해 몇 시간마다 cron에서 이를 실행하고 있지만 expire_logs_days
. 1보다 작은 값을 본 적이 없지만 이것이 불가능하다는 의미는 아닙니다.http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html#sysvar_expire_logs_days유형을 숫자로 제공하지만 정수가 필요한지 여부는 나타내지 않습니다.
답변1
실제로 흉내낼 수 있는 방법이 있습니다.
바이너리 로그를 1시간으로 삭제하는 단계는 다음과 같습니다.
01단계) 타임스탬프가 1시간보다 오래된 모든 바이너리 로그를 삭제하는 SQL 스크립트를 생성합니다.
echo "FLUSH LOGS;" > /usr/bin/purge.sql
echo "PURGE BINARY LOGS BEFORE NOW() - INTERVAL 1 HOUR;" >> /usr/bin/purge.sql
/usr/bin/purge.sh
STEP 02) 호출할 쉘 스크립트( )를 작성합니다 mysql
.purge.sql
mysql -uroot -p... < /usr/bin/purge.sql
STEP 03) /usr/bin/purge.sh
실행 가능 하게 만들기
chmod +x /usr/bin/purge.sh
STEP 04) usr/bin/purge.sh
매시간 시작하려면 crontab에 추가하세요.
0 * * * * /usr/bin/purge.sh
시도 해봐 !!!
답변2
실험은 저녁의 순서였습니다 ...
mysql> @@global.expire_logs_days=0.75를 설정; 오류 1232(42000): 'expire_logs_days' 변수에 대한 인수 유형이 잘못되었습니다. mysql> @@global.expire_logs_days=.75를 설정; 오류 1232(42000): 'expire_logs_days' 변수에 대한 인수 유형이 잘못되었습니다. mysql> @@global.expire_logs_days=3.4를 설정; 오류 1232(42000): 'expire_logs_days' 변수에 대한 인수 유형이 잘못되었습니다. mysql> @@global.expire_logs_days=3/4 설정; 오류 1232(42000): 'expire_logs_days' 변수에 대한 인수 유형이 잘못되었습니다. mysql> @@global.expire_logs_days=F를 설정; 오류 1232(42000): 'expire_logs_days' 변수에 대한 인수 유형이 잘못되었습니다. mysql> @@global.expire_logs_days=0xF를 설정; 오류 1232(42000): 'expire_logs_days' 변수에 대한 인수 유형이 잘못되었습니다. mysql> @@global.expire_logs_days=1로 설정; 쿼리 확인, 0개 행이 영향을 받음(0.00초)
답변3
해당 페이지에는 범위가 0-99라고 나와 있습니다. 예, 정수입니다.
0 = 만료되지 않음..
0.5가 무엇을 할지 궁금합니다. .5 부분을 무시하고 만료시키지 않을 것이라고 생각합니다..
답변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)
..
SET PERSIST binlog_expire_logs_seconds = 86400;
이 my.cnf 파일을 추가했습니다.
[mysqld]
binlog_expire_logs_seconds = 86400
expire_logs_days = 1