본문 바로가기

전체 글380

XtraBackup을 이용한 MySQL 백업 및 복구 이 글은 XtraBackup을 간단하게 소개한 글이고 자세한 사용법은 MySQL 원격 증분 백업 – Percona XtraBackup 이라는 글에서 다루고 있다. mysql 백업시 보통은 mysqldump를 사용합니다. 하지만 데이터가 커질수록 mysqldump로 백업한 데이터는 복구에 걸리는 시간이 길어집니다. mysql 서버를 중단시키지 않고 InnoDB 엔진도 핫백업이 가능한 도구로 XtraBackup이라는 오픈소스 프로그램이 있습니다. 소개를 보면 mysql 상용 백업 프로그램인 InnoDB Hot Backup 보다 더 많은 기능을 제공합니다. XtraBackup은 기본적으로 InnoDB와 XtraDB의 백업을 지원하지만 같이 설치되는 innobackupex 스크립트를 통해서 MyISAM 방식도 .. 2014. 7. 17.
개발자가 보면 암 걸리는 동영상 개발자만 정상인건가? 2014. 7. 11.
MySQL(InnoDB) Clean shutdown MySQL의 InnoDB는 MyISAM과는 달리 트랜잭션을 지원하는 스토리지 엔진이며,또한, 내부적으로 여러 종류의 버퍼와 캐시들을 가지고 있어서 어떤 비 정상적인 상황에서도 트랜잭션이 보존될 수 있도록 "Redo log"라고 하는 트랜잭션 로그를 가지고 있으며, 이 트랜잭션 로그를 이용해서, 데이터 변경이 발생해도 즉시 그 변경 내용을 데이터 파일에 기록하지 않아도 ACID를 보장할 수 있게 된다. 일반적인 MySQL의 종료 또는 비 정상적인 종료가 발생하게 되면, 데이터 파일로 기록되지 못한 모든 작업 내용은 InnoDB의 시스템 테이블스페이스와 트랜잭션 로그 파일에 남아 있게 된다. MySQL이 다시 기동되면서InnoDB 스토리지 엔진은 트랜잭션 로그와 데이터 파일의 동기화 여부 (체크포인트 지점).. 2014. 7. 11.
GROUP BY의 Filesort 작업 제거 다른 DBMS와는 달리,MySQL은 GROUP BY 를 실행하면 GROUP BY 대상 컬럼을 기준으로 GROUP BY를 실행한 후, 정렬 작업까지 같이 수행하도록 구현되어 있다. 이러한 자동 정렬 기능이 때로는 필요할 수도 있고, 필요치 않은 경우도 많이 있지만 특별히 이를 제어할 수 있는 방법이 공유되지 않았기 때문에 정렬 작업이 필요치 않은 경우에도 불필요한 정렬 작업을 같이 실행시키고 있는 경우가 많았다. 간단히 GROUP BY 작업에 대한 실행 계획을 확인해보자.root@localhost:test>explain select * from user group by name ; +----+-------------+-------+------+..------+..------+-----------------.. 2014. 7. 8.
[MySQL] 내부 변수 max_allowed_packet 우리의 친구 MySQL에는 내부적으로 런타임 때(즉, 프로그램이 시작될 때) 설정되는 내부 변수들을 가지고 있다. 이러한 내부 변수의 설정은, mysql 명령어를 이용하여 프로그램을 시작할 때, 직접 입력할 수도 있지만, my.cnf에 넣어두면 DEFAULT로 읽기 때문에, 미리미리 입력해 놓으면, 까먹거나 하는 사태가 발생하지 않는다. 그 중 오늘 살펴 볼 것은 max_allowed_packet 이다. 왜 하필 이 놈을???? 이라고 생각할 수도 있지만, 내가 오늘 이 놈때문에 고초를 겪었기 때문이라고 말할 수 밖에....... -0-;;;; 일단 ERROR가 발생한 Log를 보자.. 아래 로그는 Replication이 설정 되어 있는 두 서버가 있고, 이 중 Slave에서 Master의 Log를 다 .. 2014. 7. 3.
InnoDB 테이블 손상(깨어진)시 강제 복구 MyISAM과 달리 InnoDB 테이블들은 매우 안정적이며, 왠만해서는 데이터 파일이 깨어지는 경우는 거의 경험하지 못했다.하지만, 데이터 파일이 깨어진다면 어떻게 해야 할까 ?. DBMS 벤더를 불문하고 손상된(깨어진) 데이터 파일을 복구한다는 것은 쉽지 않은 문제이며 위험도 크다.이런 비 정상적인 현상은 어느 DBMS에서나 발생할 수 있는 현상이며, 이를 위해서 우리는 데이터베이스를 그렇게 열심히 백업하고 있었던 것이다.만약, 백업마저도 복구가 안 된다면, 결국 지금의 깨어진 데이터 파일이라도 어떻게든 복구를 해야 한다.하지만, InnoDB는 myisamchk와 같은 별도의 복구 도구를 제공하지 않는다.손상된 InnoDB 테이블의 복구는 우선 MySQL을 기동시켜서 데이터를 덤프(mysqldump, .. 2014. 7. 3.
innodb 설치 및 옵션 1. 설치가 안되어 있을 때 1) 설치 여부 확인 mysql> show variables like 'have_innodb'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | have_innodb | NO | +---------------+-------+ 1 row in set (0.00 sec) 2) 2가지의 설치 방법 @ mysql 설치 시에 configure 추가 설치(or 재컴파일 설치) configure 시에 option 추가( --with-plugins=innobase) ./configure --prefix=/usr/local/mysql --with-charset=euckr --with-extra-ch.. 2014. 7. 1.
InnoDB에서 Auto_Increment 문제에 대해서 정확히 알자. Overview MySQL에서는 시퀀스 개념이 없지만, 테이블 단위로 움직이는 Auto_Increment라는 강력한 기능이 있습니다. Auto_Increment 속성은 숫자 형 Primary Key를 생성하는 데 많이 사용됩니다. 특히나 InnoDB 경우에는 Primary Key 사이즈가 전체 인덱스 사이즈에 직접적인 영향을 미치기 때문에, 저도 테이블 설계에 많이 권고하는 사항이기도 합니다. 그러나 InnoDB에서 Auto_Increment가 동작하는 방식을 정확하게 알지 못하고 사용하면, 대형 장애 상황으로도 치닫을 수 있습니다. 오늘은 간단한 사례를 바탕으로 관련 내용을 공유할까 합니다. ^^ Auto_Increment In InnoDB Auto_Increment는 스토리지 엔진 별로 다르게 동작합.. 2014. 7. 1.
UNION과 UNION ALL 의 차이 및 주의 사항 ANSI SQL에서 제안하는 집합 연산 "UNION", "INTERSECT", "MINUS" 중에서 MySQL에서는 UNION 집합 연산만 제공하고 있다. (하지만 MySQL에서 INTERSECT나 MINUS를 다른 형태의 쿼리로 풀어서 사용할 수 있다.) 이 글에서는 UNION 에 대해서 좀 더 자세히 알아 보고자 한다. UNION 집합 연산은 다시 아래와 같이 두가지 종류로 나누어진다. - UNION ALL - UNION DISTINCT 우리가 일반적으로 사용하는 방식인 아무런 추가 키워드 없이 UNION 만 사용하는 것은 UNION DISTINCT 를 줄여서 사용하고 있는 것이다. UNION ALL과 UNION DISTINCT를 레코드가 많은 결과에 대해서 적용해본 사람은 아마도 둘의 처리 방식에 .. 2014. 5. 22.
MYSQL binary log 관리하기 * 바이너리 로그를 남길 날짜 지정 mysql> set global expire_logs_days=14; Query OK, 0 rows affected (0.00 sec) * 바이너리 로그를 남길 날짜 확인 mysql> show variables like "expire%"; +------------------+-------+ | Variable_name | Value | +------------------+-------+ | expire_logs_days | 14 | +------------------+-------+ 1 row in set (0.00 sec) * 바이너리 로그를 남길 날짜 적용 mysql> flush logs; Query OK, 0 rows affected (1.62 sec) * 바이너.. 2014. 5. 9.
mysql binary log를 이용한 복구 DB작업전 반드시 data를 백업 후 작업을 진행하자.# cp -arp /usr/local/mysql/data /usr/local/mysql/data_bak_100406 mysql data 폴더를 보면mysql-bin.000001mysql-bin.000002mysql-bin.000003mysql-bin.000004, ...... 등의 파일이 있다. mysql 을 설치하고 부터 실행하는 모든 명령어들(create, update, delete, alter 등) 이 기록에 남는데이러한 기록을 이용하여 현재까지의 DB를 재작성 할 수 있다. 문제발생 시간을 확인하여 그 전 시간까지만 복구를 하면 된다. 1. mysql 바이너리 로그 파일 확보 # mkdir /usr/local/src/mysql_bin_repai.. 2014. 5. 9.
해킹방지를 위한 fail2ban 설치 개발중에 있던 서버에 burteforce기법으로 해커들이 루트계정을 따서 침투한뒤 네트워크 트래픽을 발생시키는 사건이 발생했다이문제를 해결하기위해 이런저런 방법들을 찾아보다가 몇번이상 계정접근이 실패하면 접근한 IP를 막아버리는 툴이있어서 적용해봤다. 1. fail2ban 다운로드(http://www.fail2ban.org/wiki/index.php/Downloads) 2. 압축풀고 설치#tar xvf fail2ban-0.8.12.tar.gz#cd fail2ban-0.8.12#python setup.py install 3. fail2ban 환경설정/etc/fail2ban/jail.confignoreip : 체크대상에서 제외할 IPbantime : 접근실패횟수가 넘어간 IP에 대해 정해진 시간만큼 접근을 .. 2014. 5. 9.
MySQL 암호화 방법 MySQL을 이용하는 대부분의 사이트에서 사용자의 정보를 암호화 하는데 MD5(SHA1)를 사용합니다. 하지만 MD5(SHA1)는 암호화가 아닌 해시 값 입니다. 해시 알고리즘 MD5(SHA1)에 의한 문자열입니다. 사용자 개인정보를 취급하는데 있어 DB전체 데이터를 분실한다고 했을때 많은 손실을 받을 수 있습니다. 물론 한개의 비밀번호를 알아내는데 약간의 시간이 필요하지만 그렇다고 해서 못알아내는 것은 아닙니다. 완벽한 보안이 아닌 그나마 차선책으로라도 암호화를 해 저장을 한다면 이러한 방식은 어떻까 합니다. MySQL 내부의 암호화 방식인 AES/DES를 사용해보는것입니다. AES(Advenced Encryption Standard) 는 미국 정부 표준으로 지정이된 블록암호화 알고리즘입니다 PHP 에.. 2013. 6. 12.
리눅스 기본설정 TIP - top, free, vmstat, openssh, motd, ulimit Open source를 모토로 제작된 리눅스는 관리자의 노력 여하에 따라아주 많은 부분을 관리자의 개인 성향, 용도에 맞게 설정이 가능합니다.오늘은 그 중에 아주 기본적인 하드웨어 모니터링 및 기초적인 tune up 등을 다뤄보기로 하겠습니다. 1. 성능분석 A. CPU 점검-uptime 첫번째 Load average의 3개 수치 1, 5, 15분 동안 활성화 되었던 프로세스들 부하의 평균수치 -top 시스템에서 실행되고 있는 프로세스들의 실시간 정보를 확인할 수 있으며시스템의 전반적인 상황을 한눈에 볼 수 있다., 첫번째 행 Top 유틸리티 이름시스템의 현재 시간시스템이 부팅된 후에 운영시간현재 로그인 수최근 1분,5분,15분 각각의 시스템 평균부하율(평균적으로 실행된 프로세스의 수를 의미) 두번째 행.. 2013. 5. 11.
리눅스 open files 설정 - ulimit ulimit 는 하나의 유저(쉘,프로세스)에 대허서 할당할 자원량의 한계를 정하는 것으로서 다중 프로그램/사용자를 기본으로하는 리눅스 시스템에서 과부하를 막아주는(한프로세스가 미쳐도 다른것에 영향이 덜가도록) 방패가 되어 주는 유용한 설정이다. ulimit -Ha / ulimit -Sa(하드 설정 전체 보기 / 소프트 설정 전체 보기)=>하드는 해당쉘의 최대값을 뜻한다 하면 되고, 소프트는 현재 설정을 말한다 생각하면 된다. 1. open files 최대 개수 확인 먼저 ulimit -a 으로 open files 개수를 확인한다. ulimit -aH는 hard limit, -aS는 sort limit를 확인. csh 쉘을 사용하면 limit 명령으로 살펴볼 수 있다. $ ulimit -a core fil.. 2013. 5. 11.