1.1 MySQL 소개
- MySQL이 오픈소스인 것은 여러 회사에서 MySQL이 사용되는 중요한 이유이다.
- 그러나, MySQL이 처음부터 오픈소스였던 것은 아니다. 약 45년전인 1979년 Tcx 사의 사내 터미널 인터페이스에서부터 시작해 사내 데이터베이스로 변모 과정을 거쳐 1996년 사외에 공개됐다.
- MySQL은 오픈소스이나, 무제한적으로 사용할 수 있는 것은 아니다. 두 가지 라이센스 정책이 있다.
- MySQL 커뮤니티 에디션은 별도의 라이선스 계약 없이 사용할 수 있다. 소스코드도 공개된다.
- MySQL 엔터프라이즈 에디션은 커뮤니티 에디션에 스레드풀 등 추가 기능을 덧붙인 에디션이다. 오라클과 사용 계약을 맺고 사용해야하며, 소스코드는 공개되지 않는다.
- MySQL은 5.7 버전까지는 성능 개선이 주를 이뤘으나, MySQL 8.0 버전부터는 상용 DBMS 기능도 추가됐다.
1.2 왜 MySQL 인가?
- 오픈소스이므로 도입비용이 적다.
- 성능 및 안정성도 검증됐다.
- 유명해서 사람 구하기도 쉽다.
2.1 MySQL 서버 설치
- 운영체제별 인스톨러를 사용하기를 권장한다. 아래는 기타 방법이다.
- Tar or Zip으로 압축된 버전
- 소스코드 빌드
- 버전과 에디션의 선택
- 데이터베이스는 안정성이 중요하다. 패치 버전이 15 ~ 20번 릴리스된 버전을 선택하자.
- 커뮤니티와 엔터프라이즈 에디션은 핵심기능은 동일하다.
- 저자는 Percona 플러그인을 사용하면 엔터프라이즈 에디션의 필요성을 크게 느끼지 못했다고 한다.
- 스레드풀, 감사, 기술 지원 등이 필요한지 검토해보고, 필요성에 따라 커뮤니티 에디션 혹은 엔터프라이즈 에디션을 선택하자.
2.2 MySQL 서버의 시작과 종료
- MySQL 서버 실행
- mysqld 실행 시 initialize-insecure 옵션이 설정되어 있을 경우 비밀번호가 없는 root 계정을, 그렇지 않을 경우 에러 로그 파일인 /var/log/mysqld.log에 비밀번호가 남는다.
- systemctl start mysqld 로 mysql 서버를 실행한다.
- systemctl stop mysqld 로 mysql 서버를 멈춘다.
- 원격으로 mysql에 접속해 권한이 있을 경우, SHUTDOWN; 명령어로 종료할 수 있다.
- innodb_fast_shutdown 글로벌 옵션을 0으로 설정하면 graceful하게 종료할 수 있다. 이를 클린 셧다운이라고 한다.
- 실행 시 host 옵션을 localhost로 할 경우 unix socket 을, 127.0.0.1 로 할 경우 tcp를 사용한다.
- MySQL 서버 업그레이드
- 인플레이스 업그레이드는 데이터 파일을 그대로 두고 MySQL 서버를 업그레이드 하는 방법이다.
- 메이저 버전 간 업그레이드는 호환성을 위해 바로 직전 버전에서만 업그레이드가 가능하다.
- 8.0 으로 업그레이드 할 때는 데이터 타입 호환성 체크, 인덱스 힌트 성능 테스트 등이 필요하다.
- 업그레이드 방법은 매뉴얼을 정독하고 실행하자.
- 서버 설정
- MySQL은 한가지의 설정 파일만 사용한다. 파일 이름은 my.cnf이다.
- /etc/my.cnf, /etc/mysql/my.cnf, /usr/etc/my.cnf, ~/.my.cnf 파일 순으로 탐색한다.
- 주로 첫번째와 두번째를 사용한다.
- 설정 파일은 mysql 클라이언트, 서버, 유틸 등 다양한 프로그램을 위한 설정을 하나의 파일에 그룹으로 관리할 수 있다.
- MySQL 시스템 변수는 SHOW VARIABLES 또는 SHOW GLOBAL VARIABLES로 확인할 수 있으며, 서버 전체에 적용되는 글로벌 변수와 세션에 적용되는 세션 변수로 구분된다.
- 글로벌이자 세션 스코프인 변수는 세션이 시작될 때 사용되는 기본 값을 지정한다.
- 정적 변수는 서버가 시작하면 변경할 수 없는 값, 동적 변수는 변경할 수 있는 값이다.
- SET PERSIST 명령으로 변경한 동적 변수를 영속화할 수 있으나, my.cnf가 아닌 mysqld-auto.cnf 에 저장된다.
'데이터베이스' 카테고리의 다른 글
[RealMySQL 8.0] 4장 아키텍처 (0) | 2024.12.16 |
---|---|
[RealMySQL 8.0] 3장 사용자 및 권한 (0) | 2024.12.14 |
CAP 이론 소개 - 데이터베이스 초보자용 (2) | 2022.03.26 |
Shared Lock 과 Exclusive Lock (0) | 2021.12.05 |
Join 쿼리를 어떻게 최적화할까 (0) | 2021.03.10 |