본문 바로가기
데이터베이스

[RealMySQL 8.0] 1장. 소개, 2장. 설치와 설정

by 판교가고싶어요 2024. 12. 10.

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 에 저장된다.