MySQL Log 종류

리눅스 2016. 4. 14. 08:43

http://crowz.co.kr/60

 

<MySQL Log 종류>


1. 에러로그 - Error_log

2. 제너럴 로그 - General_log

3. 슬로우쿼리 로그 - Slow query_log

4. 바이너리 로그 - Binary log

5. 릴레이 로그 - Relay log



1. Error log 

- /etc/my.cnf에 따로 지정을 해주지 않으면 보통 /var/log/mysqld.log 로 저장

- /etc/my.cnf 에 "log-error=경로.log" 로 지정 가능

- 또는 mysql data 디렉터리에 .err 형식으로 저장

- MySQL 구동과 모니터링, Query 에러에 관련된 메세지를 포함



2. General log 설정 ( mysql command history log )

 

- MySQL에서 실행되는 전체 쿼리에 대하여 General log를 활성화 시켜서 저장 가능

- General log를 활성화하면 MySQL이 쿼리 요청을 받을 때 곧 바로 General log에 기록


* 실시간으로 general log 활성화하기 ( mysqld 재시작 없이 )

# mysql -u root -p

:

 - general log 상태 확인


mysql> show variables like 'general%';

mysql> show variables where Variable_name in ('version', 'log', 'general_log');
+---------------+------------+
| Variable_name | Value      |
+---------------+------------+
| general_log   | OFF        |
| log           | OFF        |
| version       | 5.1.73-log |
+---------------+------------+
3 rows in set (0.00 sec)

 

- general log 활성화

mysql> set global general_log = ON;

mysql> set global general_log = 1;
Query OK, 0 rows affected (0.01 sec)


mysql> show variables where Variable_name in ('version', 'log', 'general_log');
+---------------+------------+
| Variable_name | Value      |
+---------------+------------+
| general_log   | ON         |
| log           | ON         |
| version       | 5.1.73-log |
+---------------+------------+
3 rows in set (0.00 sec)

 

- general log 비활성화

mysql> set global general_log = OFF;


mysql> quit

 

* mysql data 디렉터리로 이동


# cd /usr/local/mysql/data

# tail -f localhost.log &
[1] 1983
# /usr/local/mysql/libexec/mysqld, Version: 5.1.73-log (Source distribution). started with:
Tcp port: 3306  Unix socket: /tmp/mysql.sock
Time                 Id Command    Argument
150122  5:58:31     1 Query     show variables where Variable_name in ('version', 'log', 'general_log')
150122  6:00:04     1 Quit

 

# touch /var/log/mysql_history.log

# chown mysql.mysql /var/log/mysql_history.log


- general log 영구적으로 적용 및 파일 생성

# vi /etc/my.cnf

general_log = 1

general_log_file = /var/log/mysql_history.log

 

# /etc/init.d/mysqld restart

 

 

 

 

3. Slow Query 설정

 

- slow query log는 long_query_time에 설정된 시간 이상을 소요한, 정상적으로 완료된 쿼리를 모두 기록

- general log는 query 요청을 받고 바로 입력하기 때문에 에러가 발생한 쿼리도 입력이 되지만, slow query log는 쿼리가 완료된 실행된 시간 까지 입력하기 때문에 실행 도중 에러가 발생한 쿼리에 대해서는 로그로 남기지 않는다.

- MySQL 프로세스가 CPU/Memory 자원을 비정상적으로 많이 사용하여 서버의 load average가 급증하거나, 웹페이지 로딩 속도가 현저히 지연될 경우 확인

* slow 관련 설정은 Dynamic으로 set global 명령으로 재시작 없이 수정 가능합니다. 

 

< slow 로그 설정 확인 방법 >

 

mysql> show variables like 'slow%'; 
mysql> show variables like 'long%'; 

mysql> show variables like 'log%'; 

 

 

 

< slow 로그 ON, OFF >

 

> set global slow_query_log = ON;

> set global slow_query_log = OFF;


# vi /etc/my.cnf

slow_query_log_file = /datadir/serverhostname-slow.log

 

 

 

< 롱 쿼리 타임 설정 >


