■ MHA 소개MHA는 MySQL High Available의 약자로 MySQL의 HA솔루션중에 하나입니다. 구글에서 오픈소스로제공되었으나 현제는 중단되고 다른 개발자가 업데이트를 해오다 2018년도부터 중단되었습니다. 하지만 지금도 MySQL에서 가장 많이 쓰이는 HA솔루션중에 하나입니다.보통 DB의 HA솔루션은 Shared Disk를 이용하고 액티브 서버에 문제 발생시 HA솔루션이 문제를 감지하고 Shared Disk를 스탠바이 서버에 붙인 후 스탠바이 서버를 액티브로 기동하여 서비스를 정상화 시킵니다. 하지만 MHA는 특이하게 마스터 - 슬레이브 복제 구조에서 슬레이브중 하나를 마스터로 승격시키고 나머지 슬레이브들을 신규로 승격된 마스터에 모두 옮김으로서 HA를 완성시킵니다.물론 Peace Make..
■ 세미싱크 소개일반적으로 MySQL에서 복제라 얘기하면 Master - Slave(Replica)구조의 복제방식입니다. 그리고 이 복제방식은 특별한 설정을 하지 않는다면 비동기 방식입니다.동기 방식은 크게 반동기(세미싱크) 방식과 비동기 방식 2가지가 있습니다. 이걸 구분하는 방법은 슬레이브 바이너리 로그에 DML이 적용되었는지 여부를 판단하느냐 않하느야에 달려 있습니다.먼저 비동기 방식에 대해 알아보겠습니다.비동기 방식은 마스터에서 DML이 발생하면 바이너리 로그에 DML을 작성하고 이 바이너리 로그를 슬레이브로 보냅니다. 이때 비동기 방식은 바이너리 로그가 슬레이브 로그에 적용되었는지 여부에 관련없이 무조건 자신의 DML만 수행합니다. 이 방식은 마스터에서의 수행 여부만 판단하기 때문에 속도가 빠릅..
■ MSR (Multi Source Replication)이란?간단하게 설명해서 여러개의 마스터 서버 발생하는 데이터를 하나의 슬레이브 서버에서 받아내는 방식입니다. 그림 1. MSR 구성도 이 방식을 이용하면 여러 마스터 서버의 특정 DB만을 슬레이브에서 받아서 한번에 조회가 가능하다는 장점이 있습니다. 예를 들어 MASTER 1번의 특정 DB, MASTER 2번의 특정 DB, MASTER 3은 전체 DB를 복제하여 이 DB들을 한곳에 모아서 조회를 할수가 있습니다. 이것을 응용한다면 아래와 같은 그림으로도 구성할 수 있습니다. 그림 2. MSR 다중 구성도 여러개의 마스터-슬레이브 복제 클러스터들이 있을때 이중에서 특정 마스터의 특정 DB들만을 한곳에 모을 수 있습니다. 또한 이 데이터를 통계데이터로..
■ Timestamp 와 timezone과의 관계timestamp 컬럼 속성을 가지는 데이터를 마이그레이션 할때 유의할 사항이 있습니다.그것은 timezone의 속성이 굉장히 중요하다는 것입니다.예를 들어 기존 MySQL 서버의 time zone이 KST(+9시간) 일때 만약 UTC tim zone(+0)시간을 가지는 MySQL 서버에 데이터를 입력할 경우 UTC의 시간으로 바뀝니다. 즉 현재 MySQL서버의 시간에 따라간다는 의미입니다.테스트를 통해 알아보도록 하겠습니다. ■ 테스트다음과 같은 데이터가 있다고 가정합니다.mysql> select @@time_zone;+-------------+| @@time_zone |+-------------+| +09:00 |+-------------+1..
■ 복제 에러 건너뛰기MySQL의 마스터-슬레이브 복제 환경에서 운영시 복제가 멈추는 상황이 발생합니다. 예를 들면데이터 중복오류슬레이브에 존재하지 않는 데이터베이스에 데이터 입력슬레이브에 존재하지 않는 테이블에 데이터 입력 시도등 여러가지가 있습니다. 이런 이유들로 인해 데이터 복제가 멈추게 됩니다. 여기에서는 이런 에러에 대해 해결하는 방법에 대해 알아보겠습니다. ■ 에러 상황복제 중지 에러가 발생하게 되면 보통 다음과 같은 에러가 발생하게 됩니다. 아래에 나와있는 show slave status 명령을 입력하게 되면 에러 내용에 대해 자세히 나오게 됩니다.위에 보면 Last_Errno와 Last_Error가 있습니다. 이곳에서 왜 에러가 발생했는지 원인을 파악해 볼 수 있습니다.mysql> show..
■ Undo Log란? • 임시 테이블 스페이스에있는 언두 로그는 사용자 정의 임시 테이블의 데이터를 수정하는 트랜잭션에 사용됩니다. 실행 취소 로그 레코드의 집합으로 Transaction 실행후 Rollback 시 Undo Log 를 참조해 이전 데이터로 복구할수 있도록 로깅 해놓은 영역입니다. 서버가 실행되는 동안 롤백에만 사용됩니다. 이 유형의 실행 언두 로그는 재실행 로깅 I/O를 피함으로써 성능을 향상시킵니다. 트랜잭션이 데이터를 쓸 때 항상 테이블 인덱스 또는 데이터(버퍼 풀 또는 실제 파일)에 데이터를 삽입합니다. 개인 복사본이 생성되지 않습니다. 활성 XtraDB/InnoDB 트랜잭션에 의해 수정되는 이전 버전의 데이터는 실행 취소 로그에 저장됩니다. 그런 다음 원본 데이터를 복원하거나 일..
■ DBMS에서 커밋(Commit)이란??COMMIT 문은 관계형 데이터베이스 관리 시스템(RDBMS)에서 트랜잭션을 종료하고 다른 사용자에게 변경된 모든 사항을 보이도록 만드는 명령문입니다. 일반적으로 트랜잭션 종료시 해당 업데이트를 확정한다는 의미에서 "commit"이라고 합니다. 반대로 업데이트를 취소 처리를 롤백 (ROLLBACK)이라고 하며, 이러한 제어를 약속 제어라고 부르기도합니다. SQL에서는 ROLLBACK 문이 그 처리를 담당합니다. SQL에서 COMMIT은 RDBMS 내에 있는 데이터베이스 트랜잭션을 종결시키고, 모든 변화를 다른 사용자들이 볼 수 있게 합니다. 일반적인 포맷은 BEGIN WORK 구문으로 시작하여, COMMIT 구문이 나오게 됩니다. 다른 방법으로 ROLLBACK 구..
Mac에서 가장 유용한 터미널 프로그램을 꼽으라면 두말할 필요없이 Iterm 프로그램을 주저없이 선택할 것입니다. 아마 맥 사용자치고 이 터미널 프로그램을 기본으로 사용하지 않는 사용자는 없을 것입니다.(본인이나 회사에서 유료로 사준 터미널 프로그램이 없는한)또한 oh my zsh라는 터미널을 꾸며주는 프로그램까지 얹어서 사용한다면 자신이 원하는 테마로 꾸며서 더 편리하게 사용할 수 있습니다.여기서는 iTerm설치 방법과 화면분할 방법에 대해서 알아보겠습니다. ■ 설치 방법다운로드 사이트 : https://iterm2.com/ iTerm2 - macOS Terminal ReplacementiTerm2 by George Nachman. Website by Matthew Freeman, George Nac..
■ Redo Log란많은 데이터베이스 관리 시스템과 마찬가지로 MySQL은 데이터 내구성을 달성하기 위해 로그를 사용합니다(기본 InnoDB 스토리지 엔진을 사용할 때). 만약 DB 에 장애가 발생하여서 메모리 영역에만 남아있는 데이터를 디스크 영역으로 옮겨지지 못한채 서버가 다운되는 현상이 발생했을때 복구할수 있는방법이 바로 Redo Log, Undo log를 이용하는 것입니다. 이 로그들을 이용하면 트랜잭션이 커밋될 때 충돌이나 정전이 발생해도 데이터가 손실되지 않습니다. 리두로그에 대해선 따로 정리해서 포스팅하겠습니다. ■ Redo log 동작원리MySQL의 InnoDB 스토리지 엔진은 고정 크기(순환방식)의 Redo 로그 공간을 사용합니다. 크기는 innodb_log_file_size 및 inno..
■ InnoDB 스토리지 엔진 모니터링 방법InnoDB 스토리지의 상태를 확인하는 방법은 infomration_Schema와 sys스키마, performance 스키마를 확인하는 방법등이 있습니다.이중에서 가장 대표전인것이 Show 명령어를 이용하여 엔젠상태를 확인하는 방법입니다.이 명령어를 통해서 나오는 스토리지 엔진에 대해 하나하나 확인해 보겠습니다. ■ 스토리지 엔진 내용MySQL에서 다음과 같은 명령어를 입력하면 아래와 같은 화면이 나옵니다. 이 내용 안에는 Deadlock 정보, 버퍼풀 정보, 트랜잭션 정보등 정말 DBA에게 중요한 정보들이 많이 나옵니다.이 정보들에 대해 확인해 보겠습니다.MySQL> show engine innodb status;==========================..
sync_relay_logsync_relay_log를 1로 설정하면 수신된 각 트랜잭션이 디스크에 기록된 후 릴레이 로그를 디스크에 동기화하도록 복제 I/O 스레드에 지시합니다.즉 성능은 줄이되 안정성을 높이는 방법입니다. 가능하면 1로 설정을 권고합니다. 0이나 다른 숫자로 바꾸면 성능이 좋아지긴 합니다. 이건 선택적인 문제이기도 합니다.참고로 sync_relay_log를 1보다 크게 또는 sync_relay_log를 0(여기서 동기화는 운영 체제에서 처리됨)인 경우복제본이 예기치 않게 중단되는 경우 디스크에 동기화되지 않은 커밋된 트랜잭션이 있을 수 있습니다.이러한 트랜잭션으로 인해 디스크에 마지막으로 동기화된 릴레이 로그에 있는 정보를 기반으로 복구 중인 복제본이 트랜잭션을 건너뛰는 대신다시 검색 ..
■ InnoDB 스토리지 엔진의 테이블 데이터 저장 방식MySQL 테이블의 데이터는 IOT(Index Oraganized Table)라고 하여 프리머리 키값을 이용하여 데이터를 정렬 후 테이블에 저장하게 되어 있습니다.이 프리머리 키를 다른말로 클러스터링 인덱스라고도 합니다. 그리고 MySQL에서는 이 클러스터링 인덱스가 좀 특별하게 다루어집니다. 그림 1. MySQL B-Tree 인덱스 구조 위의 그림은 MySQL의 클러스터링 인덱스의 구조인데 일반적인 B- Tree 인덱스와 비슷합니다.. 그러나 MySQL에서 B-Tree 인덱스의 리프노드에는 모든 칼럼이 같이 저장되어 있습니다.즉 클러스터링 테이블은 데이터와 프리머리 인덱스를 모두 포함하고 있는 구조가 되는 것입니다. ■ 세컨더리 인덱스(Secon..