러닝 MySQL 리뷰

“한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.”

러닝 MySQL, 한빛출판네트워크

1. Intro

DBMS의 기본, MySQL

DB는 개발자만의 전유물이 아니다. AI/ML/BigData등의 키워드들이 등장하고, 개발자 뿐만 아니라 data science 분야도 성장하며 데이터 관리가 중요해졌다.

DB쪽을 공부하다보면, 분산/시계열Database 또는 NoSQL database등 다양한 데이터베이스를 접할 수 있다. 각 목적성이 뚜렷하고, 해당 상황에서는 적절하나, 제일 기본적인 DataBase Management System을 꼽으라면 역시 MySQL을 꼽을 수 있겠다.

이 책은 그러한 MySQL에 대해, 처음 입문하거나/더많은기술을 익히거나/다른 DB시스템을 사용하다 넘어오는 사람에게 적합한 책이다.


2. 책 구성

이 책은 기본 설치/ DB설계 / DB운영(백업 및 복원, 성능 분석 및 모니터링)등 포괄적인 영역을 다룬다.

자세한 책의 목차는 아래와 같고, 중간 중간 실습코드는 아래의 github에서 받을 수 있다.

https://github.com/learning-mysql-2nd/learning-mysql-2nd

책 목차

PART I MySQL 시작

 

Chapter 1 MySQL 설치

_1.1 MySQL의 포크 버전

__1.1.1 MySQL 커뮤니티 에디션

__1.1.2 MySQL 퍼코나 서버

__1.1.3 MySQL 엔터프라이즈 에디션

_1.2 설치할 플랫폼과 버전 선택

__1.2.1 1단계: 배포판 다운로드

__1.2.2 2단계: 배포 버전 설치

__1.2.3 3단계: 설치 후 필수 설정 작업

__1.2.4 4단계: 성능 측정

_1.3 리눅스에 MySQL 설치

__1.3.1 CentOS 7에 MySQL 설치

__1.3.2 록키 리눅스 9에 MySQL 설치

__1.3.3 우분투 22.04 LTS(재미 젤리피시)에 MySQL 설치

_1.4 맥OS Ventura에 MySQL 설치

__1.4.1 MySQL 8.0 설치

_1.5 윈도우11에 MySQL 설치

_1.6 MySQL 폴더 구성

__1.6.1 MySQL 5.7 기본 파일

__1.6.2 MySQL 8.0 기본 파일

_1.7 명령줄 인터페이스 사용법

_1.8 도커

__1.8.1 도커 설치

_1.9 샌드박스 사용법

__1.9.1 DBdeployer 설치

__1.9.2 DBdeployer 사용

_1.10 MySQL 서버 업그레이드

 

PART II MySQL 사용법



Chapter 2 데이터베이스 모델링과 설계

_2.1 데이터베이스 개발 실패 사례

_2.2 데이터베이스 설계 과정

_2.3 관계형 엔티티 모델

__2.3.1 엔티티 표현 방법

__2.3.2 관계 표현

__2.3.3 부분 참여와 전체 참여

__2.3.4 엔티티 또는 속성

__2.3.5 엔티티 또는 관계

__2.3.6 중간 엔티티

__2.3.7 약한 엔티티와 강한 엔티티

_2.4 데이터베이스 정규화

_2.5 예시 테이블 정규화

__2.5.1 제1정규형: 반복 그룹 제거

__2.5.2 제2정규형: 중복 데이터 제거

__2.5.3 제3정규형: 키에 종속하지 않는 데이터 제거

_2.6 엔티티 관계 설계 예시

_2.7 엔티티 관계 모델 사용

__2.7.1 데이터베이스 테이블에 엔티티 및 관계 연결

__2.7.2 은행 데이터베이스 ER 모델 생성

__2.7.3 Workbench를 사용한 EER - MySQL 데이터베이스 변환

 

Chapter 3 기본 SQL

_3.1 sakila 데이터베이스 사용

_3.2 SELECT 문 및 기본 쿼리 기술

__3.2.1 단일 테이블 SELECT

__3.2.2 열 선택

__3.2.3 WHERE 절로 행 선택

__3.2.4 ORDER BY 절

__3.2.5 LIMIT 절

__3.2.6 조인을 사용한 두 테이블의 결합

_3.3 INSERT 문

__3.3.1 INSERT 기본 사용법

__3.3.2 대체 구문

_3.4 DELETE 문

__3.4.1 DELETE 기본 사용법

__3.4.2 WHERE, ORDER BY, LIMIT 사용

__3.4.3 TRUNCATE로 모든 행 삭제

_3.5 UPDATE 문

__3.5.1 UPDATE 기본 사용법

__3.5.2 WHERE, ORDER BY, LIMIT 사용

_3.6 SHOW와 mysqlshow로 데이터베이스와 테이블 탐색

 

Chapter 4 데이터베이스 구성 작업

_4.1 데이터베이스 생성 및 사용

