Database/Mysql 46

[Real MySQL] 17-3. InnoDB 클러스터: MySQL

백은빈, 이성욱 님의 "Real MySQL" 책을 정리한 포스팅 입니다. 1. MySQL 셸고급 클라이언트 툴 다양한 언어 모드 지원mysqlsh> \pymysqlsh> \sqlmysqlsh> \js  APIX DevAPIX 프로토콜을 사용해 MySQL 서버에서 관계형 데이터와 문서 기반 데이터를 처리할 수 있음  Admin APIInnoDB 클러스터 및 InnoDB 레플리카 셋 구축 지원 글로벌 객체session셸에서 MySQL 서버에 연결했을 때 생성된 세션에 매핑되는 객체세션 단위에서 사용할 수 있는 기능 제공 dbaAdmin API 사용 시 쓰이는 객체 clusterInnoDB 클러스터에 매핑되는 객체클러스터 제어 기능 제공 rsInnoDB 레플리카 셋에 매핑되는 객체레플리카셋 제어 기능 제공 d..

Database/Mysql 2024.09.07

[Real MySQL] 17-2. InnoDB 클러스터: 그룹 복제

백은빈, 이성욱 님의 "Real MySQL" 책을 정리한 포스팅 입니다. 1. 그룹 복제바이너리 로그내부적으로 Row 포맷의 바이너리 로그와 릴레이로그, GTID를 사용함 클러스터 형태복제에 참여하는 MySQL 서버들이 하나의 복제그룹으로 묶인 클러스터 형태를 가짐그룹 내 서버들은 서로 통신하면서 양방향으로도 복제를 처리할 수 있음즉, 하나의 복제 그룹 내에서 쓰기를 처리하는 서버가 여러 대 존재할 수 있음기존 복제의 경우 소스-레플리카 형태로 구성되어 단방향으로만 복제가 이루어졌음프라이머리-세컨더리라는 용어로 그룹 멤버(서버)를 표현함 반동기 방식한 서버에서 트랜잭션이 커밋 준비 완료 그룹 멤버 간 합의트랜잭션 정보를 그룹의 다른 멤버들에게 전송과반수 이상의 멤버로부터 응답을 전달받으면 통과만약 과반수..

Database/Mysql 2024.09.07

[Real MySQL] 17-1. InnoDB 클러스터: 아키텍처

백은빈, 이성욱 님의 "Real MySQL" 책을 정리한 포스팅 입니다. 1. InnoDB 클러스터복제 기능을 통해 고가용성을 확보할 수 있으나, 단순한 문제는 아님소스 서버에 장애가 발생할 때, failover 작업을 수동으로 수행해야 함 (레플리카 서버 승격)레플리카 서버의 읽기 모드 해제소스 서버에서 데이터 변경 수행 비활성화 (스플릿 브레인 현상 방지)애플리케이션 서버는 커넥션 설정을 해야 함 (새로운 소스 서버를 바라보도록)failover 작업을 자동화하기 위해 HA 솔루션을 사용함사용 환경에 맞게 수정하는 작업이 필요 (지속적인 유지보수 및 관리가 필요함)ex) MMM, MHA, OrchestratorMySQL에서 빌트인 형태의 HA 솔루션인 InnoDB 클러스터가 도입됨  (5.7.17~)즉..

Database/Mysql 2024.09.07

[Real MySQL] 16-5. 복제: 복제 토폴로지

백은빈, 이성욱 님의 "Real MySQL" 책을 정리한 포스팅 입니다. 1. 싱글 레플리카하나의 소스 서버에 하나의 레플리카 서버만 연결됨가장 기본적인 형태 데이터 분석용예비용 2. 멀티 레플리카하나의 소스 서버에 2개 이상의 레플리카 서버를 연결싱글 레플리카를 사용하다가 트래픽이 많아질 경우 사용함 트래픽 대응클라이언트는 읽기 요청이 많으므로 읽기 요청 처리를 분산시키기 데이터 분석용클라이언트 요청이 아닌 용도(AI, 배치, 통계 등)의 전용으로 쓰는 방법 예비용 (1대 필수)예기치못한 예외로 인해 서버가 다운될 경우, 예비용이 대기하고 있어야 안정적으로 요청을 원활하게 처리할 수 있음소스 서버 or 레플리카 서버의 예비용으로 활용될 수 있음 3. 체인사용 목적멀티 레플리카 복제 구성에서 레플리카 서..

Database/Mysql 2024.09.07

[Real MySQL] 16-4. 복제: 동기화 방식

백은빈, 이성욱 님의 "Real MySQL" 책을 정리한 포스팅 입니다. 1. Asynchronous Replication소스 서버가 레플리카 서버에서 변경 이벤트가 정상적으로 전달되어 적용되었는지 확인하지 않음 장점빠른 성능레플리카 서버의 문제가 전파되지 않음 단점동기화 여부 보장 X소스 서버에 장애가 발생하면 최근 트랜잭션이 레플리카 서버에 전송되지 않을 수 있음레플리카 서버가 승격될 경우, 누락된 트랜잭션이 있는지 수동으로 확인해야 함 2. Semi-Synchronous Replication비동기 방식에서 좀 더 향상된 데이터 무결성을 제공하는 방식소스 서버는 레플리카 서버로부터 응답을 받아야 트랜잭션을 완전히 커밋시킴레플리카는 릴레이 로그 커밋이 성공하면 ACK 응답을 보냄네트워크 통신이 추가적으..

