리눅스에서 MySQL 설정하기

2024년 2월 2일 작성

Real MySQL 1설정하기

리눅스에서는?

대부분의 서비스 환경에서는 리눅스 운영체제에서 MySQL 서버를 구동한다.

설정파일 및 데이터파일 준비

리눅스 서버에서 yum installer나 rpm을 이용해 설치하면 MySQL 서버에 필요한 프로그램들과 디렉터리들을 일부 준비되지만

  • 트랜잭션 로그파일
  • 시스템 테이블

이 준비되지 않기 때문에 아직 MySQL을 구동할 수 없다.

기본적으로 mysql 서버가 설치되면, /etc/my.cnf 설정 파일이 준비되는데, 이 파일에 꼭 필요한 3~4개의 아주 기본적인 설정만 기록돼있다. 실제 서비스용으로 사용하기에는 많이 부족한 상태라고 하는데, 간단히 테스트용으로는 충분히 사용 가능하다고 한다.

만약 서비스용으로 설치한다면 2.4절 '서버 설정' 의 내용을 충분히 숙지해서 /etc/my.cnf 를 준비해야한다고 한다.

unix 계열 mysql start

> mysqld --defaults-file=/etc/my.cnf --initialize-insecure

위 명령을 실행하면 필요한 초기 데이터 파일과 로그파일들을 생성하고, 비밀번호가 없는 관리자 계정인 root 유저를 생선한다. 비밀번호가 있게 하려면 --initialize-insecure 대신 --intialize 옵션을 사용하면 된다. 참고로, --initialize 옵션을 사용하면 생성된 관리자 계정의 비밀번호를 에러 로그 파일로 기록한다고 한다. 이런 로그 파일의 기본 경로는 /var/log/mysqld.log 파일인데, 파일의 제일 마지막에 비밀번호를 확인할 수 있다.

참고로 난 Mac 환경이라, 시스템설정에서 기본에러 경로를 찾아서 확인해봤는데 이전에 이 옵션을 사용하지 않아서 해당 로그는 찾아볼 수 없었다.


유닉스 계열 운영체제에서 RPM으로 mysql을 설치했으면 자동으로 /usr/lib/systemd/system/mysqld.service 파일이 생긴다고한다.

systemd 란?

systemd는 Linux 시스템에서 서비스(데몬)를 관리하기 위한 시스템 및 서비스 매니저입니다. systemctl은 systemd를 사용하여 서비스를 관리하기 위한 명령줄 도구입니다. systemd를 사용하면 시스템 부팅 시 자동으로 서비스를 시작하거나 사용자 요청 시 서비스를 시작, 중지, 재시작 및 상태 확인 등을 할 수 있습니다. .service 파일은 systemd가 사용하는 유닛 파일의 한 종류로, 특정 서비스의 작동 방식을 정의합니다. 이 파일에는 서비스의 시작 방법, 종속성, 사용할 환경 변수, 실행에 필요한 사용자 권한 등 서비스를 관리하기 위한 다양한 지시어가 포함됩니다. 정리하면 .service 파일이 systemd가 서비스를 어떻게 관리해야 하는지를 정의하고, systemctl은 이러한 정의에 따라 실제 서비스 관리 작업을 수행하는 도구입니다.

그러면 systemd 로 mysql을 실행하는 명령이 있겠구나.

> systemctl start mysqld

서버가 시작되면 로그가 뜨니 상태를 확인한다.

종료는 시작과 마찬가지로 systemd를 사용해서 하면 된다.

> systemctl stop mysqld

원격으로 mysql 셧다운하기

mysql 을 띄운 서버에 접속하지 않고 mysql을 종료하는 방법이다.

mysql> SHUTDOWN;

이 명령어를 치면 된다. 다만 이 커맨드를 수행하려면 사용자가 SHUTDOWN 권한을 가지고 있어야한다.

클린 셧다운

MySQL 서버에서는 트랜잭션이 정상적으로 커밋돼도 데이터 파일에 변경된 내용이 기록되지 않을 수 있다고 한다. 이 경우 로그 파일(redo log) 에만 기록이 남게 되는데, 서버를 재시작해도 이 상태로 계속 유지되어 데이터 파일이 변경되지 않을 수 있다고 한다.

사용량이 많은 MySQL 서버에서는 이런 현상이 더 일반적이고, 결코 비정상적인 상황이 아니다.

원한다면, MySQL 서버가 종료될 때 모든 커밋된 내용을 데이터 파일에 기록하게 하는 옵션을 사용할 수 있다. 다음과 같이 MySQL 서버의 옵션을 변경하고 서버를 종료하는 것이다.

mysql > SET GLOBAL innodb_fast_shutdown=0;
linux > systemctl stop mysqld.service

원격인 경우

mysql > SET GLOBAL innodb_fast_shutdown=0;
mysql > SHUTDOWN;

클린 셧다운을 활용하면 MySQL 서버를 재시작할 때 별도의 트랜잭션 복구 과정을 진행하지 않기 때문에 빠르게 시작할 수 있다고 한다.

간단한 소개 by. GPT

MySQL의 클린 셧다운 옵션은 서버를 안전하게 종료하기 위한 것으로, innodb_fast_shutdown 변수를 통해 조절할 수 있습니다. 이 옵션은 InnoDB 스토리지 엔진에 영향을 미치며, MySQL 서버가 종료될 때 InnoDB가 데이터를 디스크에 어떻게 플러시하는지를 결정합니다.

innodb_fast_shutdown 변수의 기본값은 MySQL의 버전에 따라 다를 수 있습니다. 하지만 일반적으로 다음 세 가지 값을 가질 수 있습니다:

  • 0: 클린 셧다운. MySQL은 종료하기 전에 모든 변경사항을 디스크에 플러시합니다. 또한, 레드 로그와 언두 로그를 정리합니다. 이 옵션은 서버 재시작 시 복구 시간을 최소화합니다.
  • 1: 빠른 셧다운(기본값). 변경사항은 플러시되지만, 불필요한 플러시 작업을 피하기 위해 언두 로그를 정리하지 않습니다. 이 옵션은 종료 시간을 단축시키지만, 서버 재시작 시 복구 과정이 더 오래 걸릴 수 있습니다.
  • 2: 매우 빠른 셧다운. InnoDB는 변경사항을 디스크에 플러시하지 않고 종료합니다. 이는 데이터 손실을 초래할 수 있으므로 일반적인 운영에서는 권장되지 않습니다.

MySQL 5.7 이후 버전에서는 innodb_fast_shutdown의 기본값이 1입니다. 하지만, 안전한 서버 운영을 위해서는 클린 셧다운이 권장되므로, 필요에 따라 이 값을 0으로 설정할 수 있습니다. 설정값을 변경하려면, MySQL 서버의 설정 파일(my.cnf 또는 my.ini)에 다음과 같이 추가하거나, 실행 중인 서버에서 동적으로 변경할 수 있습니다:

[mysqld]
innodb_fast_shutdown = 0

서버를 안전하게 종료하고자 할 때는, 가능한 한 0으로 설정하여 모든 데이터가 디스크에 안전하게 저장되도록 하는 것이 좋습니다.

추가적으로, 기본값이 1인 것은 안정성과 편의성 사이의 균형을 맞추기 위함이라고 한다. 240203-194834