> set global long_query_time = 10;


# vi /etc/my.cnf

long_query_time = 10.000000

-> 10초 이상 query 를 기록하는 설정

위의 의미는 쿼리타임이 10초를 초과하는 쿼리에 대해 /temp/mysql-slow.log 파일에 로그를 남기라는 의미 입니다.

 


<로그 출력 타입 설정 >

 

log_output = FILE

 

 

< 인덱스를 사용하지 않는 쿼리 추출용 옵션 변수 ON, OFF >

 

log_queries_not_using_indexes = OFF

 

 

 < 파일 내용 >

Time : 쿼리가 종료된 시간

Query_time : 쿼리가 실행된 시간

Lock_time : MySQL 엔진 레벨의 테이블 잠금 대기시간 ( 테이블 Lock 걸린 시간 )

Row_sent : 클라이언트로 보낸 실제 처리 건수 ( 쿼리 처리 결과 Row 수 )

Row_examined : 쿼리 처리를 위해 접근한 레코드 건수 ( 쿼리 처리 대상의 Row 수 )

 

< slow query 설정 >


# touch /var/log/slow-query.log
# chown mysql.mysql /var/log/slow-query.log

# vi /etc/my.cnf

 

[mysqld]

 

    log-slow-queries = /usr/local/mysql/var/mysql-slow.log

    long_query_time = 3    --> 위 내용은 쿼리 타임이 '3초'를  초과 하는 쿼리에 대해 /usr/local/mysql/var/mysql-slow.log 파일에 기록 한다는 뜻입니다.


    log-slow-queries = 로그 파일명

    long_query_time = 쿼리 타임

 


# /etc/init.d/mysqld restart


my.cnf에 설정 및 mysql을 리스타트 한 뒤 운영 하다 보면 slow-query-log가 남게 됩니다.

쿼리의 분석 방법은 EXPLAIN 을 이용하여 분석을 하면 됩니다.

 


explain 을 사용하여 체크

 

(사용법)
      EXPLAIN tbl_name
   or EXPLAIN SELECT select_options




< 종합 >

slow_query_log = ON show variables like 'log_output'; set global log_output='FILE'; set global log_output='TABLE'; set global log_output='TABLE,FILE'; 

 

 

* 설정 확인

mysql> show global variables like '%slow%'; | log_slow_queries | OFF | | slow_launch_time | 2 | | slow_query_log | OFF | | slow_query_log_file | /data/dbrepl/m3-31-slow.log | +---------------------+-----------------------------+ mysql> show global variables like '%long%'; +-----------------+-----------+ | long_query_time | 10.000000 | +-----------------+-----------+ mysql> set global log_slow_queries = 1; mysql> show global variables like '%slow%'; | log_slow_queries | ON | | slow_launch_time | 2 | | slow_query_log | ON | | slow_query_log_file | /data/dbrepl/m3-31-slow.log | +---------------------+-----------------------------+ mysql> show global variables like '%log%'; mysql> show variables where Variable_name in('version','log','general_log','general_log_file','log_ourput'); +------------------+-----------------------------------+ | Variable_name | Value | +------------------+-----------------------------------+ | general_log | OFF | | general_log_file | /data/dbrepl/m3-31.log | | log | OFF | | version | 5.1.56-ndb-7.1.13-cluster-gpl-log | +------------------+-----------------------------------+ mysql> set global general_log = 1; mysql> show variables where Variable_name in('version','log','general_log','general_log_file','log_ourput');

| general_log | ON | | general_log_file | /data/dbrepl/m3-31.log | | log | ON | | version | 5.1.56-ndb-7.1.13-cluster-gpl-log | +------------------+-----------------------------------+

show variables like 'log_output'; set global log_output='FILE'; set global log_output='TABLE'; set global log_output='TABLE,FILE';
select count(*) from mysql.general_log;
set global max_connections=200;
show variables like '%CONNECT%';
show processlist\G



4. Binary log & Relay log

- MySQL 쿼리를 수행하면서 쌓는 로그, 추 후 트랜잭션하여 시점 복구 등을 수행하는 역할

