웹서비스를 운영하면서 사이트가 느려진다면 많은 이유가 있겠지만

그중에 한가지 이유로 db관련 이슈가 있다.

 

그럼 개발자로써 해결을 해야하는데 많고 많은 웹서비스에 쿼리들 중에서 어떤 부분이 문제인지 어떻게 찾아야할까?

mysql이 옵션중에 설정해놓은 시간 이상 걸리는 쿼리를 기록하는 옵션이있다.

 

 

먼저 해당 옵션이 켜져있는지 꺼져있는지 확인해보자.

나의 윈도우 컴퓨터는 나도 모르게 켜져있었다..

 

 

실습환경 : ubuntu 18.04

DB : mariadb 10.1.40

1. 옵션 on/off 확인하는방법

먼저 mysql에 접속한후

$ mysql -u root -p

 

show variables like 'slow_query_%';

명령어로 확인해보자

OFF 되있는걸 볼 수 있다.

밑에 log_file은 ON일 경우 느린 쿼리 기록을 남기는 파일 경로이다.

 

 

2. 슬로우쿼리 옵션 설정

mysql설정파일 즉 윈도우환경이면 my.ini 리눅스면 my.cnf를 켜고 

[mysqld] 아래에 다음과 같은 #slow-query-setting부분을 적고 저장하자 

slow_query_log=1 이 ON상태이고 0이 OFF상태이다

fie은 아까 말했던대로 log파일을 남길 경로이며

long_query_time은 로그를 남길 기준시간이다.

즉 지금 1로 설정해놓았는데 쿼리실행시간이 1초가 넘어가야 로그를 남긴다.

 

저장후 mysql 재시작을 해준다.

$ service mysqld restart

윈도우에선 gui로 서비스 재시작을 해주자

 

재시작후 다시 1번을 하면 아래와 같이 설정이 바뀌어있다.

 

3. 로그 폴더 생성 / 권한부여

$ mkdir /var/log/slowlog

$ chown mysql:mysql /var/log/mysql

 

4.  TEST

mysql 접속을해서

select sleep(5);

의도적으로 시간을 지연시키는 쿼리를 보내고

 

나와서 확인을 해보자

Time 쿼리를 수행한 시간

User@Host 접속계정과 host정보

Query_time 쿼리가 수행되기까지의 시간

Lock_time 테이블 독점시간

그리고 밑에 수행한 쿼리문도 출력된다.

 

 

참고

https://2dubbing.tistory.com/19

https://zetawiki.com/wiki/MySQL_%EC%8A%AC%EB%A1%9C%EC%9A%B0_%EC%BF%BC%EB%A6%AC_%EB%A1%9C%EA%B7%B8_%EC%84%A4%EC%A0%95

'MySQL' 카테고리의 다른 글

[MySQL] 느린 쿼리 잡기 - slow_query_log  (1) 2019.08.08
[MySQL] 백업하기, mysqldump  (3) 2019.01.02
[MySQL] 사용자 추가, 삭제, 권한 부여  (2) 2018.10.25
  1. 랑~~~이 2019.08.08 20:53

    좋네요!!^^

    slow query는 매우 많이 사용되는 방법이지요!

    정리가 아주 잘된 것 같습니다.

덤프뜨기 (백업하기)


mysqldump -u (사용자이름[ex:root]) -p 백업할데이터베이스명 테이블명1 테이블명2  > 백업파일명.sql


mysqldump -u (사용자이름[ex:root]) -p --all-databases > 백업파일명.sql


특정 데이터베이스를 덤프하거나 모든 DB를 백업하는 방법이다.

테이블명을 입력하면 입력한 테이블명만 dump되고 

데이터베이스 안에 모든 테이블을 받으려면 입력하지 않으면 된다.




덤프저장 (백업복구)


mysql -u (사용자이름[ex:root]) -p 복구할데이터베이스명 < 백업파일명.sql


mysql -u (사용자이름[ex:root]) -p  < 백업파일명.sql


특정 데이터베이스를 덤프하거나 모든 DB를 복구하는 방법이다.

복구는 테이블 한개든 여러개든 전부든 테이블명을 입력하지 않아도 된다.

'MySQL' 카테고리의 다른 글

[MySQL] 느린 쿼리 잡기 - slow_query_log  (1) 2019.08.08
[MySQL] 백업하기, mysqldump  (3) 2019.01.02
[MySQL] 사용자 추가, 삭제, 권한 부여  (2) 2018.10.25
  1. 2019.04.26 15:53

    비밀댓글입니다

  2. 2019.04.26 16:39

    비밀댓글입니다

  3. 2020.04.03 12:20

    비밀댓글입니다

접속하기

 

$ mysql -u root -p

 

먼저 root 계정으로 접속한다.

 

 

 

사용자 확인하기

 

mysql> use mysql;

 

mysql> select host,user from user;

 

 

 

 

사용자 추가하기

 

mysql> create user '사용자'@'localhost(또는 %)' identified by '비밀번호';

 

%는 외부에서의 접근을 허용한다

 

 

 

사용자 삭제하기

 

mysql> drop user '사용자'@'localhost';

 

 

 

 

사용자에게 데이터베이스 권한 부여

 

mysql> grant all privileges on *.* to '사용자'@'localhost';

 

mysql> grant all privileges on DB이름.* to '사용자'@'localhost';

 

mysql> grant all privileges on DB이름.테이블명 to '사용자'@'localhost';

 

mysql> grant select on DB이름.테이블명 to '사용자'@'localhost';

 

mysql> grant update(컬럼1, 컬럼2) on DB이름.테이블명 to '사용자'@'localhost';

 

이렇게 특정 데이터베이스의 권한을 줄 수도 

특정 권한 ex) select 권한만 줄 수도

특정 컬럼에만 update의 권한을 줄 수도 있다.

 

all privieges 는 모든 권한을 

*.*은 모든 데이터베이스의 모든 테이블을 뜻한다.

 

@뒤에 특정 외부 ip를 설정 할 수 있다.

 

 

사용자 생성, 권한 부여 한번에 하기

 

mysql> grant all privileges on *.* to '사용자'@'localhost' identified by '비밀번호';

 

이렇게 한번에 사용자 생성과 권한 부여를 할 수 있다.

 

 

사용자 권한 삭제하기

 

mysql> revoke all on DB이름.* from '사용자'@'localhost';

 

권한 부여와 구조가 같다. 

마찬가지로 응용해서 특정한 조건을 줄 수 있다.

 

 

변경사항 반영하기

mysql> flush privileges;

 

사용자 권한 확인하기

 

mysql> show grants for '사용자명'@'localhost';

 

 

 

'MySQL' 카테고리의 다른 글

[MySQL] 느린 쿼리 잡기 - slow_query_log  (1) 2019.08.08
[MySQL] 백업하기, mysqldump  (3) 2019.01.02
[MySQL] 사용자 추가, 삭제, 권한 부여  (2) 2018.10.25
  1. 나라고 2019.07.22 22:32

    flush privileges; 마지막에

  2. Kee. 2020.06.27 11:03 신고

    감사합니다 도움이 많이 됐어요!!~

+ Recent posts