리눅스에서 MySQL 설정하기
2024년 2월 2일 작성
리눅스에서는?
대부분의 서비스 환경에서는 리눅스 운영체제에서 MySQL 서버를 구동한다.
설정파일 및 데이터파일 준비
리눅스 서버에서 yum installer나 rpm을 이용해 설치하면 MySQL 서버에 필요한 프로그램들과 디렉터리들을 일부 준비되지만
- 트랜잭션 로그파일
- 시스템 테이블
이 준비되지 않기 때문에 아직 MySQL을 구동할 수 없다.
기본적으로 mysql 서버가 설치되면, /etc/my.cnf
설정 파일이 준비되는데, 이 파일에 꼭 필요한 3~4개의 아주 기본적인 설정만 기록돼있다.
실제 서비스용으로 사용하기에는 많이 부족한 상태라고 하는데, 간단히 테스트용으로는 충분히 사용 가능하다고 한다.
만약 서비스용으로 설치한다면 2.4절 '서버 설정' 의 내용을 충분히 숙지해서 /etc/my.cnf
를 준비해야한다고 한다.
unix 계열 mysql start
위 명령을 실행하면 필요한 초기 데이터 파일과 로그파일들을 생성하고, 비밀번호가 없는 관리자 계정인 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을 실행하는 명령이 있겠구나.
서버가 시작되면 로그가 뜨니 상태를 확인한다.
종료는 시작과 마찬가지로 systemd를 사용해서 하면 된다.
원격으로 mysql 셧다운하기
mysql 을 띄운 서버에 접속하지 않고 mysql을 종료하는 방법이다.
mysql> SHUTDOWN;
이 명령어를 치면 된다. 다만 이 커맨드를 수행하려면 사용자가 SHUTDOWN
권한을 가지고 있어야한다.
클린 셧다운
MySQL 서버에서는 트랜잭션이 정상적으로 커밋돼도 데이터 파일에 변경된 내용이 기록되지 않을 수 있다고 한다. 이 경우 로그 파일(redo log) 에만 기록이 남게 되는데, 서버를 재시작해도 이 상태로 계속 유지되어 데이터 파일이 변경되지 않을 수 있다고 한다.
사용량이 많은 MySQL 서버에서는 이런 현상이 더 일반적이고, 결코 비정상적인 상황이 아니다.
원한다면, MySQL 서버가 종료될 때 모든 커밋된 내용을 데이터 파일에 기록하게 하는 옵션을 사용할 수 있다. 다음과 같이 MySQL 서버의 옵션을 변경하고 서버를 종료하는 것이다.
원격인 경우
클린 셧다운을 활용하면 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인 것은 안정성과 편의성 사이의 균형을 맞추기 위함이라고 한다.