- 일반적으로 바이너리 로그는 마스터에서, 릴레이 로그는 슬레이브에서 생성되며, 포맷과 내용은 동일

- slave가 또 다른 slave의 Master가 되어야 할 경우   log_slave_updates   옵션을 ON으로 설정하여 slave에서 바이너리 로그가 생성되도록 설정

- 바이너리 로그는 mysqlbinlog 프로그램을 이용하여 사용자가 읽을 수 있는 파일로 변환할 수 있다.

ex) 

mysqlbinlog --database=DB명 mysql-bin.000001 > 생성파일명.sql

[몇가지 옵션]
--database=DB명
--start-datetime="2014-09-09 10:00:00" --stop-datetime="2014-09-10 10:00:00"
--start-position=100 --stop-position=200


< 바이너리 파일을 통한 쿼리 실행 >


- 바이너리 파일을 MySQL에서 실행


mysqlbinlog mysql-bin.000001 | mysql -u root -p
sql 파일로 생성 한 뒤 실행
mysqlbinlog mysql-bin.000001 > test.sql
SOURCE test.sql



< bin log 관리 > - Binary log 관리


- bin log 설정


# vi /etc/my.cnf

 

log-bin=/home/mysql_log/bin_log/bin                 # 바이너리 로그 저장 설정 및 저장할 디렉토리 지정
binlog_cache_size = 2M                                     # 바이너리 로그 cache 사이즈 
max_binlog_size = 50M                                     # 바이너리 로그 최대 파일 사이즈 
expire_logs_days = 10                                         # 보관기간



- Binary log 삭제 : MySQL Binary Log 는 add, delete, insert, update 등의 query 가 저장되어 있는 파일로서 MySQL 을  설치하게 되면 기본적으로 MySQL Binary Log 가 생성됩니다.

 Binary Log 를 쌓지 않아도 되는 MySQL 구동 환경에서는 Binary Log 를 삭제하므로, 디스크 공간 확보 가능합니다.


ex1) MySQL Replication 환경에서 지우기

 - MySQL Replication MASTER 서버
    shell> mysql -u root -p
    mysql> RESET MASTER;


  - MySQL Replication SLAVE 서버
    shell> mysql -u root -p
    mysql> RESET MASTER;



ex2) MySQL Binary Log sequence number 또는 특정 일자로 지우기

> show binary logs;

| mysql-bin.000182 | 1073741883 |
| mysql-bin.000183 | 1073741988 |
| mysql-bin.000184 | 1073741999 |
| mysql-bin.000185 | 1073741927 |
| mysql-bin.000186 | 1073742098 |


> purge master logs to 'mysql-bin.000186';                    --> 해당 파일 이전의 파일들을 모두 삭제


> set global expire_logs_day=2;                                    --> 바이너리 로그를 저장할 주기 설정

ex3) mysqladmin flush-logs 명령어를 통해서 지우기
 shell> mysqladmin -u root -p flush-logs

ex4) MySQL Binary Log 생성을 방지 하는 방법
/etc/my.cnf 파일에서 아래 라인을 주석 처리
  log-bin

ex5) MySQL Binary Log를 특정 1주일까지만 생성 및 보관하기

  /etc/my.cnf 파일에서 아래 라인을 추가
  expire_logs_days = 7




6. logrotate 활용하여 로그 관리 하기

 

# vi /etc/logrotate.d/mysql_general

 

/var/log/mysql_history.log {
    weekly
    rotate 3
    compress
    missingok
    notifempty
    sharedscripts
    create 660 mysql mysql
    postrotate
        /usr/bin/mysqladmin flush-logs
    endscript
}

 

 

 

# vi /etc/logrotate.d/mysql_slow

 

/var/log/mysql-slow.log {
    weekly
    rotate 3
    compress
    missingok
    notifempty
    sharedscripts
    create 660 mysql mysql
    postrotate
        /usr/bin/mysqladmin flush-logs
    endscript
}

 

# /etc/init.d/crond restart

# chkconfig --list | grep crond

