Database/Real MySQL

MySQL 설치와 설정

Seung-o 2022. 5. 6. 17:35

MySQL 서버 설치

 

1) 버전 선택

 

 가능한 한 최신 버전을 설치하는 것이 좋습니다. MySQL 8.0 버전이라면 MySQL 8.0.15와 8.0.20 사이의 버전부터 시작하는 걸 권장합니다. 커뮤니티 에디션과 엔터프라이즈 에디션 사이에 기능적인 차이는 없습니다. 다만, 기술 지원의 차이만 존재합니다. ( 이런 상용화 방식을 오픈 코어 모델이라고 합니다 )
  

2) 설치

 

 설치는 MySQL 사이트에서 DMG파일로 진행합니다. ( mac 기준 ) 저 같은 경우, Homebrew를 이용해 설치를 했습니다.

brew install mysql

MySQL 홈페이지 내 Community Server Download 페이지

 

설치 버전에 x86과 ARM이 있는데, 두 가지의 차이는 뭘까? 

x86과 ARM의 차이는 사용하는 CPU의 아키텍처. 일반적으로 데스크탑에서는 x86을 주로 사용하고 스마트폰에서는 ARM을 사용한다고 합니다.


   

3) MySQL 서버의 시작과 종료


 - 서버 시작

sudo /usr/local/mysql/support-files/mysql.server start

 

- 서버 종료

sudo /usr/local/mysql/support-files/mysql.server stop


* 에러: ERROR! The server quit without updating PID file

 

[해결 방법 1] MySQL 데이터 디렉토리의 소유권 변경: 터미널에서 ls -la 커맨드를 통해 디렉토리의 소유권 확인이 가능합니다. 이 때, mysql의 소유권을 admin이 아닌 mysql이 갖게 해야 합니다.

sudo chown -R mysql:mysql /usr/local/mysql

 

[해결 방법 2] mysql 디렉토리에 파일을 쓸 수 있는 권한을 부여

sudo chmod -R 777 /usr/local/mysql

 

 

MySQL 서버가 설치된 디렉터리: /usr/local/mysql

 

절대 삭제 하면 안되는 항목


- bin: MySQL 서버와 클라이언트 프로그램, 유틸리티를 위한 디렉터리
- data: 로그 파일과 데이터 파일들이 저장되는 디렉터리
- include: C/C++ 헤더 파일들이 저장된 디렉터리
- lib: 라이브러리 파일들이 저장된 디렉터리
- share: 다양한 지원 파일들이 정장되어 있음. 에러 메시지나 샘플 설정파일(my.cnf)이 있는 디렉터리

Mac 에서 서버의 설정 파일(my.cnf) 등록과 서버의 시작과 종료를 '시스템 환경 설정' 최하단의 MySQL(관리 프로그램)에서 수행 가능합니다. 그리고 My SQL 관리 프로그램에서 Configuration 탭에서 MySQL 서버의 설정 변경 가능합니다.

 

4) MySQL 서버 업그레이드

 

서버를 업그레이드 하는 방법은 크게 두 가지가 있습니다.

 

a) MySQL 서버의 데이터 파일을 그대로 두고 업그레이드하는 방법 -> 인플레이스 업그레이드 (In-place Upgrade)
b) MySQL 서버의 데이터를 SQL 문장이나 텍스트 파일로 덤프한 후, 새로 업그레이드된 버전의 MySQL 서버에서 덤프된 데이터를 적재하는 방법 -> 논리적 업그레이드 (Logical Upgrade)

인플레이스 업그레이드는 제약사항이 있지만 속도가 빠르고, 논리적 업그레이드는 제약사항은 거의 없지만 시간이 매우 많이 소요될 수 있습니다.

 

* 인플레이스 업그레이드의 제약 사항

 

- 업그레이드는 마이너 버전 간 업그레이드와 메이저 버전 간 업그레이드로 나누어 생각해볼 수 있습니다.

마이너 버전 간 업그레이드는 대부분 데이터 파일의 변경 없이 진행되어 여러 버전을 건너 뛰어서 업그레이드하는 것도 허용됩니다.

(예) MySQL 8.0.16 버전에서 MySQL 8.0.21 버전으로 업그레이드할 때는 MySQL 서버 프로그램만 재설치하면 됩니다.

 

하지만 메이저 버전 간 업그레이드는 크고 작은 데이터 파일의 변경이 필요하기 때문에 반드시 직전 버전에서만 업그레이드가 하용됩니다.

(예) MySQL 5.5 버전에서 5.7로 한 단계 건너뛰거나, 8.0으로 두 단계 건너뛰는 업그레이드는 지원하지 않습니다.

 

- 또 다른 제약 사항은 메이저 버전 업그레이드가 특정 마이너 버전에서만 가능하기도 합니다.

(예) MySQL 5.7.8 버전은 8.0으로 바로 업그레이드 불가능합니다. 이는 MySQL 5.7.8 버전이 GA(General Availability)가 아니기 때문입니다.

 

GA 버전이란?

오라클에서 MySQL 서버의 안정성이 확인된 버전

 

MySQL 5.7 → 8.0 변경 시 유의 점

 

