[Real MySQL] 2. 설치와 설정

@lim · July 19, 2024

MySQL 서버 설치

설치 가능한 방법

  • tar, zip 으로 된 압축 파일 버전
  • 패키지 매니저 등을 이용한 설치 버전
  • 소스코드 빌드

→ 가능 한 설치 버전을 이용하는 것이 안전하다.

패키지 매니저를 이용한 설치

Debian 계열

apt install mysql-server

RedHat 계열

dnf install mysql-server

최신 버전을 설치하고자 한다면 MySQL 홈페이지에서 리포지토리 설정 패키지를 설치해야한다.

RockyLinux MySQL 설치 게시글 참고

설치 후 초기 세팅

mysqld --initialize-insecure
  • --initialize : 임시 비밀번호가 발급된 root 계정을 생성 (mysqld.log 로그에서 확인 가능)
  • --initialize-insecure : 비밀번호가 없는 root 계정을 생성

mysql_secure_installation

MySQL의 기본 보안 설정하는 명령어

  • root 계정 패스워드 설정
  • 원격 호스트에서 root 계정 접속 차단
  • 익명 계정 삭제
  • 테스트 DB 등 삭제

MySQL 디렉토리 구조

  • bin : MySQL 서버, 클라이언트 프로그램 및 유틸리티 위치
  • include : C/C++ 헤더 파일 위치
  • lib : 라이브러리 파일 위치
  • share : 이외 여러 지원 파일 및 에러 메시지, 샘플 설정 파일 my.ini 위치

MySQL 서버 시작과 종료

Systemd를 이용

systemctl status mysql
systemctl start mysql
systemctl stop mysql
systemctl restart mysql

프로세스 확인

systemctl status mysql ## 또는
ps -ef | grep mysqld

systemd를 이용하게 되면 mysql 설정파일(my.cnf)의 mysqld_safe 스크립트 설정을 무시하게 된다.

malloc-lib 와 같은 해당 섹션에서만 가능한 시스템 설정을 적용해야 한다면 mysqld_safe 스크립트를 이용해서 MySQL 서버를 시작/종료 해야 한다.

원격으로 MySQL 종료

mysql> SHUTDOWN
  • 원격으로 종료하고자 한다면 MySQL 접속하여 해당 명령어를 입력하면 된다.
    • 단, 해당 명령의 권한(Privileges)이 있어야 한다.

Clean shutdown

실제 트랜잭션이 정상적으로 커밋되어도 데이터 파일에 반영되지 않고 로그 파일(Redo log)에만 기록되어 있을 수 있다.

MySQL 서버에서는 비정상적인 상황이 아니다.

mysql> SET GLOBAL innodb_fast_shutdown=0;

위 명령어를 통해 서버 옵션을 변경하면 모든 커밋된 데이터를 데이터 파일에 적용하고 종료할 수 있다.

서버를 종료하고 다시 기동할 때 트랜잭션 복구 과정을 진행하지 않기 때문에 빠르게 기동이 가능하다.

MySQL 서버 연결

mysql 이용

MySQL 프로그램(mysqld)과 설치된 기본 클라이언트 프로그램 mysql을 이용한 방법이다.

mysql -u root -p --host=localhost --socket=/tmp/mysql.sock
mysql -u root -p --host=127.0.0.1 --port=3306
mysql -u root -p

여기서 host를 localhost와 127.0.0.1 로 명시할 때 방법이 다르다.

  • localhost : 소켓 파일을 이용한다. (IPC(Inter-Process Communication) 이용)
  • 127.0.0.1 : TCP/IP를 이용한다.

외부 서버에 접속하고자 한다면 두 번째 방법을 이용해야 한다.

세 번째 방법처럼 host와 포트를 명히하지 않았다면 기본값으로 localhost가 된다.

MySQL 서버 업그레이드

서버 업그레이드 방법에는 두 가지가 있다.

  1. MySQL 서버 데이터 파일을 그대로 두고 업그레이드 <- 인플레이스 업그레이드(In-Place Upgrade)
    • 제약 사항이 논리적 업그레이드보다 있으나 업그레이드 소요 시간이 매우 짧다.
  2. mysqldump 도구를 이용해 덤프를 뜬 후(백업 한 후) 업그레이드 <- 논리적 업그레이드(Logical Upgrade)
    • 제약 사항이 거의 없지만 저장된 데이터 양에 따라 업그레이드 소요 시간이 길어질 수 있다.

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

인플레이스 업그레이드를 하고자 한다면 두 제약 조건을 조심해야 한다.

하위 버전 지원

  • 8.0.16 -> 8.0.21 또는 5.5 -> 5.6 (가능)
  • 5.5 -> 5.7 또는 5.5 -> 8.0 (불가능)

두 단계를 건너뛰는 업그레이드는 지원하지 않는다.

이러한 메이저 업그레이드는 데이터 파일 패치가 필요하다.

(8.0은 직전 메이저 버전인 5.7 버전의 데이터 파일과 로그 포맷만 인식할 수 있다.)

만약 5.1 버전을 사용하고 있을 때 8.0으로 업그레이드 해야 한다면?

5.1 -> 5.5 -> 5.6 -> 5.7 -> 8.0

이렇게 순차적으로 업그레이드 하는 과정을 거쳐야 하는데, 이런 경우에는 덤프를 뜨는 방법이 나을 수 있다.

특정 버전 지원

메이저 버전 업그레이드가 특정 마이너 버전에서만 가능한 경우가 있다.

5.7 에서 8.0으로 업그레이드를 하기 위해선 GA버전에서만 가능하다.

  • GA(General Availabilty) : 오라클에서 안정성이 확인된 버전

MySQL 서버 설정

my.cnf

일반적으로 MySQL 서버가 시작될 때 단 하나의 설정 파일을 참조한다.

  • 유닉스 계열 : my.cnf
  • 윈도우 계열 : my.ini

지정된 여러 디렉토리를 순차적으로 탐색하면서 처음 발견된 my.cnf를 참조한다.

설정 파일의 경로는 여러 곳 일 수 있고 운영체제마다도 경로가 다르다.

mysql --help 명령어를 통해 어느 경로의 my.cnf을 참조하는지 확인할 수 있다.

Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~/.my.cnf 
Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf 
@lim
기억은 기록기록