[완료]mysql에 적재된 data를 주기적으로 삭제하는데 어떻게 하면 좋을까요

cbrlizm의 이미지

현재 제가 사용하는 부분은 mysql + snort + base를 통한 IDS입니다.

헌데 이거 적재되는양이 시간당 대략 1만건이 넘더군요 ㅡㅡ;

이를 주기적으로 삭제하려 보았더니 적용테이블은 다음과 같습니다.
(사용 snort 버전은 2.9.2 입니다)

+-------------------+
| Tables_in_snortdb |
+-------------------+
| acid_ag |
| acid_ag_alert |
| acid_event |
| acid_ip_cache |
| base_roles |
| base_users |
| data |
| detail |
| encoding |
| event |
| icmphdr |
| iphdr |
| opt |
| reference |
| reference_system |
| schema |
| sensor |
| sig_class |
| sig_reference |
| signature |
| tcphdr |
| udphdr |
+-------------------+

그리고 날자 기준으로 30일이 지난 데이터는 지우고자 보았더니 시간이 필드지정된 table은 acid_event, event둘뿐이더군요

여기에 각 테이블들은 cid라는 일종의 순서번호로 서로 묶여있습니다.

하지만 event에서 일부 지워도 data table과 같이 실질적으로 데이터 용량을 가장 많이 차지하는곳에 적재된 데이터는 그대로

남아있더군요....

우선은 쿼리문을 crontab에 등록하여 주기적으로 지워주려하는데... 어떻게 하는게 좋을까요?
(즉 event table에서 마지막으로 지워진 data의 cid를 기준으로 data table의 data를 지워줘야 할텐데 그 방법을 모르겠습니다.)

감사합니다.

ElegantCoder의 이미지

저같으면 프로시져를 사용할 것 같습니다.

대략

cid는 auto increment로 생성되는 경우가 많으니.. 가장 큰 cid 이전 것을 지우면 되겠죠?
한달 전 것을 @maxCid라는 변수 안에 저장합니다.

select @maxCid := max(cid) from event where date <= date_sub(curdate(), INTERVAL 1 MONTH);

그리고 나서는 테이블마다 돌아다니면서
delete from data where cid < @maxCid

이런식으로 지워주면 어떨까 싶어요.

cbrlizm의 이미지

말씀하신 방법으로 하면 되긴 합니다만 mysql에 접속한 상태에서만 가능하더군요

제가 시도한 쿼리문은 다음과 같습니다.

mysql -u사용자명 -p패스워드 DB명 -e "select @maxCid := max(cid) from 테이블명 where 칼럼명 <= date_sub(curdate(), INTERVAL 1 MONTH);"
mysql -u사용자명 -p패스워드 DB명 -e "delete from data where cid < @maxCid"

mysql -usnort -psnort123 snortdb -e "select @maxCid := max(cid) from event where timestamp <= date_sub(curdate(), INTERVAL 1 MONTH);"
mysql -usnort -psnort123 snortdb -e "delete from data where cid < @maxCid"

실행시 오류는 나타나지 않지만 select를 통해 조회해 봤더니 데이터가 지워지지않고 그대로 남아있더군요. 즉
제대로 실행이 되지 않았단건데...

스크립트문을 작성후 cron에 등록하여 주기적으로 하고픈데 적합한 방법은 없을까요?

감사합니다

budle77의 이미지

MySQL에도 job scheduler가 있는걸로 알고있습니다.
프로시져를 만든뒤에 job scheduler에서 주기적으로 실행해주게 만들어놓으면 되지 않을까요?
제가 아는 DBMS(Oracle, SQL Server, Tibero 등)에서 지원하는 기능입니다.

ElegantCoder의 이미지

변수는 다시 접속하면 사라지기 때문에 생긴 문제일 거에요.

제가 답글 단 대로 sql 파일을 전체로 한개 만드신 다음에
mysql -u사용자명 -p패스워드 DB명 < sqlfile.sql
하시면 아마 한번에 처리가 될 겁니다.

cbrlizm의 이미지

말씀하신대로 sql 파일을 생성하여 실행하였더니 정상적인 삭제가 이뤄지는것을 확인하였습니다.

한번에 테이블명별로 라인을 추가하여 실행하면 될 듯 싶습니다. 감사합니다. ^^

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.