MySQL 8.0 リファレンスマニュアル


2.5.9 systemd を使用した MySQL Server の管理

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 の概要

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 の構成

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 サーバーで使用可能なファイル記述子の数を設定するには、mysqldopen_files_limit システム変数または mysqld_safe--open-files-limit オプションではなく、override.confLimitNOFILE を使用します。

  • コアファイルの最大サイズを設定するには、mysqld_safe--core-file-size オプションではなく、override.confLimitCore を使用します。

  • MySQL サーバーのスケジューリング優先度を設定するには、mysqld_safe--nice オプションではなく、override.confNice を使用します。

一部の MySQL パラメータは、環境変数を使用して構成されます:

  • LD_PRELOAD: MySQL サーバーが特定のメモリー割り当てライブラリを使用する必要がある場合は、この変数を設定します。

  • NOTIFY_SOCKET: この環境変数は、mysqld が起動完了およびサービスステータス変更の通知を systemd と通信するために使用するソケットを指定します。 これは、mysqld サービスの起動時に systemd によって設定されます。 mysqld サービスは、変数設定を読み取り、定義された場所に書き込みます。

    MySQL 8.0 では、mysqldType=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

systemd を使用した複数の MySQL インスタンスの構成

このセクションでは、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@インスタンスを処理できません。 パッケージを削除またはアップグレードする前に、追加のインスタンスを手動で停止する必要があります。

mysqld_safe から systemd への移行

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 環境変数を設定します。


関連キーワード:  mysqld, インストール, systemd, プラットフォーム, replica, safe, サーバー, 設定, 構成, systemctl