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 제품 환경의 MySQLChapter 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 충돌 원인 분석