RPM または Debian パッケージを使用して MySQL を次の Linux プラットフォームにインストールする場合、サーバーの起動と停止は systemd によって管理されます:
-
RPM パッケージプラットフォーム:
Enterprise Linux バリアントのバージョン 7 以上
SUSE Linux Enterprise Server 12 以上
Fedora 29 以上
-
Debian ファミリプラットフォーム:
Debian プラットフォーム
Ubuntu プラットフォーム
systemd を使用するプラットフォームに汎用バイナリディストリビューションから MySQL をインストールする場合は、「MySQL 8.0 セキュアデプロイメントガイド」のインストール後の設定に関するセクションに記載されている手順に従って、MySQL の systemd サポートを手動で構成できます。
systemd を使用するプラットフォーム上のソース配布から MySQL をインストールする場合は、-DWITH_SYSTEMD=1
CMake オプションを使用して配布を構成することで、MySQL の systemd サポートを取得します。 セクション2.9.7「MySQL ソース構成オプション」を参照してください。
次のセクションでは、これらのトピックについて説明します:
systemd support for MySQL がインストールされているプラットフォームでは、mysqld_safe や System V 初期化スクリプトなどのスクリプトは不要であり、インストールされません。 たとえば、mysqld_safe はサーバーの再起動を処理できますが、systemd は同じ機能を提供し、アプリケーション固有のプログラムを使用するのではなく、他のサービスの管理と一貫した方法で処理します。
systemd には、systemd support for MySQL がインストールされているプラットフォームで複数の MySQL インスタンスを管理する機能があるため、mysqld_multi および mysqld_multi.server は不要であり、インストールされません。
systemd は、MySQL サーバーの自動起動および停止を提供します。 また、systemctl コマンドを使用した手動サーバー管理も有効になります。 例:
shell> systemctl {start|stop|restart|status} mysqld
または、System V システムと互換性のある service コマンドを (引数を逆にして) 使用します:
shell> service mysqld {start|stop|restart|status}
systemctl コマンド (および代替の service コマンド) では、MySQL サービス名が mysqld
でない場合、適切な名前を使用します。 たとえば、Debian ベースおよび SLES システムでは、mysqld
ではなく mysql
を使用します。
systemd のサポートには、次のファイルが含まれます:
mysqld.service
(RPM プラットフォーム)、mysql.service
(Debian プラットフォーム): systemd サービスユニット構成ファイル (MySQL サービスの詳細を含む)。mysqld@.service
(RPM プラットフォーム)、mysql@.service
(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 オプションを追加または変更するには、次の方法を使用できます:
ローカライズされた systemd 構成ファイルを使用します。
systemd を配置して、MySQL サーバープロセスの環境変数を設定します。
MYSQLD_OPTS
systemd 変数を設定します。
ローカライズされた systemd 構成ファイルを使用するには、/etc/systemd/system/mysqld.service.d
ディレクトリを作成します (存在しない場合)。 そのディレクトリに、目的の設定をリストする[Service]
セクションを含むファイルを作成します。 例:
[Service]
LimitNOFILE=max_open_files
Nice=nice_level
LimitCore=core_file_limit
Environment="LD_PRELOAD=/path/to/malloc/library"
Environment="TZ=time_zone_setting"
ここでは、このファイルの名前として override.conf
を使用します。 systemd の新しいバージョンでは、次のコマンドがサポートされており、エディタが開き、ファイルを編集できます:
systemctl edit mysqld # RPM platforms
systemctl edit mysql # Debian platforms
override.conf
を作成または変更するたびに、systemd 構成をリロードしてから、MySQL サービスを再起動するように systemd に指示します:
systemctl daemon-reload
systemctl restart mysqld # RPM platforms
systemctl restart mysql # Debian platforms
systemd では、MySQL オプションファイルの[mysqld]
、[mysqld_safe]
または[safe_mysqld]
グループの設定ではなく、特定のパラメータに override.conf
構成方法を使用する必要があります:
一部のパラメータでは、systemd 自体がその値を知っている必要があり、MySQL オプションファイルを読み取って取得できないため、
override.conf
を使用する必要があります。それ以外の場合は、systemd を使用して mysqld_safe が認識するオプションのみを使用して設定可能な値を指定するパラメータを指定する必要があります。これは、対応する mysqld パラメータがないためです。
mysqld_safe ではなく systemd を使用する方法の詳細は、mysqld_safe から 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 8.0 では、mysqld は
Type=notify
プロセス起動タイプを使用します。 (Type=forking
は MySQL 5.7 で使用されていました。)Type=notify
では、systemd によってソケットファイルが自動的に構成され、パスがNOTIFY_SOCKET
環境変数にエクスポートされます。 -
TZ
: この変数を設定して、サーバーのデフォルトのタイムゾーンを指定します。
systemd によって管理される MySQL サーバープロセスで使用する環境変数値を指定するには、複数の方法があります:
override.conf
ファイルでEnvironment
行を使用します。 構文については、このファイルの使用方法を説明している前述の例を参照してください。-
/etc/sysconfig/mysql
ファイルに値を指定します (ファイルが存在しない場合は作成します)。 次の構文を使用して値を割り当てます:LD_PRELOAD=/path/to/malloc/library TZ=time_zone_setting
/etc/sysconfig/mysql
を変更した後、サーバーを再起動して変更を有効にします:systemctl restart mysqld # RPM platforms systemctl restart mysql # Debian platforms
systemd 構成ファイルを直接変更せずに mysqld のオプションを指定するには、MYSQLD_OPTS
systemd 変数を設定または設定解除します。 例:
systemctl set-environment MYSQLD_OPTS="--general_log=1"
systemctl unset-environment MYSQLD_OPTS
MYSQLD_OPTS
は、/etc/sysconfig/mysql
ファイルでも設定できます。
systemd 環境を変更した後、サーバーを再起動して変更を有効にします:
systemctl restart mysqld # RPM platforms
systemctl restart mysql # Debian platforms
systemd を使用するプラットフォームでは、サーバーの起動時に空の場合、データディレクトリが初期化されます。 これは、データディレクトリが一時的に消えたリモートマウントである場合に問題になる可能性があります: マウントポイントは空のデータディレクトリのように見え、新しいデータディレクトリとして初期化されます。 この自動初期化動作を抑制するには、/etc/sysconfig/mysql
ファイルで次の行を指定します (ファイルが存在しない場合は作成します):
NO_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
という名前の 2 つのインスタンスを管理するには、次のようなものをオプションファイルに追加します:
RPM プラットフォーム:
[mysqld@replica01]
datadir=/var/lib/mysql-replica01
socket=/var/lib/mysql-replica01/mysql.sock
port=3307
log-error=/var/log/mysqld-replica01.log
[mysqld@replica02]
datadir=/var/lib/mysql-replica02
socket=/var/lib/mysql-replica02/mysql.sock
port=3308
log-error=/var/log/mysqld-replica02.log
Debian プラットフォーム:
[mysqld@replica01]
datadir=/var/lib/mysql-replica01
socket=/var/lib/mysql-replica01/mysql.sock
port=3307
log-error=/var/log/mysql/replica01.log
[mysqld@replica02]
datadir=/var/lib/mysql-replica02
socket=/var/lib/mysql-replica02/mysql.sock
port=3308
log-error=/var/log/mysql/replica02.log
systemd でサポートされているデリミタは@
のみであるため、ここに示されているレプリカ名はデリミタとして@
を使用します。
その後、インスタンスは次のような通常の systemd コマンドによって管理されます:
systemctl start mysqld@replica01
systemctl start mysqld@replica02
ブート時にインスタンスを実行できるようにするには、次の手順を実行します:
systemctl enable mysqld@replica01
systemctl enable mysqld@replica02
ワイルドカードの使用もサポートされます。 たとえば、次のコマンドはすべてのレプリカインスタンスのステータスを表示します:
systemctl status 'mysqld@replica*'
同じマシン上の複数の MySQL インスタンスを管理するために、systemd は自動的に異なる単位ファイルを使用します:
mysqld.service
(RPM プラットフォーム) ではなくmysqld@.service
mysql.service
(Debian プラットフォーム) ではなくmysql@.service
ユニットファイルでは、%I
および %i
は@
マーカーの後に渡されたパラメータを参照し、特定のインスタンスの管理に使用されます。 次のようなコマンドの場合:
systemctl start mysqld@replica01
systemd は、次のようなコマンドを使用してサーバーを起動します:
mysqld --defaults-group-suffix=@%I ...
その結果、[server]
、[mysqld]
および[mysqld@replica01]
オプショングループが読み取られ、サービスのそのインスタンスに使用されます。
Debian プラットフォームでは、AppArmor は、サーバーが/var/lib/mysql-replica*
またはデフォルト以外の場所を読み書きできないようにします。 これに対処するには、/etc/apparmor.d/usr.sbin.mysqld
でプロファイルをカスタマイズまたは無効化する必要があります。
Debian プラットフォームでは、MySQL のアンインストール用のパッケージ化スクリプトは、現在 mysqld@
インスタンスを処理できません。 パッケージを削除またはアップグレードする前に、追加のインスタンスを手動で停止する必要があります。
systemd を使用して MySQL を管理するプラットフォームには mysqld_safe がインストールされていないため、そのプログラムに対して ([mysqld_safe]
または[safe_mysqld]
オプショングループなどで) 以前に指定したオプションは、別の方法で指定する必要があります:
-
一部の mysqld_safe オプションは mysqld でも認識され、
[mysqld_safe]
または[safe_mysqld]
オプショングループから[mysqld]
グループに移動できます。 これには、--pid-file
、--open-files-limit
または--nice
は含まれません。 これらのオプションを指定するには、前述のoverride.conf
systemd ファイルを使用します。注記systemd プラットフォームでは、
[mysqld_safe]
および[safe_mysqld]
オプショングループの使用はサポートされておらず、予期しない動作を引き起こす可能性があります。 一部の mysqld_safe オプションには、代替の mysqld プロシージャがあります。 たとえば、
syslog
ロギングを有効にするための mysqld_safe オプションは--syslog
で、これは非推奨です。 エラーログ出力をシステムログに書き込むには、セクション5.4.2.8「システムログへのエラーロギング」 の手順を使用します。mysqld で認識されない mysqld_safe オプションは、
override.conf
または環境変数で指定できます。 たとえば、mysqld_safe では、サーバーが特定のメモリー割当てライブラリを使用する必要がある場合、これは--malloc-lib
オプションを使用して指定します。 systemd を使用してサーバーを管理するインストールの場合は、前述のように、かわりにLD_PRELOAD
環境変数を設定します。