■ Doublewrite Buffer 이중 쓰기 버퍼는 InnoDB 데이터 파일의 적절한 위치에 페이지를 쓰기 전에 InnoDB가 버퍼 풀에서 플러시 된 페이지를 쓰는 저장 영역입니다. 페이지 쓰기 도중에 운영 체제, 스토리지 서브 시스템 또는 mysqld 프로세스 충돌이있는 경우 InnoDB는 응급 복구 중에 이중 쓰기 버퍼에서 올바른 페이지 사본을 찾을 수 있습니다. 데이터가 두 번 기록되지만 이중 쓰기 버퍼에는 두배의 I/O 오버 헤드 또는 두배의 I/O 작업이 필요하지 않습니다. 운영 체제에 대한 단일 fsync() 호출로 innodb_flush_method가 O_DIRECT_NO_FSYNC로 설정된 경우를 제외하고는 큰 순차 청크로 이중 쓰기 버퍼에 데이터가 기록됩니다. 이중 쓰기 버퍼는 대부분..
■ 시스템 테이블 스페이스 시스템 테이블 스페이스는 InnoDB 데이터 딕셔너리, 이중 쓰기 버퍼, 변경 버퍼 및 실행 취소 로그의 저장 영역입니다. 테이블이 파일당 또는 일반 테이블 스페이스가 아닌 시스템 테이블 스페이스에서 테이블을 작성하는 경우 테이블 및 인덱스 데이터도 포함 할 수 있습니다. 시스템 테이블 스페이스에는 하나 이상의 데이터 파일이 있을 수 있습니다. 기본적으로 ibdata1이라는 단일 시스템 테이블 스페이스 데이터 파일이 데이터 디렉토리에 작성됩니다. 시스템 테이블 스페이스 데이터 파일의 크기와 수는 innodb_data_file_path 시작 옵션으로 정의됩니다. 시스템 테이블 스페이스에 대한 추가 정보는 섹션의 다음 주제에서 제공됩니다. - 시스템 테이블 스페이스 크기 조정 - ..
■ Bufferpool 버퍼 풀은 InnoDB가 액세스 할 때 테이블 및 인덱스 데이터를 캐시하는 메인 메모리의 영역입니다. 버퍼 풀은 자주 사용하는 데이터를 메모리에서 직접 처리 할 수있게하여 처리 속도를 높입니다. 전용 서버에서 실제 메모리의 최대 80%정도가 버퍼 풀에 할당됩니다. 대량 읽기 조작의 효율성을 위해 버퍼 풀은 여러 행을 보유 할 수있는 페이지로 분할됩니다. 캐시 관리 효율성을 위해 버퍼 풀은 링크 된 페이지 목록으로 구현됩니다. 거의 사용되지 않는 데이터는 다양한 LRU 알고리즘을 사용하여 캐시에서 종료(혹은 만료:aged out)됩니다. 버퍼 풀을 활용하여 자주 액세스하는 데이터를 메모리에 유지하는 노하우(기술)는 MySQL 튜닝의 중요한 측면입니다. ▶ Buffer Pool LRU..
■ Shared and Exclusive LocksInnoDB는 공유 (S) 잠금과 배타적 (X) 잠금의 두 가지 유형의 잠금이있는 표준 행 수준 잠금을 구현합니다.+ 공유 (S) 잠금은 잠금을 보유한 트랜잭션이 행을 읽을 수 있도록합니다.+ 독점 (X) 잠금은 잠금을 보유한 트랜잭션이 행을 업데이트하거나 삭제할 수 있도록 합니다. 트랜잭션 T1이 행 r에 공유 (S) 잠금을 보유하는 경우, 행 r에 대한 잠금에 대한 일부 고유 트랜잭션 T2의 요청은 다음과 같이 처리됩니다.+ T2가 S 잠금 요청을 즉시 승인 할 수 있습니다. 결과적으로 T1과 T2는 모두 r에 S 잠금을 유지합니다.+ T2에서 X 잠금 요청을 즉시 승인 할 수 없습니다. 트랜잭션 T1이 행 r에서 배타적 (X) 잠금을 보유하는 경우,..
MySQL은 스토리지 엔진이라 불리는 플러그인 방식으로 데이터베이스를 관리합니다. 이 스토리지 엔진은 MyISAM, Memory, Aria등 여러가지가 있는데 각 스토리지 엔진 특성에 따라 관리하는 방법이 틀립니다. 그중에서도 가장 많이 쓰이는게 InnoDB라는 스토리지 엔진인데 굉장히 많은 기능들을 지원하고 있습니다. 이 InnoDB 스토리지 엔진에 대해서 알아보겠습니다. ■ InnoDB Storage Engine 소개 - DML 작업은 ACID 모델을 따르며 커밋, 롤백 및 응급 복구 기능을 갖춘 트랜잭션으로 사용자 데이터를 보호합니다. - Row-level 잠금 및 Oracle 스타일의 일관된 읽기는 다중 접속 및 사용자에게 동시성 및 성능을 향상시킵니다. - InnoDB 테이블은 기본 키를 기반으..
https://lalitvc.wordpress.com/2016/11/03/mysql-architecture-and-components/ 이 블로그 게시물은 새로운 MySQL 5.7 물리적, 논리적 아키텍처 및 구성 요소에 대한 것입니다.이 블로그 게시물에서는 다이어그램을 사용하여 MySQL의 데이터 처리 및 SQL 실행을 포함한 흐름에 대해 설명하려고합니다. 다른 데이터베이스와 달리 MySQL은 매우 유연하며 다양한 종류의 스토리지 엔진을 다양한 종류의 요구에 대한 플러그인으로 제공합니다. 이 때문에 스토리지 엔진의 사용에 따라 MySQL 아키텍처 및 동작도 변경됩니다 (예 : 트랜잭션 [InnoDB] 및 비 트랜잭션 [MyISAM] 엔진) 데이터 스토리지 및 SQL 실행 방법이 다르며 서버 내에서 엔진..
1. 문제점Centos 7 + apache 2.4.x + php 7.x + mysql 5.7.x 설치 도중 mysql 설치과정에서 아래와 같은 에러메시지를 발견하였습니다.-- Running cmake version 2.8.11-- Could NOT find Git (missing: GIT_EXECUTABLE)-- Configuring with MAX_INDEXES = 64U-- SIZEOF_VOIDP 8-- MySQL 5.7.11-- Packaging as: mysql-5.7.11-Linux-x86_64-- Looked for boost/version.hpp in and-- BOOST_INCLUDE_DIR BOOST_INCLUDE_DIR-NOTFOUND-- LOCAL_BOOST_DIR-- LOCAL_..
특정 시점 복구는 특정 시점 이후의 데이터 변경 사항까지 적용한 복구를 의미합니다. 일반적으로 이 유형의 복구는 전체 백업을 복원 한 후 백업 시점의 서버 상태로 복원 한 후에 수행됩니다. (7.2 절.“데이터베이스 백업 방법”에 나열된 것과 같은 여러 가지 방법으로 전체 백업을 수행 할 수 있습니다.) 특정 시점 복구는 전체 풀 백업 시간에서 가능한 한 최신 시점까지 시간을 적용하여 최근의 데이터베이스와 비슷하게 만드는 것입니다. 또는 특정 용도에 따라 원하는 시간까지만 복구할 수도 있습니다. 예를 들어 풀백업 이후 몇월 몇일 몇시까지의 특정 데이터베이스가 필요한경우 이 방법을 이용해서 특정 시간으로 복구를 할 수 있습니다. ■ 사전 지식사항여기에있는 몇몇 예제는 mysqlbinlog에 의해 생성 된 ..
■ mysqlimport 프로그램 소개커맨드 라인 인터페이스로 되어 있는 프로그램으로 LOAD Data SQL과 같은 방법으로 데이터를 테이블에 로드합니다. mysql 프로그램에서 사용되는 LOAD DATA문법이며 이 구문을 알고 있다면 좀더 손쉽게 사용할 수 있습니다. 이 LOAD DATA문은 이 블로그에서 별로 페이지로 제공하고 있습니다.참고 URL : https://myinfrabox.tistory.com/18?category=804726 mysqlimport프로그램을 사용하면서 자주 사용하는 옵션이 있다면 my.cnf안에 [client], [mysqlimport]란 그룹 옵션을 만들고 지원되는 옵션을 이 항목에 추가해서 사용할 수 있습니다. 이렇게 하면 터미널에서 실행할 때 추가 옵션을 굳이 기재..
■ GTID를 이용한 복제 설정. 여기에서는 처음으로 GTID를 이용하여 처음 설정하는 "콜드 스타트"방법입니다. 이 포스트를 통해서 복제를 어떻게 설정하고, 주의할점은 무엇인지 알아봅니다. ■ 서버준비 가능하면 같은 사양의 물리서버를 준비합니다. 그리고 같은 버전의 MySQL을 설치합니다. 여기에서는 5.7 위주로 설명을 합니다. 다음의 환경으로 설정되어 있다고 가정합니다. 서버 IP MySQL Version 마스터 192.168.0.101 5.7 슬레이브 192.168.0.102 5.7 ■ 파라미터 설정 마스터 슬레이브 서버 모두에 다음의 파라미터를 설정합니다. ▶ 서버별 설정할 파라미터 mysqld 섹션에 작성합니다. [mysqld] server-id=1 log-bin=binlog gtid-mode..
이 섹션에서는 GTID (Global Transaction Identifier)를 사용한 트랜잭션 기반 복제에 대해 설명합니다. GTID를 사용할 때 각 트랜잭션은 원래 서버에서 커밋되고 슬레이브에 의해 적용될때 식별되고 추적될 수 있습니다. 이는 새 슬레이브를 시작하거나 새 마스터로 Failover가 되었을때 GTID를 사용하여 해당 파일 내에서 로그 파일 또는 위치를 참조 하기 때문에 기존방법인 로그파일과 포지션을 찾아야 하는 작업을 크게 단순화합니다. GTID 기반 복제는 완전히 트랜잭션 기반이기 때문에 마스터와 슬레이브가 일치하는지 간단하게 판단 할 수 있습니다. 마스터에서 커밋된 모든 트랜잭션이 슬레이브에서도 커밋되는 경우 이 둘 사이의 일관성이 보장됩니다. GTID와 함께 Statement 기..
MySQL에서는 데이터 베이스 백업을 위한 여러가지 방법을 지원합니다. 그중에 가장 대표적인것이 mysqldump입니다. 사용법도 쉽고 지원되는 옵션도 많아서 원하는 방법으로 백업이 가능합니다. 참고로 백업도 권한이 있어야 수행할 수 있습니다. 아무나 데이터를 컨트롤 하면 안되기 때문입니다. 또한 덤프만큼 복원시 필요한 권한도 있습니다. 그래서 백업 및 복구 수행은 많은 권한이 필요합니다. 그래서 별도로 백업 전용 계정을 만들어 사용하기도 합니다.참고로 MySQL에서는 백업이라는 용어보단 덤프란 용어를 더 많이 씁니다. 개념은 같지만 약간의 미묘한 차이가 있습니다. 그래서 지금부터는 백업이라는 용어보다 덤프라는 용어로 사용하겠습니다. ■ mysqldump 소개MySQL에서 제공하는 대표적인 덤프 프로그..