MySQL로 데이터베이스를 효과적으로 구성하고 운영하는 방법을 배워봅시다. 이 책은 최신 버전인 MySQL 8.0(MySQL 5.7 정보 포함)을 바탕으로 강력한 RDBMS를 최대한 활용하는 데 필요한 인사이트와 도구를 소개합니다. 또한 데이터베이스를 구성하고 관리하는 모든 이가 MySQL을 쉽게 활용하도록 다양한 실습을 제공합니다.
전 세계의 많은 고객과 협업하며 다양한 사용 사례를 경험한 저자들이 개발자와 DBA가 비용을 최소화하고 가용성과 성능을 극대화하는 방법을 안내합니다. 데이터베이스의 기본 개념부터 고급 쿼리 작성, 모니터링, 오류 해결, 데이터베이스 관리 및 보안, 백업 및 복구, 효율성 향상을 위한 튜닝 방법에 이르기까지 MySQL에 관한 모든 것을 만나보세요.
Contents
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 충돌 원인 분석
Author
비니시우스 그리파,세르게이 쿠즈미체프,김선종
퍼코나의 선임 지원 엔지니어이자 오라클 에이스 어소시에이트다. 비니시우스는 컴퓨터 공학 학사 학위를 받고 13년 동안 데이터베이스 관련 일에 종사했다. 기업의 주요 애플리케이션을 위한 데이터베이스를 설계한 경력이 있으며, 수년간 MySQL 및 MongoDB 에코시스템의 전문가로 활약했다. 지원팀에서 근무하면서 다양한 시나리오와 복잡성을 지닌 수백 가지의 다양한 사례로 퍼코나의 고객사를 지원했다. 또 유럽과 아시아, 북미, 남미 등에서 열리는 콘퍼런스에 발표자로 참여하는 등 OS 커뮤니티에서 활발히 활동하고 있다.
퍼코나의 선임 지원 엔지니어이자 오라클 에이스 어소시에이트다. 비니시우스는 컴퓨터 공학 학사 학위를 받고 13년 동안 데이터베이스 관련 일에 종사했다. 기업의 주요 애플리케이션을 위한 데이터베이스를 설계한 경력이 있으며, 수년간 MySQL 및 MongoDB 에코시스템의 전문가로 활약했다. 지원팀에서 근무하면서 다양한 시나리오와 복잡성을 지닌 수백 가지의 다양한 사례로 퍼코나의 고객사를 지원했다. 또 유럽과 아시아, 북미, 남미 등에서 열리는 콘퍼런스에 발표자로 참여하는 등 OS 커뮤니티에서 활발히 활동하고 있다.