_4.2 테이블 생성

__4.2.1 기본

__4.2.2 데이터 정렬 방식과 문자 집합

__4.2.3 테이블 생성 시 유용한 기타 기능

__4.2.4 열에 사용할 수 있는 타입

__4.2.5 키와 인덱스

__4.2.6 AUTO_INCREMENT 기능

_4.3 구조 변경

__4.3.1 열 추가, 제거, 변경

__4.3.2 인덱스 추가, 제거, 변경

__4.3.3 테이블 이름 변경 및 기타 구조 변경

_4.4 구조 제거

__4.4.1 데이터베이스 제거

__4.4.2 테이블 제거

 

Chapter 5 고급 쿼리

_5.1 별칭

__5.1.1 열 별칭

__5.1.2 테이블 별칭

_5.2 데이터 집계

__5.2.1 DISTINCT 절

__5.2.2 GROUP BY 절

__5.2.3 HAVING 절

_5.3 고급 조인

__5.3.1 내부 조인

__5.3.2 통합

__5.3.3 왼쪽 조인과 오른쪽 조인

__5.3.4 자연 조인

__5.3.5 조인의 상수 표현식

_5.4 중첩 쿼리

__5.4.1 중첩 쿼리 기초

__5.4.2 ANY, SOME, ALL, IN, NOT IN 절

__5.4.3 EXISTS와 NOT EXISTS 절

__5.4.4 FROM 절에서의 중첩 쿼리

__5.4.5 JOIN에서의 중첩 쿼리

_5.5 사용자 변수

 

PART III 제품 환경의 MySQL



Chapter 6 트랜잭션 및 잠금

_6.1 격리 수준

__6.1.1 REPEATABLE READ

__6.1.2 READ COMMITTED

__6.1.3 READ UNCOMMITTED

__6.1.4 SERIALIZABLE

_6.2 잠금

__6.2.1 메타데이터 잠금

__6.2.2 행 잠금

__6.2.3 교착 상태

_6.3 격리 및 잠금과 관련된 MySQL 매개변수

 

Chapter 7 MySQL 추가 활용법

_7.1 쿼리를 사용한 데이터 입력

_7.2 쉼표로 구분된 파일(CSV)에서 데이터 로드

_7.3 쉼표로 구분된 파일에 데이터 입력

_7.4 쿼리를 사용한 테이블 생성

_7.5 여러 테이블에서 업데이트 및 삭제 수행

__7.5.1 삭제

__7.5.2 업데이트

_7.6 데이터 변경

_7.7 EXPLAIN 문

_7.8 대체 스토리지 엔진

__7.8.1 InnoDB

__7.8.2 MyISAM과 Aria

__7.8.3 MyRocks와 TokuDB

__7.8.4 기타 테이블 유형

 

Chapter 8 사용자 및 권한 관리

_8.1 사용자 및 권한 이해

_8.2 루트 사용자

_8.3 새로운 사용자 생성 및 사용

_8.4 권한 부여 테이블

_8.5 사용자 관리 명령 및 로그 기록

_8.6 사용자 수정 및 제거

__8.6.1 사용자 수정

__8.6.2 사용자 제거

_8.7 권한

__8.7.1 정적 권한 대 동적 권한

__8.7.2 SUPER 권한

__8.7.3 권한 관리 명령

__8.7.4 권한 확인

__8.7.5 GRANT OPTION 권한

_8.8 역할

_8.9 루트 비밀번호 변경 및 비보안적 실행

_8.10 보안 설정을 위한 방법

 

Chapter 9 옵션 파일 사용법

_9.1 옵션 파일의 구조

_9.2 옵션 범위

_9.3 옵션 파일 검색 순서

_9.4 특수 옵션 파일

__9.4.1 로그인 경로 구성 파일

__9.4.2 영구 시스템 변수 구성 파일

_9.5 유효한 옵션 결정

 

Chapter 10 백업 및 복구

_10.1 물리적 및 논리적 백업

__10.1.1 논리적 백업

__10.1.2 물리적 백업

__10.1.3 논리적 및 물리적 백업 개요

_10.2 백업 도구로 복제

__10.2.1 인프라 장애

__10.2.2 배포 버그

_10.3 mysqldump 프로그램

__10.3.1 mysqldump를 사용한 부트스트랩 복제

_10.4 SQL 덤프 파일에서 데이터 로드

_10.5 mysqlpump

_10.6 mydumper와 myloader

_10.7 콜드 백업 및 파일 시스템 스냅샷

_10.8 XtraBackup

__10.8.1 백업 및 복구

__10.8.2 고급 기능

__10.8.3 XtraBackup을 사용한 증분 백업

_10.9 기타 물리적 백업 도구

__10.9.1 MySQL 엔터프라이즈 백업

__10.9.2 mariabackup

_10.10 특정 시점 복구

__10.10.1 바이너리 로그에 대한 기술적 배경