Database/Mysql 2024.09.07

[Real MySQL] 16-3. 복제: 데이터 포맷

백은빈, 이성욱 님의 "Real MySQL" 책을 정리한 포스팅 입니다. 이벤트들이 바이너리 로그에 어떤 형태로 저장되는지에 대한 구분 1. Statement 기반 바이너리 로그 포맷이벤트를 발생시킨 SQL문을 바이너리 로그에 기록하는 방식 장점저장 공간 용량에 대한 부담이 적어짐백업 및 복제 작업이 빠르게 처리됨 단점비확정적인 쿼리 사용시, 동기화가 정확히 이루어지지 않을 수 있음RAND(), VERSION()SELECT FOR UPDATE / SHARE에서 NOWAIT이나 SKIP LOCKED 옵션 사용사용자 정의 함수 or 스토어드 프로시저 사용데이터에 락을 많이 검풀 테이블 스캔이 발생할 가능성 있음트랜잭션 격리 수준이 "READABLE-READ" 이상이어야 함 2. Row 기반 바이너리 로그 포..

Database/Mysql 2024.09.07

[Real MySQL] 16-1. 복제: 아키텍처

백은빈, 이성욱 님의 "Real MySQL" 책을 정리한 포스팅 입니다. 데이터베이스를 운영할 때, 가장 필요한 두가지는 확장성과 가용성복제는 이 두요소를 위해 사용되는 기술 1. 복제한 서버에서 다른 서버로 동기화되는 것 Source Server원본 데이터를 가진 서버변경이 최초로 이루어짐 (데이터 및 스키마) Replica Server소스 서버로부터 변경 내역을 전달받는 서버소스 서버 동기화소스 서버로부터 데이터를 전달받아 자신의 리포지토리에 반영 목적scale-out트래픽 대응 목적scale-up보다 훨씬 더 유연한 구조 backup데이터 정합성이 깨질 경우백업 서버의 데이터로 사용함메인 서버가 터질 경우지리적으로 분산된 백업 서버가 메인 서버의 역할을 대신함 데이터 분석용데이터 분석은 리소스 소모..

Database/Mysql 2024.09.07

[Real MySQL] 8-1. 인덱스: Disk

백은빈, 이성욱 님의 "Real MySQL" 책을 정리한 포스팅 입니다. 1. HDD (Hard Disk Drive)플래터 (디스크)데이터 보관플래터 위를 헤드가 이동하면서 데이터 읽고 씀기계적인 작동 원리를 기반으로 하기 때문에 속도가 상대적으로 느림 인터페이스SATA(소비자용)SAS(고성능) 2. SSD (Solid State Drive)반도체기계식 플래터에 비해 훨씬 빠릅니다. (기계식으로 플래터를 회전시킬 필요 없음)소음 X 플래시 메모리 (NAND)비휘발성내구성: 기계적인 부품이 없으므로 물리적 충격에 강하고 내구성이 뛰어남

Database/Mysql 2024.09.07

[Real MySQL] 8-7. 인덱스: 멀티 밸류 인덱스

백은빈, 이성욱 님의 "Real MySQL" 책을 정리한 포스팅 입니다. 1. 멀티 밸류 인덱스하나의 데이터 레코드가 여러 개의 키 값을 가질 수 있는 형태의 인덱스JSON 배열과 같은 비정형 데이터에서 원소별 인덱싱이 필요할 때 사용됨 특징인덱스 내에서 하나의 레코드가 여러 개의 엔트리를 가질 수 있음JSON 필드에 저장된 배열 원소들에 대한 인덱싱을 위해 설계됨배열을 가진 모든 레코드에 대해 다수의 인덱스 엔트리가 생성되므로, 인덱스 크기가 커질 수 있음 예시CREATE TABLE orders ( id INT PRIMARY KEY AUTO_INCREMENT, items JSON, INDEX idx_items ((CAST(items->'$[*]' AS UNSIGNED ARRAY))));..

Database/Mysql 2024.09.07

[Real MySQL] 8-6. 인덱스: 함수 기반 인덱스

백은빈, 이성욱 님의 "Real MySQL" 책을 정리한 포스팅 입니다. 1. 함수 기반 인덱스칼럼의 값을 변형해서 만들어진 값에 대해 구축된 인덱스계산 과정의 차이만 있을 뿐 내부 구조 및 유지관리 방법은 B-Tree 인덱스와 동일 가상 칼럼을 이용한 구현현재 존재하는 컬럼을 사용하여 가상 컬럼 및 인덱스 생성 가능단, 테이블의 구조가 변경됨ALTER TABLE user ADD full_name VARCHAR(30) AS (CONCAT(first_name, ' ', last_name)) VIRTUAL, ADD INDEX ix_fullname (full_name); 함수를 이용한 구현함수를 직접사용하는 인덱스테이블의 구조를 변경하지 않음CREATE TABLE user ( first_name VA..

Database/Mysql 2024.09.07