군만두의 IT 공부 일지

[스터디] 01. 소개 및 02. MySQL 설치와 설정 본문

학습일지/데이터베이스

[스터디] 01. 소개 및 02. MySQL 설치와 설정

mandus 2024. 7. 18. 11:13

 

 

 

 

 

  제목: Real MySQL 8.0 (1권)

  저자: 백은빈, 이성욱

  출판사: 위키북스

  가격: 30,000원

 

 

개발자와 DBA를 위한 MySQL 실전 가이드

 

 

 

패스트캠퍼스 백엔드 부트캠프 수강생 분들 4명과 함께 MySQL에 대한 깊이 있는 공부를 하고자 책을 선정하고 학습하려고 합니다. 앞으로는 각 챕터별 주요 내용과 이해한 내용 및 참고자료, 실습 및 연습 문제 등에 대해서 작성할 예정입니다.

01. 소개

  • MySQL의 라이선스 정책
    • MySQL 엔터프라이즈 에디션 → 상용 버전 
    • MySQL 커뮤니티 에디션 → 별도의 계약 없이 사용 가능
  • MySQL의 강점
    • 저비용
    • 대규모 데이터 처리
    • 오픈 소스
  • DBMS 선택 기준
    • 안정성
    • 성능과 기능
    • 커뮤니티나 인지도

아래 사진은 DB-Engines.com에서 제공하는 2024년까지의 DBMS 인기 그래프입니다. Oracle과 MySQL이 최상위권에 위치해 있습니다.

▲ DB-Engines Ranking - Trend Popularity

02. 설치와 설정

2.1 MySQL 서버 설치

1. 리눅스 서버

 

▲ MySQL Yum Repository

▲ MySQL Community Server

 

2. macOS용

 

  • 삭제하면 안 되는 디렉터리
    • bin: MySQL 서버와 클라이언트 프로그램, 유틸리티
    • data: 로그 파일과 데이터 파일
    • include: C/C++ 헤더 파일
    • lib: 라이브러리 파일
    • share: 다양한 지원 파일, 에러 메시지나 샘플 설정 파일(my.cnf)

 

3.  window용

 

1. Go to Download Page 클릭

 

2. Download 클릭
3. No thanks, just start my download 클릭

 

버전은 본인에게 필요한 것으로 적절히 선택합니다. 위 과정대로 진행했다면, 다운로드 디렉터리에서 인스톨러를 실행합니다.

4. 다운로드 디렉터리 내 msi 파일 클릭

 

저는 MySQL이 이미 설치되어 있기 때문에 아래 사진처럼 나타납니다.

5. mysql-installer-web-community-8.0.38.0.msi 실행

 

그리고 테스트용 서버의 경우 아래의 순서로 진행하면 됩니다.

 

6. (설치 유형) Custom 선택

 

7. (설치 소프트웨어) 필요한 소프트웨어(MySQL 서버, MySQL Shell, MySQL Router) 선택

 

8. (고가용성 옵션) Standalone MySQL Server / Classic MySQL Replication 옵션 선택

 

9. (네트워크 옵션) Development Computer 선택

 

10. (비밀번호 인증 방법) Legacy Authentication method 선택

 

11. (관리자 계정 비밀번호) 비밀번호 입력

 

12. 설정 내용 적용

2.2 MySQL 서버의 시작과 종료(Linux)

  • 설정 파일 및 데이터 파일 준비
    • MySQL 서버 설치 후 서비스용으로 운영하려면 /etc/my.cnf(윈도우의 경우 my.ini) 설정 파일 필요
    • 비밀번호가 없는 관리자 계정은 --initialize-insecure 옵션, 비밀번호가 있는 관리자 계정은 --initialize 옵션 사용
  • MySQL 시작과 종료
    • 유닉스 계열 운영체제(RPM 패키지): 자동으로 /usr/lib/systemd/system/mysqld.service 파일 생성, systemctl 유틸리티 이용
    • 윈도우: 설치 중 선택사항으로 등록
    • 클린 셧다운: 모든 커밋된 데이터를 데이터 파일에 적용하고 종료하는 것
linux> systemctl start mysqld
linux> systemctl stop mysqld
  • 서버 연결 테스트
    1. MySQL 소켓 파일을 이용해 접속
    2. TCP/IP를 통해 127.0.0.1(로컬 호스트)로 접속
    3. MySQL 서버 설정 파일에서 기본값으로 소켓 파일을 이용해 접속
linux> mysql -uroot -p --host=localhost --socket=/tmp/mysql.sock
linux> mysql -uroot -p --host=127.0.0.1 --port=3306
linux> mysql -uroot -p

 

윈도우의 경우에는 아래 사진처럼 Command Line Client에서 비밀번호만 입력해도 연결이 됩니다. MySQL 서버에 접속되었다면 마지막 줄에 'mysql>'이 표시됩니다.

▲ MySQL 8.0 Command Line Client

  • MySQL 서버 접속 가능 여부 확인
    1. telent
    2. nc(Netcat)
linux> telnet 127.0.0.1 2206
linux> nc 127.0.0.1 3306