a) 사용자 인증 방식 변경
MySQL 8.0부터는 기본 인증 방식으로 Caching SHA-2 Authentication 인증 방식을 사용합니다. (5.7까지는 Native Authentication 사용) 따라서 업그레이드 시, 기존 사용자들은 Native Authentication을 사용하고, 신규 사용자는 Caching SHA-2 Authentication을 사용하게 될 것입니다. ( Native Authentication을 계속 사용하고 싶을 경우, MySQL 서버 시작 시 --default-authentication-plugin=mysql_native_password 파라미터를 활성화하면 됩니다 )

 

b) MySQL 8.0과 호환성 체크
MySQL 5.7에서 손상된 FRM 파일이나 호환되지 않는 데이터 타입 도는 함수가 있는지 mysqlcheck 유틸리티를 이용해 확인해봐야 합니다.

 

c) 외래키 이름의 길이
MySQL 8.0에서는 외래키의 이름이 64자로 제한됩니다. (쿼리로 외래키 이름의 길이 체크 가능)
    

d) 인덱스 힌트
인덱스 힌트는 MySQL 5.7에서 성능 향상이 도움이 되었지만 8.0에서는 오히려 성능 저하를 일으킬 수 있습니다. ( 성능 테스트 진행해볼 것 )

 

e) GROUP BY에 사용된 정렬 옵션
5.7버전에서 GROUP BY에 ASC나 DESC로 정렬 옵션이 사용되고 있다면 제거하거나 다른 방식으로 변경해야 합니다.

 

f) 파티션을 위한 공용 테이블스페이스
8.0에서는 파티션의 각 테이블스페이스를 공용 테이블스페이스에 저장할 수 없습니다. 따라서 ALTER TABLE ... REORGANIZE 명령을 통해 개별 테이블스페이스를 사용하도록 변경해야 합니다. ( 쿼리로 공용 테이블스페이스에 저장된 파티션이 있는지 체크 가능 )

MySQL 8.0 업그레이드


5.7->8.0 업그레이드는 크게 두 단계 과정으로 나뉘어 처리됩니다.


a) 데이터 딕셔너리 업그레이드: 5.7까지는 데이터 딕셔너리 정보가 FRM 확장자를 가진 파일로 별도로 보관되었지만, 8.0부터는 데이터 딕셔너리 정보가 트랜잭션이 지원하는 InnoDB 테이블로 저장되도록 개선되었습니다.
b) 서버 업그레이드: MySQL 서버의 시스템 데이터 베이스의 테이블 구조를 변경합니다.

 

업그레이드 과정
MySQL 셧다운 → MySQL 5.7 프로그램 삭제 → MySQL 8.0 프로그램 설치 → MySQL 8.0 서버(mysqld) 시작

 

MySQL 서버 설정


일반적으로 MySQL 서버는 단 하나의 설정 파일 사용: my.cnf (윈도우는 my.ini)
MySQL 서버가 어느 디렉터리에서 my.cnf를 읽고 있는지 확인 하는 방법

mysqld --verbose --help

( 순차적으로 디렉터리를 탐색하면서 처음 발견된 cnf파일을 사용합니다 )

 

AWS와 연결하여 사용하는 MySQL은 서버 설정을 어떻게 할까?


AWS RDS를 사용하는 경우, cnf파일을 따로 수정할 수는 없습니다. 하지만 "AWS>RDS>DB Parameter Groups"로 접속하여 새로운 옵션 인스턴트를 생성하여 적용할 수 있습니다.

 

 

MySQL 시스템 변수: MySQL 서버는 기동하면서 설정 파일의 내용을 읽어 메모리나 작동 방식을 초기화하고, 접속된 사용자를 제어하기 위해 이러한 값을 별도로 저장함. MySQL 서버에서는 이렇게 저장된 값을 시스템 변수라고 합니다. 아래 쿼리로 시스템 변수 확인이 가능합니다.

SHOW VARIABLES;

 

MySQL 시스템 변수는 적용 범위에 따라 글로벌 변수와 세션 변수로 나뉩니다. 글로벌 변수는 MySQL 서버 인스턴스에서 전체적으로 영향을 미치는 시스템 변수

 

(예) innodb_buffer_pool_size 세션 변수는 MySQL 클라이언트가 MySQL 서버에 접속할 때 기본으로 부여하는 옵션의 기본값을 제어하는데 사용됩니다.

(예) 각 클라이언트에서 쿼리 단위로 자동 커밋을 수행할지 여부를 결정하는 autocommit 변수

 

MySQL 시스템 변수는 MySQL 서버가 기동 중인 상태에서 변경 가능한지에 따라 동적 변수와 정적 변수로 구분됩니다. 동적 변수의 경우, MySQL 서버에서 (쿼리) SET GLOBAL 명령으로 변경하면 즉시 MySQL 서버에 반영됩니다.

(예) max_connections

 

문제는 이렇게 변경한 후, MySQL 서버의 설정 파일에는 적용을 안해서, 서버를 재시작할 때, 변경된 값이 적용되지 않는 경우가 빈번합니다.


이를 보완하기 위해 SET PERSIST 명령을 도입. SET PERSIST 명령으로 시스템 변수를 변경하면, MySQL 서버는 자동으로 GLOBAL 시스템 변수의 변경으로 인식하고 변경을 진행할 수 있습니다.

SET PERSIST %variable%;

'Database > Real MySQL' 카테고리의 다른 글

아키텍처  (0) 2022.05.07
사용자 및 권한  (0) 2022.05.07
소개  (0) 2022.05.06