# chkconfig crond on

# ps -ef | grep cron

'리눅스' 카테고리의 다른 글

VIM 환경설정  (0) 2016.03.30
pam_tally2 확인 및 초기화  (0) 2016.03.30
awk 필드 변수, 빌트인 변수  (0) 2016.03.28
쉘 스크립트 문자열 조작  (0) 2016.03.28
리눅스 네임서빙 우선순위 결정 : /etc/host.conf  (0) 2016.03.03
Posted by 캐논볼
,

ESXi

IT 생활 2016. 4. 6. 16:56

http://blog.pasion.kr/what-is-esxi/

 

1. ESXi 소개

 

VMware-ESXi-2

ESXi는 VMware에서 만든 가상화 OS 입니다.

ESXi는 vSphere Hypervisor 이라는 제품군에 속해있습니다.

따라서 ESXi는 vSphere Hypervisor에 있는 많은 프로그램들 중 하나입니다.

 

download-vsphere-client

 

<vSphere Hypervisor>

– VMware ESXi or VMware ESX  => Free

– VMware vStorage VMFS

– Eight-way virtual SMP(8 vCPU)

– VMware vCenter

– VMware vStorage APIs / VCB

– VMware vCenter Update Manager

– VMware HA

– VMware vStorage Thin Provisioning

– VMware vMotion

– VMware Hot Add

– VMware Fault Tolerance

– VMware Data Recovery

– VMware vShield Zones

– VMware Storage vMotion

– VMware DRS

– VMware DPM

– VMware vNetwork Distributed Switch

– VMware Host Profiles

 

이렇게 많은 프로그램이 있습니다.

그 중에 젤 위에 있는 VMware ESXi or VMware ESX만이 무료로 사용이 가능합니다.

다른 프로그램들은 유료입니다.

여기서 ESXi는 버전 5.0부터를 통칭하며, ESX는 5.0버전 미만을 지칭할 때 사용합니다.

 

 

 

2. ESXi 기능

 

그럼 이제 왜 ESXi를 많이 사용하는지 알아보겠습니다.

기본적으로 vSphere Hypervisor은 많은 기능들이 있지만,

무료로 사용할 수 있는 프로그램은 ESXi 밖에 없습니다.

다만 개인이나 소규모 회사에서는 ESXi 만 사용해도 충분히 활용히 가능하기에 많은 사람들이 기능이 없더라도 사용하고 있는 것 입니다.

 

<ESXi의 개념>

ESXi는 기본적으로 하나의 냉장고라고 보면 됩니다.

여기서 OS가 구동되는 가상 시스템(VM)은 냉장고에 넣어둘 음식들이라고 합시다.

자. ESXi를 컴퓨터에 설치를 하게 되면 우리는 냉장고 하나를 구매하는 것 입니다.

 

hp_proliant_microserver_gen8

 

그런데, 냉장고를 사면 냉장고만 사놓고 끝인가요?

먹을 것도 냉장고에 채워 넣어야합니다.

먹을 것이 VM입니다.

냉장고에서 우리가 먹고 싶은 음식을 꺼내서 먹듯이

ESXi도 컴퓨터에 설치를 하고 우리가 사용하고 싶은 운영체제가 설치된 VM들을 꺼내서 사용하게 됩니다.

 

그림1

 

물론 비유에 사용한 음식들은 냉장고에서 곧 사라지지만 VM들은 그렇진 않죠…^^

그런데, 왜 사용할 OS를 직접 컴퓨터에 설치하지 않고 ESXi에 넣냐고요?

이것은 가상화를 사용하는 이유에 대해서 알아야합니다.

 

중앙집중화

 

시쳇말로 한쪽에 몰빵해 놓는다는 의미죠.

왜 그렇게 할까요?

바로 비용을 줄이고 컴퓨터의 남는 자원을 효율적으로 사용하자는 것입니다.

 

음식들은 담아놓는 용기를 각개 따로 만들어 보관한다고 가정한다면

음식들을 담아놓을 용기 따로, 공간 따로 필요합니다.

