Loading...
MySQL 9.5 Reference Manual 9.5의 2.5.9 Managing MySQL Server with systemd의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
다음 Linux 플랫폼에서 RPM 또는 Debian 패키지를 사용해 MySQL을 설치하는 경우, 서버 시작과 종료는 systemd에 의해 관리됩니다:
RPM 패키지 플랫폼:
Debian 계열 플랫폼:
systemd를 사용하는 플랫폼에서 범용 바이너리 배포본으로 MySQL을 설치한 경우, post-installation setup 섹션에 제공된 지침에 따라 MySQL에 대한 systemd 지원을 수동으로 구성할 수 있습니다. 자세한 내용은 MySQL 8.4 Secure Deployment Guide의 post-installation setup 섹션을 참조하십시오.
systemd를 사용하는 플랫폼에서 소스 배포본으로 MySQL을 설치하는 경우, 배포본을
-DWITH_SYSTEMD=1 CMake 옵션으로 구성하여 MySQL에 대한 systemd 지원을 얻을 수 있습니다. 자세한 내용은
Section 2.8.7, “MySQL Source-Configuration Options”를 참조하십시오.
다음 논의에서는 다음 주제를 다룹니다:
참고
MySQL에 대한 systemd 지원이 설치된 플랫폼에서는, mysqld_safe 및 System V 초기화 스크립트와 같은 스크립트가 불필요하며 설치되지 않습니다. 예를 들어 mysqld_safe는 서버 재시작을 처리할 수 있지만, systemd는 동일한 기능을 제공하며, 애플리케이션 전용 프로그램을 사용하는 대신 다른 서비스 관리 방식과 일관된 방법으로 이를 수행합니다.
systemd를 사용하여 서버를 관리하는 플랫폼에서 mysqld_safe를 사용하지 않는 것의 한 가지 의미는, 옵션 파일에서 [mysqld_safe] 또는
[safe_mysqld] 섹션을 사용하는 것이 지원되지 않으며, 예기치 않은 동작을 유발할 수 있다는 점입니다.
systemd는 MySQL에 대한 systemd 지원이 설치된 플랫폼에서 여러 MySQL 인스턴스를 관리할 수 있는 기능을 제공하므로, mysqld_multi 및 mysqld_multi.server는 불필요하며 설치되지 않습니다.
systemd는 MySQL 서버의 자동 시작 및 종료를 제공합니다.
또한 systemctl 명령을 사용한 수동 서버 관리도 가능하게 합니다. 예를 들면 다음과 같습니다:
1$> systemctl {start|stop|restart|status} mysqld
또는 System V 시스템과 호환되는 service 명령(인자가 반대 순서)을 사용할 수도 있습니다:
1$> service mysqld {start|stop|restart|status}
참고
systemctl 명령(및 대체 service 명령)의 경우, MySQL 서비스 이름이 mysqld가 아니라면 적절한 이름을 사용해야 합니다. 예를 들어 Debian 기반 및 SLES 시스템에서는 mysqld 대신 mysql을 사용합니다.
systemd 지원에는 다음과 같은 파일이 포함됩니다:
mysqld.service (RPM 플랫폼),
mysql.service (Debian 플랫폼):
MySQL 서비스에 대한 세부 정보를 포함하는 systemd 서비스 유닛 구성 파일입니다.
[email protected] (RPM 플랫폼),
[email protected] (Debian 플랫폼):
mysqld.service 또는
mysql.service와 유사하지만, 여러 MySQL 인스턴스를 관리하는 데 사용됩니다.
mysqld.tmpfiles.d: tmpfiles 기능을 지원하기 위한 정보를 포함하는 파일입니다. 이 파일은
mysql.conf라는 이름으로 설치됩니다.
mysqld_pre_systemd (RPM 플랫폼),
mysql-system-start (Debian 플랫폼):
유닛 파일을 위한 지원 스크립트입니다. 이 스크립트는 로그 위치가 특정 패턴(RPM 플랫폼의 경우 /var/log/mysql*.log,
Debian 플랫폼의 경우 /var/log/mysql/*.log)과 일치하는 경우에만 에러 로그 파일을 생성하는 데 도움을 줍니다. 그 외의 경우, 에러 로그 디렉터리는 쓰기 가능해야 하거나, 에러 로그가 존재하고 mysqld 프로세스를 실행하는 사용자가 쓸 수 있어야 합니다.
MySQL에 대한 systemd 옵션을 추가하거나 변경하기 위해 사용할 수 있는 방법은 다음과 같습니다:
MYSQLD_OPTS systemd 변수 설정로컬 systemd 구성 파일을 사용하려면, 존재하지 않는 경우
/etc/systemd/system/mysqld.service.d
디렉터리를 생성합니다. 그런 다음 해당 디렉터리에, 원하는 설정을 나열하는 [Service] 섹션을 포함하는 파일을 생성합니다. 예를 들면 다음과 같습니다:
1[Service] 2LimitNOFILE=max_open_files 3Nice=nice_level 4LimitCore=core_file_limit 5Environment="LD_PRELOAD=/path/to/malloc/library" 6Environment="TZ=time_zone_setting"
여기서는 이 파일의 이름으로 override.conf를 사용합니다. 최신 버전의 systemd는 다음 명령을 지원하며, 이 명령은 에디터를 열어 파일을 편집할 수 있게 합니다:
1systemctl edit mysqld # RPM platforms 2systemctl edit mysql # Debian platforms
override.conf를 생성하거나 변경할 때마다, systemd 구성을 다시 로드한 후, systemd에 MySQL 서비스를 재시작하도록 지시해야 합니다:
1systemctl daemon-reload 2systemctl restart mysqld # RPM platforms 3systemctl restart mysql # Debian platforms
systemd에서는, MySQL 옵션 파일의 [mysqld],
[mysqld_safe], 또는
[safe_mysqld] 그룹에 설정하는 대신, 특정 매개변수에 대해서는 override.conf 구성 방법을 사용해야 합니다:
일부 매개변수의 경우, systemd 자체가 해당 값을 알아야 하며 MySQL 옵션 파일을 읽어 값을 가져올 수 없기 때문에 override.conf를 사용해야 합니다.
값을 지정하는 매개변수 중에는 mysqld_safe 옵션으로만 설정할 수 있고, 이에 상응하는 mysqld 매개변수가 없는 것들이 있습니다. 이러한 매개변수는 systemd를 사용해 지정해야 합니다.
mysqld_safe 대신 systemd를 사용하는 방법에 대한 추가 정보는 Migrating from mysqld_safe to systemd를 참조하십시오.
override.conf에서 다음 매개변수를 설정할 수 있습니다:
MySQL 서버에서 사용 가능한 파일 디스크립터 수를 설정하려면, mysqld의
open_files_limit 시스템 변수나 mysqld_safe의
--open-files-limit
옵션 대신 override.conf에서
LimitNOFILE을 사용하십시오.
최대 코어 파일 크기를 설정하려면, mysqld_safe의
--core-file-size 옵션 대신
override.conf에서 LimitCore를 사용하십시오.
MySQL 서버의 스케줄링 우선순위를 설정하려면, mysqld_safe의
--nice 옵션 대신
override.conf에서 Nice를 사용하십시오.
일부 MySQL 매개변수는 환경 변수를 사용해 구성됩니다:
LD_PRELOAD: MySQL 서버가 특정 메모리 할당 라이브러리를 사용해야 하는 경우 이 변수를 설정합니다.
NOTIFY_SOCKET: 이 환경 변수는 mysqld가 systemd와 시작 완료 및 서비스 상태 변경에 대한 알림을 주고받는 데 사용하는 소켓을 지정합니다. 이 변수는 mysqld 서비스가 시작될 때 systemd에 의해 설정됩니다.
mysqld 서비스는 해당 변수 설정을 읽고 지정된 위치에 쓴 후 알림을 전송합니다.
MySQL 9.5에서 mysqld는
Type=notify 프로세스 시작 유형을 사용합니다.
(MySQL 5.7에서는 Type=forking이 사용되었습니다.)
Type=notify를 사용하면, systemd는 소켓 파일을 자동으로 구성하고 그 경로를
NOTIFY_SOCKET 환경 변수에 내보냅니다.
TZ: 서버의 기본 시간대를 지정하려면 이 변수를 설정합니다.systemd에 의해 관리되는 MySQL 서버 프로세스에서 사용할 환경 변수 값을 지정하는 방법은 여러 가지가 있습니다:
override.conf 파일의 Environment 행을 사용합니다. 구문은 앞서 이 파일을 사용하는 방법을 설명한 예제를 참조하십시오.
/etc/sysconfig/mysql 파일에 값을 지정합니다(파일이 없으면 생성). 다음 구문을 사용해 값을 할당합니다:
1LD_PRELOAD=/path/to/malloc/library 2TZ=time_zone_setting
/etc/sysconfig/mysql을 수정한 후, 변경 사항을 적용하려면 서버를 재시작합니다:
1systemctl restart mysqld # RPM platforms 2systemctl restart mysql # Debian platforms
systemd 구성 파일을 직접 수정하지 않고 mysqld 옵션을 지정하려면, MYSQLD_OPTS systemd 변수를 설정하거나 해제합니다. 예를 들면 다음과 같습니다:
1systemctl set-environment MYSQLD_OPTS="--general_log=1" 2systemctl unset-environment MYSQLD_OPTS
MYSQLD_OPTS는
/etc/sysconfig/mysql 파일에서도 설정할 수 있습니다.
systemd 환경을 수정한 후에는 서버를 재시작하여 변경 사항을 적용합니다:
1systemctl restart mysqld # RPM platforms 2systemctl restart mysql # Debian platforms
systemd를 사용하는 플랫폼에서는, 데이터 디렉터리가 비어 있는 경우 서버 시작 시 초기화됩니다. 데이터 디렉터리가 일시적으로 사라진 원격 마운트인 경우, 이는 문제가 될 수 있습니다. 마운트 지점이 비어 있는 데이터 디렉터리처럼 보일 수 있고, 그 결과 새 데이터 디렉터리로 초기화될 수 있기 때문입니다.
이러한 자동 초기화 동작을 억제하려면, (파일이 없으면 생성하여)
/etc/sysconfig/mysql 파일에 다음 행을 지정하십시오:
1NO_INIT=true
이 섹션에서는 여러 MySQL 인스턴스에 대해 systemd를 구성하는 방법을 설명합니다.
참고
systemd는 systemd 지원이 설치된 플랫폼에서 여러 MySQL 인스턴스를 관리할 수 있는 기능을 제공하므로, mysqld_multi 및 mysqld_multi.server는 불필요하며 설치되지 않습니다.
멀티 인스턴스 기능을 사용하려면, 각 인스턴스의 핵심 옵션 구성을 포함하도록
my.cnf 옵션 파일을 수정합니다. 일반적인 파일 위치는 다음과 같습니다:
/etc/my.cnf 또는
/etc/mysql/my.cnf (RPM 플랫폼)
/etc/mysql/mysql.conf.d/mysqld.cnf
(Debian 플랫폼)
예를 들어 replica01 및 replica02라는 두 인스턴스를 관리하려면, 옵션 파일에 다음과 같은 내용을 추가합니다:
RPM 플랫폼:
1[mysqld@replica01] 2datadir=/var/lib/mysql-replica01 3socket=/var/lib/mysql-replica01/mysql.sock 4port=3307 5log-error=/var/log/mysqld-replica01.log 6 7[mysqld@replica02] 8datadir=/var/lib/mysql-replica02 9socket=/var/lib/mysql-replica02/mysql.sock 10port=3308 11log-error=/var/log/mysqld-replica02.log
Debian 플랫폼:
1[mysqld@replica01] 2datadir=/var/lib/mysql-replica01 3socket=/var/lib/mysql-replica01/mysql.sock 4port=3307 5log-error=/var/log/mysql/replica01.log 6 7[mysqld@replica02] 8datadir=/var/lib/mysql-replica02 9socket=/var/lib/mysql-replica02/mysql.sock 10port=3308 11log-error=/var/log/mysql/replica02.log
여기서 replica 이름은 systemd에서 지원하는 유일한 구분자이기 때문에 @를 구분자로 사용합니다.
그런 다음 인스턴스는 다음과 같은 일반적인 systemd 명령으로 관리합니다:
1systemctl start mysqld@replica01 2systemctl start mysqld@replica02
부팅 시 인스턴스가 실행되도록 하려면 다음과 같이 합니다:
1systemctl enable mysqld@replica01 2systemctl enable mysqld@replica02
와일드카드 사용도 지원됩니다. 예를 들어 다음 명령은 모든 replica 인스턴스의 상태를 표시합니다:
1systemctl status 'mysqld@replica*'
동일한 머신에서 여러 MySQL 인스턴스를 관리하기 위해, systemd는 자동으로 다른 유닛 파일을 사용합니다:
RPM 플랫폼에서는 mysqld.service 대신
[email protected]
Debian 플랫폼에서는 mysql.service 대신
[email protected]
유닛 파일에서 %I 및
%i는 @ 마커 뒤에 전달되는 매개변수를 참조하며, 특정 인스턴스를 관리하는 데 사용됩니다. 예를 들어 다음 명령의 경우:
1systemctl start mysqld@replica01
systemd는 다음과 같은 명령을 사용해 서버를 시작합니다:
1mysqld --defaults-group-suffix=@%I ...
그 결과, 해당 서비스 인스턴스에 대해 [server],
[mysqld], 및
[mysqld@replica01] 옵션 그룹이 읽혀 사용됩니다.
참고
Debian 플랫폼에서는 AppArmor가 서버가
/var/lib/mysql-replica* 또는 기본 위치 이외의 경로를 읽거나 쓰는 것을 방지합니다. 이를 해결하려면
/etc/apparmor.d/usr.sbin.mysqld의 프로필을 사용자 정의하거나 비활성화해야 합니다.
참고
Debian 플랫폼에서는, MySQL 제거를 위한 패키징 스크립트가 현재 mysqld@ 인스턴스를 처리할 수 없습니다. 패키지를 제거하거나 업그레이드하기 전에 추가 인스턴스를 수동으로 먼저 중지해야 합니다.
MySQL을 관리하기 위해 systemd를 사용하는 플랫폼에는 mysqld_safe가 설치되지 않으므로, 이전에 해당 프로그램에 대해 지정된 옵션(예: [mysqld_safe] 또는
[safe_mysqld] 옵션 그룹에 지정된 옵션)은 다른 방식으로 지정해야 합니다:
[mysqld_safe] 또는
[safe_mysqld] 옵션 그룹에서
[mysqld] 그룹으로 옮길 수 있습니다. 단, 여기에는
--pid-file,
--open-files-limit,
--nice는 포함되지 않습니다. 이 옵션을 지정하려면 앞에서 설명한 systemd의 override.conf 파일을 사용하십시오.참고
systemd 플랫폼에서는
[mysqld_safe] 및
[safe_mysqld] 옵션 그룹 사용이 지원되지 않으며 예기치 않은 동작을 초래할 수 있습니다.
일부 mysqld_safe 옵션에 대해서는 mysqld의 대체 절차가 있습니다. 예를 들어, syslog 로깅을 활성화하기 위한 mysqld_safe 옵션은 사용 중단된
--syslog입니다. 에러 로그 출력을 시스템 로그에 기록하려면,
Section 7.4.2.8, “Error Logging to the System Log”의 지침을 사용하십시오.
mysqld_safe 옵션 중 mysqld에서 인식하지 않는 것들은
override.conf 또는 환경 변수에서 지정할 수 있습니다. 예를 들어, mysqld_safe에서 서버가 특정 메모리 할당 라이브러리를 사용해야 하는 경우
--malloc-lib 옵션을 사용해 지정합니다. systemd로 서버를 관리하는 설치의 경우, 앞에서 설명한 대로
LD_PRELOAD 환경 변수를 설정하도록 구성하십시오.
2.5.8 Installing MySQL on Linux with Juju
2.6 Installing MySQL Using Unbreakable Linux Network (ULN)