mysql에 접속하여 방향키를 위로 올리면 그전에 입력했던 명령어를 확인할수 있습니다. 그러나 이렇게 하나하나씩 말고 로그형식으로 저장돼있는 파일을 확인하는 방법을 알아보겠습니다.
쿼리 로그를 파일로 남기는 방법
1.
먼저 mysql에 접속을 합니다.
mysql -u root -p
"패스워드"
현재 로그 활성화 상태를 확인 하겠습니다.
show variables where Variable_name in ('version', 'log', 'general_log');
off로 돼 있습니다.
on으로 바꿔주고 다시 확인해보겠습니다.
set global general_log = 1;
show variables where Variable_name in ('version', 'log', 'general_log');
on으로 바꼈습니다.
로그 파일을 확인해보겠습니다.
로그 파일의 위치는 코리아 IDC 기준 /free/mysql_data 입니다.(mysql db 디렉토리)
localhost.log 란 이름으로 저장이 됩니다.
이제 새로운 세션으로 접속하고 테스트 쿼리를 날려 확인해보겠습니다.
위에 있는 세션으로 show processlist; 란 쿼리를 입력하였고
아래 세션이 새로 접속하여 /free/mysql_data디렉토리에 위치해 있는 localhost.log 란 파일을 확인중입니다.
확인 결과 날짜와 시간과 함께 입력한 쿼리문이 보입니다.
이방법은 mysql server를 재시작하지 않아도 바로 적용이 됩니다. 하지만 mysql server를 재시작 한다면 옵션이 풀리기때문에 이 방법을 사용하려한다면 set global general_log = 1; 옵션으로 다시 로그를 활성화 시켜야 합니다.
2.
첫번째 방법과 동일하게 로그를 활성화 시키는 방법입니다. 첫번째 방법과 다른점은
my.cnf를 수정하는 방법으로 첫번째 방법과 반대로 mysqlserver를 재시작 해줘야 적용이 되고 재시작을 해줘도 계속 적용 됩니다.
my.cnf를 vi로 열어줍니다.
vi /etc/my.cnf
mysqld를 찾아 밑에 log = /free/mysql_data(mysqldb디렉토리)/logname.log 를 입력합니다.
저장하고 나온뒤 mysql.server를 재시작합니다.
재시작한뒤 로그를 확인해봅니다.
위에 두 방법은 정상적인 쿼리만 쌓이기 때문에 test; sdlfsdkl; 등의 인식되지 않는 명령어는 로그에 남지 않습니다.
또한 일반 웹사이트에서의 모든 쿼리또한 전부저장됩니다. 위에 보시는 것처럼 11시08분 30초에만 약 15~20개의 쿼리가 입력됩니다.
그렇기 때문에 이 방법을 쓴다면 해당 로그파일의 용량이 금방 늘어납니다.
(첫번째 방법을 실행한 서버는 mysql만 설치되어있는 테스트서버이고 두번째 방법을 실행한 서버는 실제 구동중인 서버입니다. 그래서 첫번째 결과에 쿼리가 많이 안찍혀있습니다.)
마지막 세번째 방법 입니다.
이 방법은 일반 리눅스 시스템에서 명령어를 남기는 history와 같습니다. 위치는 홈디렉토리이고 파일명은 .mysql_history입니다.
cd ~
ls -al
일반 history인 .bash_history가 보이고 mysql history 파일인 .mysql_history 파일이 보입니다.
파일명 앞에 . 이 붙게 된다면 그 파일은 숨김파일이 됩니다. ls -al 을 하여 확인 가능 합니다.
.mysql_history 파일을 확인해보겠습니다.
위에 보시면 아시겠지만 맨처음 지정한 루트 패스워드가 나옵니다. 패스워드가 여과없이 전부 출력 됩니다.그렇기 때문에 보안상 매우 취약합니다.
그렇다면 mysql_histroy를 남지 않게끔 하는 방법을 알아보겠습니다.
1.
우선 생성되어있는 .mysql_history 파일을 삭제합니다.
그다음 mysql_history 파일을 /dev/bull으로 심볼릭 링크를 겁니다.
ln -s /dev/null /홈디렉토리(root계정은 root 또는 ~ )/.mysql_history
이방법은 루트 계정만 돌아가는 서버면 상관 없겠지만 일반 계정이 많은 서버에서는 추천하지 않습니다.
이유는 일반계정마다 하나하나씩 해줘야하고 해준다 해도 나중에 일반계정을 추가하면 또 심볼릭 링크를 따로 걸어줘야합니다.
2.
MYSQL_HISTFILE 변수를 /dev/null로 설정
vi /etc/profile
export MYSQL_HISTFILE=/dev/null 추가 한뒤 저장
source /etc/profile
이상입니다.
보안과 편리함은 반비례하기 때문에 잘 판단하여 사용하기 바랍니다.