용기는 용기대로 구입해야하고 공간은 공간대로 잡아먹겠죠.

 

그러나 냉장고를 하나 구입한다면?

한 곳에 몰빵하고 공간 남지 않게 차곡차곡 음식들을 보관할 수 있습니다.

ESXi를 사용하는 이유도 마찬가지입니다.

PC에 남는 리소스를 효율적으로 배분하고 비용을 줄이기 위한 것이 ESXi를

사용하는 목적입니다.

 

 

 

3. 라이센스

 

자, 아까 ESXi만 무료로 사용이 가능하다고 했습니다.

그럼 다른 프로그램들은 돈을 내야 사용이 가능하다는 뜻이겠지요?

 

VMware vSphere 에디션 별 기능 및 가격

VMware vSphere Essentials/VMware vSphere Essentials Plus-(호스트 3대로 제한) (USD $495/USD $2,995)

VMware vSphere Standard Edition-(USD $795/프로세서(up to 6-core) 당/최대 256GB 메모리)

VMware vSphere Advanced Edition-(USD $2,245/프로세서(up to 12-core) 당/최대 256GB 메모리)

VMware vSphere Enterprise Edition-(USD $2,875/프로세서(up to 6-core) 당/최대 256GB 메모리)

VMware vSphere Enterprise Plus Edition-(USD $3,495/프로세서(up to 12-core) 당/무제한 메모리)

 

가장 저렴한 Essentials (495달러)와 가장 비싼 enterprise plus (3495)는 서로 약 8배의 가격차이가 나는 것을 볼 수 있습니다.

Essentials의 경우 3대의 컴퓨터에만 설치할 수 있고 기능도 ESXi, vcenter, vcops 3개의 프로그램만 사용가능합니다.

enterprise plus의 경우 지원하는 모든 프로그램을 사용할 수 있습니다.

 

각 라이센스에 대한 프로그램 지원목록, 하드웨어 제한사항은

매번 vSphere Hypervisor의 신 버전이 나올 때마다 조금씩 변경이 되는 추세라 나중에 6.0버전이 나온다면

그에대한 라이센스 내용을 자세히 다뤄보고자합니다.

 

라이센스에 대해서 마지막으로 말씀드리자면,

일반인들이나 소규모 서버를 사용하는 회사는 Essentials 버전으로도 충분하다고 생각됩니다.

Eseentials 버전에는 포함된 vCenter 라는 것만 있어도 운영을 효과적으로 잘 할 수 있습니다.

제가 Essentials 버전으로 서버를 운영중입니다.

 

 

4. 장, 단점

 

앞에 내용을 바탕으로 ESXi의 장단점에 대해서 이야기 해보고자 합니다.

 

●장점

-무료

-ESXi는 그 자체가 가상화 관리용 OS이므로 따로 기본 OS를 설치할 필요가 없음

-일반적인 가상화 솔루션의 장점 (리소스의 효율성, 중앙집중화)

 

단점

-추가 기능 사용을 위한 금액적 부담.

-생소함(윈도우 GUI와 달라서 백업, 복원, 관리적 측면의 어려움 > 익숙해지면 오히려 편하게 느낄수도 있습니다)

 

 

5. 추천대상

 

-서버로서 구석에 놓고 여러개의 OS를 필요로하는 작업을 하고, 서비스를 하는 경우

-테스트 목적의 시스템을 많이 만들고 또 이를 자주 지워야하는 사람

-가상화 서버를 운영하고 싶은데 전기세 걱정되는 사람 (ESXi라는 OS 자체가 매우 가볍기 때문에 OS위에 가상화를 올리는 것보다 대체적으로 낮은 전력소모)

 

 

 

6. ESXi의 대표적 활용

 

– VT-D 기술을 이용해 가상화 환경에서 외부 장치를 직접적으로 붙이기

– Zero Client devices를 이용해 VDI 환경 구축

– Veeam Software를 통한 ESXi 백업

– ESXi에 Mac OS X 설치

 

'IT 생활' 카테고리의 다른 글

