binlog 삭제
Database 관리/Maria DB# 참조 : https://blog.naver.com/PostView.nhn?isHttpsRedirect=true&blogId=hanajava&logNo=221008795923&categoryNo=46&parentCategoryNo=0&viewDate=¤tPage=1&postListTopCurrentPage=1&from=postView
Maria02 [test]> show binary logs; +------------------+------------+ | Log_name | File_size | +------------------+------------+ | mysql-bin.000035 | 401 | | mysql-bin.000036 | 362 | | mysql-bin.000037 | 1073742328 | | mysql-bin.000038 | 77130306 | +------------------+------------+ 4 rows in set (0.05 sec) Maria02 [test]> purge binary logs to 'mysql-bin.000038'; Query OK, 0 rows affected (0.10 sec) Maria02 [test]> show binary logs; 0 row in set (0.14 sec) Maria02 [test]> |
========================================================================================
DB에 레코드가 많이 쌓여 테이블 파일의 용량이 증가하는 것도 문제지만,
binary log를 초기 세팅대로 방치하면 금방 HDD가 꽉 차게 된다.
# ll -h total 22G drwx------ 2 mysql mysql 4.0K Feb 5 10:37 acclog -rw-r----- 1 mysql mysql 112K Feb 5 19:09 localhost.localdomain.err -rw-rw---- 1 mysql mysql 5 Feb 5 19:09 localhost.localdomain.pid drwx------ 2 mysql mysql 4.0K Feb 5 10:15 mysql -rw-rw---- 1 mysql mysql 1.1G Feb 15 07:13 mysql-bin.000174 -rw-rw---- 1 mysql mysql 1.1G Feb 15 07:24 mysql-bin.000175 -rw-rw---- 1 mysql mysql 1.1G Feb 15 07:36 mysql-bin.000176 -rw-rw---- 1 mysql mysql 1.1G Feb 15 07:47 mysql-bin.000177 -rw-rw---- 1 mysql mysql 1.1G Feb 15 07:59 mysql-bin.000178 -rw-rw---- 1 mysql mysql 1.1G Feb 15 08:16 mysql-bin.000179 -rw-rw---- 1 mysql mysql 1.1G Feb 15 08:31 mysql-bin.000180 -rw-rw---- 1 mysql mysql 1.1G Feb 15 08:42 mysql-bin.000181 -rw-rw---- 1 mysql mysql 1.1G Feb 15 08:54 mysql-bin.000182 -rw-rw---- 1 mysql mysql 1.1G Feb 15 09:05 mysql-bin.000183 -rw-rw---- 1 mysql mysql 1.1G Feb 15 09:17 mysql-bin.000184 -rw-rw---- 1 mysql mysql 1.1G Feb 15 09:29 mysql-bin.000185 -rw-rw---- 1 mysql mysql 1.1G Feb 15 09:40 mysql-bin.000186 -rw-rw---- 1 mysql mysql 1.1G Feb 15 09:52 mysql-bin.000187 -rw-rw---- 1 mysql mysql 1.1G Feb 15 10:04 mysql-bin.000188 -rw-rw---- 1 mysql mysql 334M Feb 15 11:43 mysql-bin.000189 -rw-r----- 1 mysql mysql 418 Feb 15 10:04 mysql-bin.index drwx------ 2 mysql mysql 4.0K Feb 5 10:15 test |
data 디렉토리(configure에 따라 다름) 내의 파일들을 보면 binary log가 많이 생성된 것을 알 수 있다.
파일을 rm 명령어로 직접 지우지 말고 mysql 콘솔에서 지우는 것이 바람직하다.
mysql> show binary logs; +------------------+------------+ | Log_name | File_size | +------------------+------------+ | mysql-bin.000174 | 1073742003 | | mysql-bin.000175 | 1073742050 | | mysql-bin.000176 | 1073741968 | | mysql-bin.000177 | 1073742039 | | mysql-bin.000178 | 1073741908 | | mysql-bin.000179 | 1073742024 | | mysql-bin.000180 | 1073742027 | | mysql-bin.000181 | 1073741959 | | mysql-bin.000182 | 1073741883 | | mysql-bin.000183 | 1073741988 | | mysql-bin.000184 | 1073741999 | | mysql-bin.000185 | 1073741927 | | mysql-bin.000186 | 1073742098 | | mysql-bin.000187 | 1073742018 | | mysql-bin.000188 | 1073742083 | | mysql-bin.000189 | 349569498 | +------------------+------------+ 16 rows in set (0.00 sec) |
mysql 콘솔에서는 위 명령으로 확인 가능.
mysql> purge master logs to 'mysql-bin.000186'; Query OK, 0 rows affected (0.91 sec) mysql> show binary logs; +------------------+------------+ | Log_name | File_size | +------------------+------------+ | mysql-bin.000186 | 1073742098 | | mysql-bin.000187 | 1073742018 | | mysql-bin.000188 | 1073742083 | | mysql-bin.000189 | 349742255 | +------------------+------------+ 4 rows in set (0.00 sec) |
위 명령어에서 binary 로그 이름을 지정하면 해당 파일 이전의 파일들을 모두 삭제한다.
mysql> set global expire_logs_days=2; Query OK, 0 rows affected (0.00 sec) mysql> SHOW VARIABLES LIKE '%expire%'; +------------------+-------+ | Variable_name | Value | +------------------+-------+ | expire_logs_days | 2 | +------------------+-------+ 1 row in set (0.00 sec) |
그리고 binary 로그를 저장할 주기를 설정한다.
시스템 사고가 발생해도 근시일 내에 확인할 수 있거나 특별히 백업해 분석할 것이 아니라면 2일 정도면 충분할 것이다.
출처: http://whiterussian.tistory.com/36 [화이트 러시안]
==================================================================================
MySQL에서 사용하는 log-bin이라는 옵션은 사용된 쿼리들이 로깅되는 파일이며 Innodb 혹은 Replication등에서 사용되곤 합니다.
하지만 이 파일의 문제는 무한정 늘어난다는 것입니다. relay-log-space-limit 같은 옵션이 있지만 이 옵션은 Replication에서 사용되는 relay-log-bin의 용량을 제한 하는 옵션이지 해결책이 되지 못합니다.
하지만 이 파일을 정리하는 방법이 있습니다.
우선 다음의 Query를 사용하는 것입니다.
PURGE MASTER LOGS BEFORE DATE_SUB(CURRENT_DATE, INTERVAL 30 DAY)
INTERVAL에서는 원하시는 로깅 시점을 기록하시면 됩니다. 위의 경우에는 30일 이전의 로깅 정보를 삭제하게 됩니다.
차례차례 해보도록 하겠습니다.
1. 현재의 하드디스크 용량 상태를 확인합니다.
[root@Theeye db]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 18G 1.9G 15G 12% /
/dev/sda3 15G 803M 13G 6% /home
/dev/sda2 97G 78G 15G 85% /usr/local/mysql/db
데이터베이스 공간이 85%나 사용되어 곧 꽉찰지도 모른다는 불안감에 휩싸이게 되었습니다.
2. log-bin 파일을 확인해 봅시다.
[root@Theeye db]# ls mysql-bin.*
mysql-bin.000001 mysql-bin.000002 mysql-bin.000003 ...... mysql-bin.000073
파일이 엄청나게 많이 있습니다.
3. 다음 명령어를 수행합니다.
mysql -e "PURGE MASTER LOGS BEFORE DATE_SUB(CURRENT_DATE, INTERVAL 30 DAY)"
물론 mysql에 접속하셔서 위의 명령어를 입력하셔도 됩니다. Super권한을 가진 root계정으로 실행해 주세요.
4. log-bin 파일이 줄었나 확인해 봅시다.
[root@Theeye db]# ls mysql-bin.*
mysql-bin.000041 mysql-bin.000042 mysql-bin.000043 ...... mysql-bin.000073
41번 이전의 파일들이 모두 삭제 되었습니다. 41번 부터가 최근 30일 이내의 로그정보가 남아있는 모양이군요.
5. 하드디스크 용량 상태를 확인해 봅시다.
[root@Theeye db]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 18G 1.9G 15G 12% /
/dev/sda3 15G 803M 13G 6% /home
/dev/sda2 97G 40G 53G 43% /usr/local/mysql/db
확실히 용량이 많이 확보가 되었군요^^
주기적인 실행이 필요하실 경우에는 위의 명령어를 crontab에 등록하시면 됩니다. 일주일에 한번정도의 실행이 적당하겠네요.
=================================================================
MySQL Binary Log 는 add, delete, insert, update 등의 query 가 저장되어 있는 파일로서
MySQL을 설치하게 되면 기본적으로 MySQL Binary Log 가 생성됩니다.
Binary Log 를 쌓지 않아도 되는 MySQL 구동 환경에서는 Binary Log 를 삭제하므로, 디스크 공간
여유 공간을 확보할 수 있는데, MySQL Binary Log 를 지우는 방법에 대해서 알아보겠습니다.
1. MySQL Replication 환경에서 지우기
- MySQL Replication MASTER 서버
shell> mysql -u root -p
mysql> RESET MASTER;
- MySQL Replication SLAVE 서버
shell> mysql -u root -p
mysql> RESET MASTER;
2. MySQL Binary Log sequence number 또는 특정 일자로 지우기
shell> mysql -u root -p
mysql> PURGE BINARY LOGS TO 'mysql-bin.000015';
shell> mysql -u root -p
mysql> PURGE BINARY LOGS BEFORE '2009-05-01 00:00:00';
3. mysqladmin flush-logs 명령어를 통해서 MySQL Binary Log 지우기
shell> mysqladmin -u root -p flush-logs
4. MySQL Binary Log 생성을 방지하는 방법
/etc/my.cnf 파일에서 아래 라인을 주석 처리
log-bin
5. MySQL Binary Log 를 특정 1주일까지만 생성 및 보관하기
/etc/my.cnf 파일에서 아래 라인을 추가
expire_logs_days = 7
'Database 관리 > Maria DB' 카테고리의 다른 글
Data Directory 변경 (0) | 2023.05.26 |
---|---|
Install mariadb.10.6.tar.gz in ubuntu (0) | 2022.01.18 |
Lock, 락, 해결 (0) | 2021.10.29 |
RDS, export, mysqldump/ import (0) | 2021.10.14 |
[편법] CVS Parsing, 파싱 (0) | 2021.09.23 |