2.3 MySQL 서버 업그레이드

  • 인플레이스 업그레이드(In-Place Upgrade)
    • MySQL 서버의 데이터 파일을 그대로 두고 업그레이드
    • 동일 메이저 버전에서 마이너 버전 간 업그레이드는 대부분 데이터 파일 변경 없이 진행
    • 메이저 버전 간 업그레이드는 반드시 직전 버전에서만 허용
    • 메이저 버전 업그레이드가 일부 마이너(패치) 버전에서만 가능
  • 논리적 업그레이드(Logical Upgrade)
    • mysqldump 도구 등을 이용해 MySQL 서버의 데이터를 SQL 문장이나 텍스트 파일로 덤프한 후, 새로 업그레이된 버전의 MySQL 서버에서 데이터 적재
  • MySQL 8.0 업그레이드 시 고려 사항
    • 사용자 인증 방식 변경 → 기본 인증 방식으로 변경
    • MySQL 8.0과의 호환성 체크 → 손상된 FRM 파일이나 호환되지 않는 데이터 타입 또는 함수
    • 외래키 이름의 길이 → 64글자 제한
    • 인덱스 힌트 → 성능 테스트 수행
    • GROUP BY에 사용된 정렬 옵션 → ASC나 DESC를 제거하거나 다른 방식으로 변경
    • 파티션을 위한 공용 테이블스페이스 → 파티션의 각 테이블스페이스를 공용 테이블스페이스에 저장 불가
  • 업그레이드 절차
    1. MySQL 셧다운
    2. MySQL 5.7 프로그램 삭제
    3. MySQL 8.0 프로그램 설치
    4. MySQL 8.0 서버(mysqld) 시작

2.4 서버 설정

  • 설정 파일의 구성
    • my.cnf나 my.ini 파일에 여러 개의 설정 그룹을 담을 수 있으며, 실행 프로그램 이름을 그룹명으로 사용
    • 설정 파일의 각 그룹은 같은 파일을 공유하지만 서로 무관하게 적용
# mysqld_safe 그룹: MySQL 서버를 안전 모드로 실행할 때 사용하는 설정
[mysqld_safe]
log-error=/var/log/mysqld_safe.log
pid-file=/var/run/mysqld/mysqld_safe.pid

# mysqld 그룹: MySQL 서버 데몬의 주요 설정
# MySQL 서버 데몬(mysqld): 데이터베이스 관리 및 쿼리 처리를 담당하는 백그라운드 프로세스
[mysqld]
socket=/var/run/mysqld/mysqld.sock
port=3306

# InnoDB: MySQL의 주요 스토리지 엔진
innodb_buffer_pool_size=256M
innodb_log_file_size=64M

# mysql 그룹: MySQL 클라이언트 프로그램의 설정
[mysql]
no-auto-rehash
prompt=\\u@\\h [\\d]>\\_

# mysqldump 그룹: mysqldump 유틸리티의 설정
[mysqldump]
quick
quote-names
max_allowed_packet=64M
  • MySQL 시스템 변수 속성
    • Cmd-Line: MySQL 서버의 명령행 인자로 설정될 수 있는지 여부
    • Option: MySQL의 설정 파일로 제어할 수 있는지 여부
    • System Var: 시스템 변수인지 아닌지 여부
    • Var Scope:시스템 변수의 적용 범위
      • 시스템 변수가 영향을 미치는 곳이 MySQL 서버 전체(Global)인지, MySQL 서버와 클라이언트 간의 커넥션(Session)인지 구분
      • 어떤 변수는 세션과 글로벌 범위에 모두 적용(Both)
    • Dynamic: 시스템 변수가 동적인지 정적인지 구분하는 변수
  • MySQL의 시스템 변수(적용 범위)
    • 글로벌 변수
      • 하나의 MySQL 서버 인스턴스에서 전체적으로 영향을 미치는 시스템 변수
      • InnoDB 버퍼 풀 크기(innodb_buffer_pool_size) 또는 MyISAM의 키 캐시 크기(key_buffer_size) 등이 대표적
    • 세션 변수
      • MySQL 클라이언트가 MySQL 서버에 접속할 때 기본으로 부여하는 옵션의 기본값을 제어하는 데 사용
      • 클라이언트의 필요에 따라 개별 커넥션 단위로 다른 값으로 변경할 수 있는 것
      • 각 클라이언트에서 쿼리 단위로 자동 커밋을 수행할지 여부를 결정하는 변수(auticommit)가 대표적
      • 범위가 Both인 변수
        • MySQL 서버의 설정 파일에 명시해 초기화할 수 있는 변수
        • MySQL 서버가 기억만 하고 있다가 실제 클라이언트와 커넥션이 생성되는 순간 기본값으로 사용되는 값
      • 범위가 Session인 변수
        • MySQL 서버의 설정 파일에 초깃값 명시 불가
        • 커넥션이 만들어지는 순간부터 해당 커넥션에서만 유효한 설정 변수
  • MySQL의 시스템 변수(서버가 기능 중인 상태에서 변경 가능한지)
    • 동적 변수
      • MySQL 서버에서 SET GLOBAL 명령으로 변경하면 즉시 서버에 반영
      • MySQL 서버로 접속할 수 있는 최대 커넥션의 개수를 제한하는 변수(max_connections)가 대표적
    • 정적 변수
      • 실행 중인 MySQL 서버에서 변경 불가 
      • MySQL 서버가 재시작될 때만 변경되는 변수(innodb_doublewrite)가 대표적
    • SET PERSIST 명령
      • MySQL 서버 설정 파일에 변경 내용을 수동으로 기록하지 않아도 자동으로 영구 변경 가능
      • 정적 변수의 값을 영구적으로 변경하고자 할 때 사용
  • my.cnf 파일의 기본 설정은 책(p.46)에서 확인 가능

참고자료

1) 백은빈, 이성욱. Real MySQL 8.0 (1권). 위키북스, 2021.

이 글은 『Real MySQL 8.0 (1권)』 책을 학습한 내용을 정리한 것입니다.
Comments