AHCI  (0) 2016.04.22
프로비저닝(Provisioning)  (0) 2016.04.06
윈도우7 한글 변환  (0) 2016.03.29
P-ATA(IDE) / S-ATA  (0) 2016.03.03
Active Directory  (0) 2015.10.21
Posted by 캐논볼
,

http://blog.naver.com/gojump0713/140110601767

용어

 

 

프로비저닝(Provisioning)이란?

 

사전적의미 - 준비, 예비, 설비 make provisioning=준비하다

 

 

[IT에서 사용하는 의미]

 

무엇인가 여럿 중에 최적인 것을 찾기 위해 필요한 지식을 미리 준비해 놓고 요청에 맞게 공급하는 절차 와 행위를 provisioning 라고 한다

 

, 미리 정의된 정책이나 서비스를 사용자에게 내려 (지원, 서포트) 주는 것을 말한다.

 

IT인프라 지원을 사용자 또는 비즈니스의 요구사항에 맞게 할당 ,배치,배포해서 시스템을 사용 할 수 있드록 만들어 놓는 것

 

 

[다양한 프로비저닝]

 

* 서버자원의 프로비저닝 : 서버,CPU,Memory 등의 자원을 할당 또는 적절하게 배치해서 운영할 수 있도록 준비해 놓는 것

 

* OS 프로비저닝 : OS를 서버에 설치하고 ,구성 작업을 해서 OS가 가동되도록 준비해 놓는 것

 

* 소프트웨어 프로비저닝 : 소프트웨어(WAS, DBMS, 어플리케이션 포함)를 시스템에 설치 배포하고 필요한 구성 셋팅 작업을 해서 실행 할수 있도록 해 놓는 것

 

* 스토리지 프로비저닝 : 낭비되거나 사용되지 않는 스토리지를 식별하고 공통 풀에 가져다가 놓을 수 있습니다.

 

이후 스토리지에 대한 요구가 접수 되면 관리자는 이공통 풀에서 스토리지를 꺼내 사용 할 수 있어,효율성을 높일 수 있는 인프라 구축 가능

 

* 계정 프로비저닝 : 신입사원이 입사하거나 조직내에서 인사 이동을 하거나 직무변경이 발생해 사용자가 접근하는 자원(Resource)의 범주가 변경되었을 때 HR담당자와 IT관리자는 승인절차 밟은 후 e-mail ,그룹웨어 ,ERP등 다양한 어플리케이션에 필요한계정을 생성하거나 접근권한을 변경해주데 이러한 일련의 과정을 계정 프로바이저닝이라고 한다

 

 

위의 작업들을 시스템담당자가 수동으로하면 수동프로비저닝자동화 툴을 이용해서 자동화 하면 자동프로비저닝이라고 한다.

 

 

가상화 시스템, 유틸리티 컴퓨팅, 클라우드 컴퓨팅 환경에서 IT인프라 자원을 활당,배치, 배포, 구성하는 작업들을 자동화하는 기능을 요구하고 있는데, 그래서 자동 프로비저닝이란 개념이 많이 논의 됨

 

 

 

 

 

.

 

[ 프로비저닝 필요성 ]

 

경영환경 변화에 따라서 IT서비스 변경을 해야 한다.

 

IT서비스 변경에는 변경관리 인시던트가 발생하여 IT서비스의 가용성을 저하를 야기하고, 비즈니스에 영향을 주게된다. 적절한 시스템 구성을 확보하고, 시스템 상태를 모니터링하고, 문제를 해결하기위한 개선 도구를 제공하는 것이 필요하다. 즉 자동화 프로비저닝은 IT리소스 사용량을 최적화하고 일상적인 IT서비스 관리업무를 단순화하기 위한 기본대응 내용이다.

 

 

 

 

'IT 생활' 카테고리의 다른 글

AHCI  (0) 2016.04.22
ESXi  (0) 2016.04.06
윈도우7 한글 변환  (0) 2016.03.29
P-ATA(IDE) / S-ATA  (0) 2016.03.03
Active Directory  (0) 2015.10.21
Posted by 캐논볼
,