__10.10.2 바이너리 로그 보존

__10.10.3 PITR 대상 구별

__10.10.4 특정 시점 복구: XtraBackup

__10.10.5 특정 시점 복구: mysqldump

_10.11 InnoDB 테이블스페이스 내보내기 및 가져오기

__10.11.1 기술적 배경

__10.11.2 테이블스페이스 내보내기

__10.11.3 테이블스페이스 가져오기

__10.11.4 XtraBackup 단일 테이블 복원

_10.12 백업 테스트 및 확인

_10.13 데이터베이스 백업 전략 입문서

 

Chapter 11 서버 구성 및 튜닝

_11.1 MySQL 서버 데몬

_11.2 MySQL 서버 변수

__11.2.1 서버 설정 확인

__11.2.2 모범 사례

 

PART IV 기타



Chapter 12 MySQL 서버 모니터링

_12.1 운영체제 지표

__12.1.1 CPU

__12.1.2 디스크

__12.1.3 메모리

__12.1.4 네트워크

_12.2 MySQL 서버 살펴보기

__12.2.1 상태 변수

__12.2.2 기본 모니터링 조합

__12.2.3 느린 쿼리 로그

__12.2.4 InnoDB 엔진 상태 보고서

_12.3 조사 방법

__12.3.1 USE 방법

__12.3.2 RED 방법

_12.4 MySQL 모니터링 도구

_12.5 사고/진단 및 수동 데이터 수집

__12.5.1 시스템 상태 변수 값의 주기적 수집

__12.5.2 pt-stalk를 사용한 MySQL 및 OS 지표 수집

__12.5.3 확장된 수동 데이터 수집

 

Chapter 13 고가용성

_13.1 비동기 복제

__13.1.1 소스 및 복제본에 설정할 기본 매개변수

__13.1.2 XtraBackup을 사용한 복제본 생성

__13.1.3 복제 플러그인을 사용한 복제본 생성

__13.1.4 mysqldump를 사용한 복제본 생성

__13.1.5 mydumper 및 myloader를 사용해 복제본 생성

__13.1.6 그룹 복제

_13.2 동기 복제

__13.2.1 Galera/PXC 클러스터

 

Chapter 14 클라우드 MySQL

_14.1 Database-as-a-Service(DBaaS)

__14.1.1 MySQL/MariaDB용 아마존 RDS

__14.1.2 MySQL용 구글 클라우드 SQL

__14.1.3 애저 SQL

_14.2 아마존 오로라

_14.3 MySQL 클라우드 인스턴스

_14.4 쿠버네티스에서 MySQL 사용

__14.4.1 쿠버네티스에 XtraDB 클러스터 배포

 

Chapter 15 MySQL 로드 밸런싱

_15.1 애플리케이션 드라이버를 사용한 부하 분산

_15.2 ProxySQL 로드 밸런서

__15.2.1 ProxySQL 설치 및 구성

_15.3 HAProxy 로드 밸런서

__15.3.1 HAProxy 설치 및 구성

_15.4 MySQL 라우터

 

Chapter 16 기타 주제

_16.1 MySQL 셸

__16.1.1 MySQL 셸 설치

__16.1.2 MySQL 셸을 사용해 샌드박스 InnoDB 클러스터 배포

__16.1.3 MySQL 셸 유틸리티

_16.2 Flame 그래프

_16.3 소스를 사용한 MySQL 빌드

__16.3.1 우분투 22.04 LTS(재미 젤리피시) 및 ARM 프로세서용 MySQL 구축

_16.4 MySQL 충돌 원인 분석

3. 이 책의 장점

3.1. 여러 환경에 대한 대응

같은 MySQL이더라도, 사용자별로 사용환경은 다를 수 있다. 일부 책에서는 Windows/Mac/Linux 중 특정 환경에서의 구성과 사용을 다뤄서 공부환경이랑 실제 환경이 달라서 적용에 종종 어려움을 겪기도 했다.

이 책의 경우 앞서 말한 3개의 시스템외에도 Docker, DBdeployer 와 같은 도구를 사용한 배포/클라우드환경에서의 배포등 다양한 상황에 대해 구성 및 사용법이 설명되어 있다.

3.2. 운영 환경에 대한 자세한 설명

이 책은 총 4개의 파트 – MySQL 시작, MySQL 사용법, 제품환경의 MySQL(=프로덕션?), 기타(모니터링,고가용성,클라우드,로드밸런싱) 로 구성되어있다.

다른책에 비해 좀더 관심갖고 본 부분은 뒤의 2개 부분, 프로덕션 환경의 MySQL과 안정적인 운영환경 구성(기타라고 퉁친것은 조금 아쉬웠음)이였다. 실제 운영환경 까지고려했을때 필요한 부분까지 들어가있다는 느낌을 받았다.


4. Outro

총평: MySQL 입문/기초 사용자를 대상으로 운영까지 넓은 범위를 훑기에 적합

Leave a Reply