“한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.”
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 입문/기초 사용자를 대상으로 운영까지 넓은 범위를 훑기에 적합