StoryCode

binlog 삭제

Database 관리/Maria DB
반응형

# 참조 : https://blog.naver.com/PostView.nhn?isHttpsRedirect=true&blogId=hanajava&logNo=221008795923&categoryNo=46&parentCategoryNo=0&viewDate=&currentPage=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