MySQL 에서 날짜를 query 하고, 한달이 지난 데이터는 삭제하기!

날짜를 .. Query! 아래는 로그뷰어를 이용한 로그관리의 예시입니다.

Select date_add(date_format( now() , “%Y-%m-%d %k:%i:%s”), interval -30 day) ;

이렇게하면오늘보다 30이전날짜를있다!

select * from SystemEvents where ReceivedAt < date_add(date_format( now() , “%Y-%m-%d %k:%i:%s”), interval -40 day);

## SystemEvents 라는테이블에 ReceivedAt 이라는 column 데이터가현재시각보다 40이전데이터보다작은값만쿼리한다!

꿀팁!!! 이걸 Mysql bash돌리고싶을때는오뜨케하징?????

참고 : -e 옵션을통해서명령어를수행할때는더블쿼테이션 (“) 싱글쿼테이션 (‘) 으로치환하여사용하며, query뒷절의세미클론 (;) 뺍니다.

# mysql -uroot -p암호 Syslog -e “select * from SystemEvents where ReceivedAt < date_add(date_format( now() , ‘%Y-%m-%d %k:%i:%s’), interval -30 day)”

나는이렇게썻다?

Syslog 디비에시스템로그를저장하고, My.cnf 설정에 mysql Query 로그를남기도록설정하고.

log=/var/log/mysql/my.log

아래와같이로그를한달지난로그는 ReceivedAt 테이블의시간을참고하여, 삭제대상이되는컬럼을조회하고파일로남긴뒤

해당컬럼을삭제하고, 그다음 mysql 쿼리로그를메일로발생하여확인하였음.

 

#!/bin/sh

today=`date +%Y%m%d`

/usr/bin/mysql -u아이디 -p비밀번호 Syslog -e “select * from SystemEvents where ReceivedAt < date_add(date_format( now() , ‘%Y-%m-%d %k:%i:%s’), interval -30 day)” >> /tmp/log_data_$today.log

sleep 1;

#mysql log delete

echo “” > /var/log/mysql/my.log

## delete

/usr/bin/mysql -u아이디 -p비밀번호 Syslog -e “delete from SystemEvents where ReceivedAt < date_add(date_format( now() , ‘%Y-%m-%d %k:%i:%s’), interval -30 day)”

cat /var/log/mysql/my.log | mail -s “[SyslogDB] delete $today DATA query result” pajuguy@nate.com

이러면 DB 가 계속 쌓여도, 30일 지나면 삭제되니까 유지관리가 편하다.?

MySQL 의 root 계정을 변경하고 권한을 주는 방법

루트패스워드변경

mysql 서버에 패스워드 없이 로그인 하게되면 서버에 만들어진 데이터베이스나 테이블

기타 이곳에 저장된 자료가 외부인에게 노출될 수 있다. 따라서 이러한 보안을 목적으로

root 패스워드를 지정하면 mysql 서버를 안전하게 보호할 수 있다.

 

mysql> use mysql;

mysql> update user set password=password(‘패쓰워드’) where user=’root’;

Query OK, 2 rows affected (0.03 sec)

Rows matched: 2 Changed: 2 Warnings: 0

mysql> flush privileges; <— 적용

flush privileges; 를 하지 않으면 mysql에서 빠져나와서 root 로그인이 안된다.

확인한다.

mysql> select host, user, password from user;

+—————————————————————-+

| Host user password |

+—————————————————————-+

| localhost root 2e01146f5c065853 |

| localhost.localdomain root 2e01146f5c065853 |

+—————————————————————-+

 

 

 

 

#유저 추가.

INSERT INTO mysql.user (host,user,password) VALUES (‘%’,’root’,password(‘*2E71CAC033CBFF15613A02B9F655E72B4910D937’));

#개별 DB 에 테이블 에 맞게 계정 추가 

mysql> insert into USERTABLE (id,passwd,priviledge,name,email) values (‘SUNGHO’,’c4ca4238a0b923820dcc509a6f75849b’,3,’HongSungho’,’hongsungho@email.com’);

 

# 5.x 버전에서부터추가된보안관련사항,  ssl_cipher 관련입력값이없으면, 유저생성이안된다. 아래처럼해주길; 보안관련필드에빈값 ‘ ‘ 넣어줌.

insert into user (Host, User, Password, ssl_cipher, x509_issuer, x509_subject ) values(‘localhost’,’사용자명’,password(‘비밀번호’),”,”,”);

 

Grant all privileges on *.* to ‘USER’@’LOCALHOST or IP or %’ identified by ‘PASSWORD’ with grant option;

 

 

# 모든 권한 주귀..

GRANT ALL PRIVILEGES ON *.* TO ‘root’@’%’;

 

# 모든 권한을 주는 바른 예

grant all privileges on *.* to ‘root’@’%’ identified by ‘암호’;

 

# HONG DB읽기권한만을가진 sungho 라는 유저를생성하는바른

Grant select on HONG.* to ‘sungho’@’%’ identified by ‘암호’;

# HONG DB에 readerhong 계정으로 10.0.0.10 주소를 갖는 서버만 접속 가능하고, 읽기 권한만 설정하는 예;
Grant select on HONG.* to ‘readerhong’@’10.0.0.10’ identified by ‘암호’;

# 이미 생성되어 있는 sungho 계정의 경우는 % 로 모든곳에서 접근이 가능하다.
# 보안을 위해서 로컬 호스트로만 접근이 가능하도록 설정을 변경하는 방법
update user set host=’localhost’ where host=% and user=’sungho’;

 

 

# 적용

FLUSH PRIVILEGES;

MySQL 테이블 값을 넣고 조회하기.

아래와 같이 이용합니다.

show databases;
# 데이터베이스 조회

use DBNAME;
# 사용 할 DB를 선택

show tables;
# DB 내 테이블 확인

desc TABLENAME;
# 테이블 필드의 타입을 조회합니다.

insert into TABLENAME value (‘123456’);
# 테이블에 123456 이라는 값을 입력한다.

select * from TABLENAME;
# 테이블의 모든 내용을 조회한다.

select * from TABLENAME where 필드명=’검색값’;
# 검색값으로 조회한다.
# 예를 들어 sungho_test 테이블에 name field 가 sungho 인 녀석을 조회하는 경우는
# select * from sungho_test where name=’sungho’; 를 선택하면 된다.
# 이중에서 name 필드가 sungho인 사람들의 name, age, address 값 만을 조회하고 싶다면
# select name, age, address from sungho_test where name=’sungho’; 가 된다. ^^

사용자 삽입 이미지