データベースサーバーの設定および使用


Red Hat Enterprise Linux 10

データベースサーバーでのデータのインストール、設定、バックアップ、および移行

Red Hat Customer Content Services

概要

Red Hat Enterprise Linux 10 に MariaDB、MySQL、または PostgreSQL データベースサーバーをインストールします。選択したデータベースサーバーを設定し、データのバックアップを作成し、データを新しいバージョンのデータベースサーバーに移行します。

Red Hat ドキュメントへのフィードバック (英語のみ)

Red Hat ドキュメントに関するご意見やご感想をお寄せください。また、改善点があればお知らせください。

Jira からのフィードバック送信 (アカウントが必要)

  1. Jira の Web サイトにログインします。
  2. 上部のナビゲーションバーで Create をクリックします。
  3. Summary フィールドにわかりやすいタイトルを入力します。
  4. Description フィールドに、ドキュメントの改善に関するご意見を記入してください。ドキュメントの該当部分へのリンクも追加してください。
  5. ダイアログの下部にある Create をクリックします。

第1章 MariaDB の使用

MariaDB サーバーは、高性能なオープンソースのリレーショナルデータベース管理システム (RDBMS) です。MySQL テクノロジーを基盤に構築されており、データアクセス用の強力な SQL インターフェイスと、複数のストレージエンジンのサポートなどの高度な機能を備えています。

RHEL システムに MariaDB をインストールして設定する方法、MariaDB データをバックアップする方法、MariaDB の以前のバージョンから移行する方法、および MariaDB Galera Cluster を使用してデータベースをレプリケートする方法を説明します。

1.1. MariaDB のインストール

RHEL 10 では、Application Stream の初期バージョンとして MariaDB 10.11 が提供されます。これは、RPM パッケージとしてインストールできます。追加の MariaDB バージョンは、RHEL 10 のマイナーリリースで、ライフサイクルが短いモジュールとして提供されます。

重要

設計上、同じモジュールの 1 つのバージョン (ストリーム) のみをインストールでき、RPM パッケージが競合するため、MariaDB と MySQL を同じホストにインストールすることはできません。代わりに、コンテナー内でデータベースサーバーサービスを実行することもできます。コンテナーを使用して、単一のホスト上で複数の MariaDB および MySQL インスタンスを実行する を参照してください。

手順

  1. MariaDB サーバーパッケージをインストールします。

    # dnf install mariadb-server
    Copy to Clipboard Toggle word wrap
  2. mariadb サービスを有効にして起動します。

    # systemctl enable --now mariadb.service
    Copy to Clipboard Toggle word wrap

パッケージから MariaDB または MySQL をインストールする場合、同じホスト上でこれらのサービスのうち 1 つのみ、かつその 1 つのバージョンのみを実行できます。代わりに、コンテナー内でサービスを実行することもできます。

次のような環境を構成できます。

  • 同じホスト上で MariaDB または MySQL の複数のインスタンスを実行したい。
  • MariaDB と MySQL の両方を同じホストで実行したい。

前提条件

  • podman パッケージがインストールされている。

手順

  1. Red Hat カスタマーポータルアカウントを使用して、registry.redhat.io レジストリーに対して認証します。

    # podman login registry.redhat.io
    Copy to Clipboard Toggle word wrap

    すでにコンテナーレジストリーにログインしている場合は、このステップをスキップしてください。

  2. 使用するコンテナーを起動します。

    • MariaDB 10.11:

      $ podman run -d --name <container_name_1> -e MYSQL_ROOT_PASSWORD=<password> -p <host_port_1>:3306 rhel10/mariadb-1011
      Copy to Clipboard Toggle word wrap

      このコンテナーイメージを使用する方法の詳細は、Red Hat Ecosystem Catalog を参照してください。

    • MySQL 8.4:

      $ podman run -d --name <container_name_2> -e MYSQL_ROOT_PASSWORD=<password> -p <host_port_2>:3306 rhel10/mysql-84
      Copy to Clipboard Toggle word wrap

      このコンテナーイメージを使用する方法の詳細は、Red Hat Ecosystem Catalog を参照してください。

    重要

    2 つのデータベースサーバーのコンテナー名とホストポートが異なっている必要があります。

  3. クライアントがネットワーク上のデータベースサーバーにアクセスできるように、ファイアウォールでホストポートを開きます。

    # firewall-cmd --permanent --add-port={<host_port_1>/tcp,<host_port_2>/tcp,...}
    # firewall-cmd --reload
    Copy to Clipboard Toggle word wrap

検証

  1. データベースサーバーに接続し、root としてログインします。

    # mysql -u root -p -h localhost -P <host_port> --protocol tcp
    Copy to Clipboard Toggle word wrap
  2. オプション: 実行中のコンテナーに関する情報を表示します。

    $ podman ps
    Copy to Clipboard Toggle word wrap

1.3. MariaDB へのネットワークアクセスの設定

リモートクライアントがデータベースサーバーにアクセスできるようにするには、ネットワークインターフェイスをリッスンし、ファイアウォールポートを開くように MariaDB を設定する必要があります。

手順

  1. /etc/my.cnf.d/mariadb-server.cnf ファイルの [mysqld] セクションを編集します。以下の設定ディレクティブを設定できます。

    • bind-address: サーバーがリッスンするアドレスです。設定可能なオプションは以下のとおりです。

      • ホスト名
      • IPv4 アドレス
      • IPv6 アドレス
    • skip-networking: サーバーが TCP/IP 接続をリッスンするかどうかを制御します。可能な値は次のとおりです。

      • 0 - すべてのクライアントをリッスンする
      • 1 - ローカルクライアントのみをリッスンする
    • port: MariaDB が TCP/IP 接続をリッスンするポート。
  2. クライアントがネットワーク上のデータベースサーバーにアクセスできるようにするには、ファイアウォールのポートを開きます。

    # firewall-cmd --permanent --add-service=mysql
    # firewall-cmd --reload
    Copy to Clipboard Toggle word wrap
  3. mariadb サービスを再起動します。

    # systemctl restart mariadb.service
    Copy to Clipboard Toggle word wrap

1.4. MariaDB サーバーでの TLS 暗号化の設定

デフォルトでは、MariaDB は暗号化されていない接続を使用します。セキュアな接続では、MariaDB サーバーで TLS サポートを有効にし、クライアントが暗号化された接続を確立するように設定します。

1.4.1. MariaDB サーバーに CA 証明書、サーバー証明書、および秘密鍵を配置する

MariaDB サーバーで TLS 暗号化を有効にする前に、認証局 (CA) 証明書、サーバー証明書、および秘密鍵を MariaDB サーバーに保存します。

前提条件

  • Privacy Enhanced Mail(PEM) 形式の以下のファイルがサーバーにコピーされています。

    • サーバーの秘密鍵: server.example.com.key.pem
    • サーバー証明書: server.example.com.crt.pem
    • 認証局 (CA) 証明書: ca.crt.pem

    秘密鍵および証明書署名要求 (CSR) の作成や、CA からの証明書要求に関する詳細は、CA のドキュメントを参照してください。

手順

  1. CA およびサーバー証明書を /etc/pki/tls/certs/ ディレクトリーに保存します。

    # mv <path>/server.example.com.crt.pem /etc/pki/tls/certs/
    # mv <path>/ca.crt.pem /etc/pki/tls/certs/
    Copy to Clipboard Toggle word wrap
  2. MariaDB サーバーがファイルを読み込めるように、CA およびサーバー証明書にパーミッションを設定します。

    # chmod 644 /etc/pki/tls/certs/server.example.com.crt.pem /etc/pki/tls/certs/ca.crt.pem
    Copy to Clipboard Toggle word wrap

    証明書は、セキュアな接続が確立される前は通信の一部であるため、任意のクライアントは認証なしで証明書を取得できます。そのため、CA およびサーバーの証明書ファイルに厳密なパーミッションを設定する必要はありません。

  3. サーバーの秘密鍵を /etc/pki/tls/private/ ディレクトリーに保存します。

    # mv <path>/server.example.com.key.pem /etc/pki/tls/private/
    Copy to Clipboard Toggle word wrap
  4. サーバーの秘密鍵にセキュアなパーミッションを設定します。

    # chmod 640 /etc/pki/tls/private/server.example.com.key.pem
    # chgrp mysql /etc/pki/tls/private/server.example.com.key.pem
    Copy to Clipboard Toggle word wrap

    承認されていないユーザーが秘密鍵にアクセスできる場合は、MariaDB サーバーへの接続は安全ではなくなります。

  5. SELinux コンテキストを復元します。

    #  restorecon -Rv /etc/pki/tls/
    Copy to Clipboard Toggle word wrap

1.4.2. MariaDB サーバーでの TLS 暗号化の設定

デフォルトでは、MariaDB は暗号化されていない接続を使用します。よりセキュアな接続のために、MariaDB サーバーで Transport Layer Security (TLS) サポートを有効にし、暗号化された接続を確立するようにクライアントを設定できます。

前提条件

  • MariaDB サーバーがインストールされている。
  • mariadb サービスが実行中である。
  • Privacy Enhanced Mail(PEM) 形式の以下のファイルがサーバー上にあり、mysql ユーザーが読み取りできます。

    • サーバーの秘密鍵: /etc/pki/tls/private/server.example.com.key.pem
    • サーバー証明書: /etc/pki/tls/certs/server.example.com.crt.pem
    • 認証局 (CA) 証明書 /etc/pki/tls/certs/ca.crt.pem
  • サーバー証明書のサブジェクト識別名 (DN) またはサブジェクトの別名 (SAN) フィールドは、サーバーのホスト名と一致します。
  • FIPS モードが有効になっている場合、クライアントは Extended Master Secret (EMS) 拡張機能をサポートしているか、TLS 1.3 を使用している。EMS を使用しない TLS 1.2 接続は失敗します。詳細は、Red Hat ナレッジベースソリューション TLS extension "Extended Master Secret" enforced on RHEL 9.2 and later を参照してください。

手順

  1. /etc/my.cnf.d/mariadb-server-tls.cnf ファイルを作成します。

    1. 以下の内容を追加して、秘密鍵、サーバー、および CA 証明書へのパスを設定します。

      [mariadb]
      ssl_key = /etc/pki/tls/private/server.example.com.key.pem
      ssl_cert = /etc/pki/tls/certs/server.example.com.crt.pem
      ssl_ca = /etc/pki/tls/certs/ca.crt.pem
      Copy to Clipboard Toggle word wrap
    2. 証明書失効リスト (CRL) がある場合は、MariaDB サーバーがそれを使用するように設定します。

      ssl_crl = /etc/pki/tls/certs/example.crl.pem
      Copy to Clipboard Toggle word wrap
    3. オプション: 暗号化なしの接続試行を拒否します。この機能を有効にするには、以下を追加します。

      require_secure_transport = on
      Copy to Clipboard Toggle word wrap
    4. オプション: サーバーがサポートする必要がある TLS バージョンを設定します。たとえば、TLS 1.2 および TLS 1.3 をサポートするには、以下を追加します。

      tls_version = TLSv1.2,TLSv1.3
      Copy to Clipboard Toggle word wrap

      デフォルトでは、サーバーは TLS 1.1、TLS 1.2、および TLS 1.3 をサポートします。

  2. mariadb サービスを再起動します。

    # systemctl restart mariadb
    Copy to Clipboard Toggle word wrap

検証

トラブルシューティングを簡素化するには、ローカルクライアントが TLS 暗号化を使用するように設定する前に、MariaDB サーバーで以下の手順を実行します。

  1. MariaDB で TLS 暗号化が有効になっていることを確認します。

    # mysql -u root -p -e "SHOW GLOBAL VARIABLES LIKE 'have_ssl';"
    +---------------+-----------------+
    | Variable_name | Value           |
    +---------------+-----------------+
    | have_ssl      | YES             |
    +---------------+-----------------+
    Copy to Clipboard Toggle word wrap

    have_ssl 変数が yes に設定されている場合、TLS 暗号化が有効になります。

  2. MariaDB サービスが特定の TLS バージョンのみをサポートするように設定している場合は、tls_version 変数を表示します。

    # mysql -u root -p -e "SHOW GLOBAL VARIABLES LIKE 'tls_version';"
    +---------------+-----------------+
    | Variable_name | Value           |
    +---------------+-----------------+
    | tls_version   | TLSv1.2,TLSv1.3 |
    +---------------+-----------------+
    Copy to Clipboard Toggle word wrap

1.4.3. MariaDB サーバー上の特定のユーザーアカウントに対して TLS 暗号化接続を必須とする

機密データの転送を保護するために、特定の MariaDB ユーザーアカウントに対して TLS 暗号化接続を必須とするように設定できます。

サーバー側ですべての接続に対してセキュアな転送を必須とするように設定 (require_secure_transport = on) できない場合は、個々のユーザーアカウントに対して TLS 暗号化を必須とするように設定してください。

前提条件

  • MariaDB サーバーで TLS サポートが有効になっている。
  • セキュアなトランスポートを必要とするように設定するユーザーが存在する。

手順

  1. 管理ユーザーとして MariaDB サーバーに接続します。

    # mysql -u root -p -h server.example.com
    Copy to Clipboard Toggle word wrap

    管理ユーザーがリモートでサーバーにアクセスするパーミッションを持たない場合は、MariaDB サーバーでコマンドを実行し、localhost に接続します。

  2. REQUIRE SSL 句を使用して、ユーザーが TLS 暗号化接続を使用して接続する必要があるよう強制します。

    MariaDB [(none)]> ALTER USER 'example'@'%' REQUIRE SSL;
    Copy to Clipboard Toggle word wrap

検証

  1. TLS 暗号化を使用して、example ユーザーとしてサーバーに接続します。

    # mysql -u example -p -h server.example.com --ssl
    ...
    MariaDB [(none)]>
    Copy to Clipboard Toggle word wrap

    エラーが表示されず、インタラクティブな MariaDB コンソールにアクセスできる場合は、TLS との接続は成功します。

  2. TLS を無効にして、example ユーザーとして接続を試みます。

    # mysql -u example -p -h server.example.com --skip-ssl
    ERROR 1045 (28000): Access denied for user 'example'@'server.example.com' (using password: YES)
    Copy to Clipboard Toggle word wrap

    このユーザーに TLS が必要だが無効になっているため、サーバーはログインの試行を拒否しました (--skip-ssl)。

1.5. デフォルトで TLS 暗号化を使用するように MariaDB クライアントを設定する

RHEL では、MariaDB クライアントが TLS 暗号化を使用するようにグローバルに設定でき、サーバー証明書の Common Name(CN) がユーザーが接続するホスト名と一致することを検証できます。これにより、man-in-the-middle 攻撃 (中間者攻撃) を防ぎます。

前提条件

  • MariaDB サーバーの TLS サポートが有効になっている。
  • サーバー証明書を発行した認証局 (CA) が RHEL で信頼されていない場合は、CA 証明書がクライアントにコピーされています。
  • FIPS モードが有効になっている場合、このクライアントは Extended Master Secret (EMS) 拡張機能をサポートするか、TLS 1.3 を使用します。EMS を使用しない TLS 1.2 接続は失敗します。詳細は、Red Hat ナレッジベースソリューション TLS extension "Extended Master Secret" enforced on RHEL 9.2 and later を参照してください。

手順

  1. RHEL が、サーバー証明書を発行した CA を信頼しない場合は、以下を行います。

    1. CA 証明書を /etc/pki/ca-trust/source/anchors/ ディレクトリーにコピーします。

      # cp <path>/ca.crt.pem /etc/pki/ca-trust/source/anchors/
      Copy to Clipboard Toggle word wrap
    2. すべてのユーザーが CA 証明書ファイルを読み取りできるようにするパーミッションを設定します。

      # chmod 644 /etc/pki/ca-trust/source/anchors/ca.crt.pem
      Copy to Clipboard Toggle word wrap
    3. CA 信頼データベースを再構築します。

      # update-ca-trust
      Copy to Clipboard Toggle word wrap
  2. 以下の内容で /etc/my.cnf.d/mariadb-client-tls.cnf ファイルを作成します。

    [client-mariadb]
    ssl
    ssl-verify-server-cert
    Copy to Clipboard Toggle word wrap

    これらの設定は、MariaDB クライアントが TLS 暗号化 (ssl) を使用し、クライアントがホスト名をサーバー証明書 (ssl-verify-server-cert) の CN と比較することを定義します。

検証

  • ホスト名を使用してサーバーに接続し、サーバーの状態を表示します。

    # mysql -u root -p -h server.example.com -e status
    ...
    SSL:        Cipher in use is TLS_AES_256_GCM_SHA384
    Copy to Clipboard Toggle word wrap

    SSL エントリーに Cipher in use is…​ が含まれている場合、接続は暗号化されています。

    このコマンドで使用するユーザーには、リモートで認証するパーミッションがあることに注意してください。

    接続するホスト名がサーバーの TLS 証明書のホスト名と一致しない場合、ssl-verify-server-cert パラメーターにより接続が失敗します。たとえば、localhost に接続する場合は、以下のようになります。

    # mysql -u root -p -h localhost -e status
    ERROR 2026 (HY000): SSL connection error: Validation of SSL server certificate failed
    Copy to Clipboard Toggle word wrap

1.6. 論理ダンプを使用した MariaDB データのバックアップと復元

MariaDB データの論理バックアップは、データの復元に必要な SQL ステートメントで構成されます。物理バックアップに対する論理バックアップの利点は、異なるハードウェア構成や MariaDB バージョンでもデータを復元できることです。

1.6.1. mariadb-dump を使用した論理バックアップの実行

mariadb-dump ユーティリティーを使用すると、MariaDB サーバーの実行中にデータベースをバックアップし、エクスポートしたデータを SQL ファイルに保存できます。データが失われた場合に回復できるように、バックアップをセキュアな場所に保存してください。

mariadb-dump がよく使用される場面としては、以下のものがあります。

  • 単一のデータベースのバックアップ
  • 複数のデータベースのバックアップ
  • すべてのデータベースのバックアップ

mariadb-dump ユーティリティーは、出力を 1 つのファイルに保存します。複数のデータベースをバックアップする際に、データベースごとに 1 つのファイルが必要な場合は、各データベースを個別にバックアップしてください。

注記

mariadb-dump ユーティリティーがバックアップできるのは、データベースだけです。これには、mysql データベースに格納されているサーバー設定も含まれます。ただし、このユーティリティーは /etc/my.cnf などの設定ファイルはバックアップしません。

前提条件

  • mariadb サービスが実行中である。
  • root アカウントなど、データベースをバックアップする権限を持つ認証情報を持っている。

手順

  • MariaDB データベースの整合性があり包括的な論理バックアップを作成します。

    # mariadb-dump -u <username> -p --routines --events --triggers --single-transaction --result-file=backup.sql --databases <database_1> <database_2>
    Copy to Clipboard Toggle word wrap

    各項目の説明:

    -u <username>
    ユーティリティーがデータベースサーバーに接続するために使用するユーザー名を設定します。
    -p
    パスワードの入力を求めます。
    --routines
    バックアップにストアドプロシージャーと関数を含めます。
    --events
    スケジュールされたイベントをバックアップに含めます。
    --triggers
    バックアップにトリガーを含めます。
    --single-transaction

    InnoDB などのトランザクションストレージエンジンを使用するデータベースに対して、整合性の取れたスナップショットの作成を開始します。単一のトランザクションを使用すると、すべての読み取り操作が、ダンプ開始時点のデータベースの状態を反映したものになります。

    MyISAM などの非トランザクションストレージエンジンをまだ使用している場合は、整合性のあるバックアップを確保するために、--single-transaction ではなく --lock-tables オプションを使用してください。

    --result-file=<output_file>
    mariadb-dump が出力を保存するファイルを定義します。
    --databases <list_of_databases>

    バックアップするデータベースを定義します。または、すべてのデータベースを一度にバックアップするには、--all-databases オプションを使用します。

    重要

    データベースのバックアップには、そのデータベースのデータのみが含まれます。MariaDB ユーザーアカウントやその他のサーバー設定は含まれません。MariaDB は、この重要なセキュリティー情報やシステム情報を、別の mysql システムデータベースに保存しています。したがって、これらの設定を保持する必要がある場合は、mysql もバックアップする必要があります。

検証

  • サンドボックス環境でバックアップを復元し、データが正しいことを確認します。

1.6.2. SQL 形式のダンプから MariaDB のデータを復元する

1 つまたは複数のデータベースを SQL ファイルにバックアップした場合は、このファイルを使用してデータベース構造とそのデータを再作成できます。

前提条件

  • mariadb サービスが実行中である。
  • root アカウントなど、データを復元する権限を持つ認証情報を持っている。

手順

  1. 復元するデータベースがすでに存在し、SQL ファイルに DROP TABLE IF EXISTS ステートメントが含まれていない場合は、テーブルまたはデータベース全体を手動で削除する必要があります。

    • テーブルを削除するには、次のように入力します。

      # mariadb -u root -p -e "DROP TABLE <database>.<table>;"
      Copy to Clipboard Toggle word wrap

      SQL ファイルによって再作成されるすべてのテーブルに対してこのコマンドを繰り返します。

    • データベースを削除するには、次のように入力します。

      # mariadb -u root -p -e "DROP DATABASE <database>;"
      Copy to Clipboard Toggle word wrap

      SQL ファイルによって再作成されるすべてのデータベースに対してこのコマンドを繰り返します。

  2. SQL ファイルをインポートします。

    # mariadb -u root -p < backup.sql"
    Copy to Clipboard Toggle word wrap

検証

  • MariaDB データベースに接続してデータを照会します。次に例を示します。

    # mariadb -u root -p <database> -e "*SELECT * FROM <table>;"
    Copy to Clipboard Toggle word wrap

1.7. 物理コピーを使用した MariaDB データのバックアップと復元

MariaDB データの物理バックアップには、コンテンツを格納しているファイルとディレクトリーが含まれます。通常、この方法はより高速で、サイズが小さくなります。

1.7.1. mariabackup を使用した物理的なオンラインバックアップの実行

サーバーの実行中に、mariabackup ユーティリティーを使用して InnoDB、Aria、および MyISAM テーブルをバックアップすることにより、MariaDB サーバーの物理的なオンラインバックアップを作成できます。このユーティリティーは、暗号化および圧縮されたデータを含む MariaDB サーバーの完全バックアップ機能をサポートします。

前提条件

  • mariadb-backup パッケージがシステムにインストールされている。
  • バックアップを実行するユーザーの認証情報を mariabackup に提供する必要がある。認証情報はコマンドラインまたは設定ファイルで指定できます。
  • mariabackup のユーザーには、RELOADLOCK TABLES、および REPLICATION CLIENT 特権が必要です。

手順

  • バックアップを作成するには、次のいずれかのオプションを使用します。

    • コマンドラインで認証情報を提供しながらバックアップを作成するには、次のように入力します。

      $ mariabackup --backup --target-dir <backup_directory> --user <backup_user> --password <backup_passwd>
      Copy to Clipboard Toggle word wrap

      target-dir オプションは、バックアップファイルを格納するディレクトリーを定義します。完全バックアップを実行する場合は、ターゲットディレクトリーが空であるか、存在しない必要があります。

      user および password オプションにより、ユーザー名とパスワードを設定できます。

    • 設定ファイルに認証情報を設定してバックアップを作成するには、次のコマンドを実行します。

      1. /etc/my.cnf.d/ ディレクトリーに設定ファイルを作成します (例: /etc/my.cnf.d/mariabackup.cnf)。
      2. 以下の内容をファイルに追加します。

        [mysqld]
        user=<backup_username>
        password=<password>
        Copy to Clipboard Toggle word wrap
      3. バックアップを実行します。

        $ mariabackup --backup --target-dir <backup_directory>
        Copy to Clipboard Toggle word wrap

1.7.2. mariabackup を使用したデータの復元

mariabackup ユーティリティーによって作成された MariaDB バックアップがある場合は、同じユーティリティーを使用してデータを復元できます。

前提条件

  • mariadb サービスが停止しています。
  • データディレクトリーが空です。
  • mariabackup のユーザーには、RELOADLOCK TABLES、および REPLICATION CLIENT 特権が必要です。

手順

  1. データを復元するには、次のいずれかのオプションを使用します。

    • /var/mariadb/backup/ ディレクトリー内のバックアップからデータを復元し、元のバックアップファイルを保持するには、次のように入力します。

      $ mariabackup --copy-back --target-dir=/var/mariadb/backup/
      Copy to Clipboard Toggle word wrap
    • /var/mariadb/backup/ ディレクトリー内のバックアップからデータを復元し、元のバックアップファイルを削除するには、次のように入力します。

      $ mariabackup --move-back --target-dir=/var/mariadb/backup/
      Copy to Clipboard Toggle word wrap
  2. ファイルのパーミッションを修正します。たとえば、ファイルの所有権を mysql ユーザーおよびグループに再帰的に変更するには、次のコマンドを実行します。

    # chown -R mysql:mysql /var/lib/mysql/
    Copy to Clipboard Toggle word wrap

    データベースを復元する際、mariabackup は、バックアップのファイルおよびディレクトリー特権を保持します。ただし、mariabackup は、ユーザーおよびグループがデータベースを復元する際にファイルをディスクに書き込みます。したがって、バックアップを復元した後、MariaDB サーバーのユーザーとグループに合わせてデータディレクトリーの所有者を調整する必要があります。

  3. mariadb サービスを起動します。

    # systemctl start mariadb.service
    Copy to Clipboard Toggle word wrap

1.7.3. MariaDB サーバーでのファイルシステムバックアップの実行

ファイルシステムレベルのバックアップは、MariaDB インスタンス全体をバックアップする高速な方法です。この方法では、データの整合性を保つために mariadb サービスをシャットダウンする必要があります。

重要

ファイルシステムレベルのバックアップは、アーキテクチャーと MariaDB バージョンに固有のものです。この方法でバックアップしたデータを、異なるアーキテクチャーまたは MariaDB バージョンで復元することはできません。

手順

  1. mariadb サービスを停止します。

    # systemctl stop mariadb.service
    Copy to Clipboard Toggle word wrap
  2. バックアップディレクトリーを作成します。次に例を示します。

    # mkdir -p /root/mariadb-backup/{data,config}/
    Copy to Clipboard Toggle word wrap
  3. データディレクトリーをバックアップします。

    # cp -rp /var/lib/mysql/ /root/mariadb-backup/data/
    Copy to Clipboard Toggle word wrap
  4. 設定ファイルをバックアップします。

    # cp -rp /etc/my.cnf /etc/my.cnf.d/ /root/mariadb-backup/config/
    Copy to Clipboard Toggle word wrap
  5. mariadb サービスを起動します。

    # systemctl start mariadb.service
    Copy to Clipboard Toggle word wrap

1.7.4. MariaDB サーバーでのファイルシステムバックアップの復元

MariaDB インスタンスが破損した場合は、以前にデータディレクトリーと設定ファイルを含むファイルシステムバックアップを実行済みであれば、このバックアップからインスタンスを復元できます。

前提条件

手順

  1. mariadb サービスを停止します。

    # systemctl stop mariadb.service
    Copy to Clipboard Toggle word wrap
  2. 現在の /var/lib/mysql/ ディレクトリーを削除します。

    # rm -rf /var/lib/mysql/
    Copy to Clipboard Toggle word wrap
  3. バックアップからデータディレクトリーを復元します。

    # cp -rp /root/mariadb-backup/data/mysql/ /var/lib/
    Copy to Clipboard Toggle word wrap
  4. /var/lib/mysql/ ディレクトリーの所有権を正しく設定します。

    # chown -R mysql:mysql /var/lib/mysql/
    Copy to Clipboard Toggle word wrap
  5. /var/lib/mysql/ ディレクトリーの SELinux コンテキストを復元します。

    # restorecon -Rv /var/lib/mysql/
    Copy to Clipboard Toggle word wrap
  6. 現在の設定ファイルを削除します。

    # rm -rf /etc/my.cnf /etc/my.cnf.d/
    Copy to Clipboard Toggle word wrap
  7. バックアップから設定ファイルを復元します。

    # cp -rp /root/mariadb-backup/config/my.cnf /root/mariadb-backup/config/my.cnf.d/ /etc/
    Copy to Clipboard Toggle word wrap
  8. 設定ファイルの所有権を正しく設定します。

    # chown -R root:root /etc/my.cnf /etc/my.cnf.d/
    Copy to Clipboard Toggle word wrap
  9. 設定ファイルの SELinux コンテキストを復元します。

    # restorecon -Rv /etc/my.cnf /etc/my.cnf.d/
    Copy to Clipboard Toggle word wrap
  10. mariadb サービスを起動します。

    # systemctl start mariadb.service
    Copy to Clipboard Toggle word wrap

検証

  • MariaDB データベースに接続してデータを照会します。次に例を示します。

    # mariadb -u root -p <database> -e "*SELECT * FROM <table>;"
    Copy to Clipboard Toggle word wrap

1.8. Galera で MariaDB を複製する

Galera ソリューションを使用して MariaDB データベースをレプリケートすることで、高可用性とデータの整合性を実現する同期型のマルチソースクラスターを作成できます。

警告

レプリケーション自体は、バックアップソリューションとしては十分ではありません。レプリケーションは、ハードウェア障害からソースサーバーを保護しますが、データ損失に対する保護は保証していません。

1.8.1. MariaDB Galera Cluster の概要

MariaDB Galera Cluster は、すべてのノードへの書き込みを可能にして、クラスター全体のデータの整合性を確保する同期型のマルチソースレプリケーションを提供します。

Galera レプリケーションと MariaDB データベースとの間のインターフェイスは、書き込みセットレプリケーション API (wsrep API) で定義されます。

MariaDB Galera Cluster の主な機能は以下のとおりです。

  • 同期のレプリケーション
  • アクティブ/アクティブのマルチソーストポロジー
  • クラスターノードへの読み取りおよび書き込み
  • 自動メンバーシップ制御、失敗したノードのクラスターからの削除
  • 自動ノードの参加
  • 行レベルの並列レプリケーション
  • ダイレクトクライアント接続: ユーザーはクラスターノードにログインし、レプリケーションの実行中にノードを直接操作できます。

同期レプリケーションとは、サーバーがトランザクションに関連付けられた書き込みセットをクラスター内のすべてのノードにブロードキャストすることで、コミット時にトランザクションをレプリケートすることを意味します。クライアント (ユーザーアプリケーション) は、データベース管理システム (DBMS) に直接接続し、ネイティブの MariaDB と同様の動作が発生します。

同期レプリケーションは、クラスター内の 1 つのノードで発生した変更が、クラスター内の他のノードで同時に発生することを保証します。

そのため、同期レプリケーションには、非同期のレプリケーションと比べて次のような利点があります。

  • 特定のクラスターノード間の変更の伝播に遅延がない
  • すべてのクラスターノードには常に一貫性がある
  • いずれかのクラスターノードがクラッシュしても、最新の変更は失われない
  • すべてのクラスターノードのトランザクションが並列に実行する
  • クラスター全体にわたる因果関係

1.8.2. MariaDB Galera Cluster を構築するためのコンポーネント

正常に動作し、同期レプリケーションを行う MariaDB Galera Cluster をデプロイする前に、中核となるソフトウェアコンポーネントをインストールし、その機能を理解する必要があります。そのコンポーネントとは、具体的には MariaDB サーバー、Galera Replication ライブラリー、および補助的な Galera パッケージです。

MariaDB Galera Cluster を構築するには、システムに以下のパッケージをインストールする必要があります。

  • mariadb-server-galera: MariaDB Galera Cluster のサポートファイルとスクリプトが含まれます。
  • mariadb-server: MariaDB アップストリームがパッチを適用し、書き込みセットレプリケーション API (wsrep API) を組み込みます。この API は、Galera レプリケーションと MariaDB との間のインターフェイスを提供します。
  • galera: MariaDB アップストリームがパッチを適用し、MariaDB の完全サポートを追加します。galera パッケージには、以下の内容が含まれます。

    • Galera Replication Library は、レプリケーション機能全体を提供します。
    • Galera Arbitrator ユーティリティーは、スプリットブレインのシナリオで投票に参加するクラスターメンバーとして使用できます。ただし、Galera Arbitrator は実際のレプリケーションには参加できません。
    • Galera Arbitrator ユーティリティーのデプロイに使用される Galera Systemd service および Galera wrapper script。RHEL 10 は、/usr/lib/systemd/system/garbd.service および /usr/sbin/garb-systemd にあるこれらのファイルのアップストリームバージョンを提供します。

1.8.3. MariaDB Galera Cluster のデプロイメント

必要なパッケージをインストールし、クラスターの設定を行い、最初のノードをブートストラップして新しいクラスターを作成することにより、MariaDB Galera Cluster をデプロイできます。

前提条件

  • クラスター内のすべてのノードに TLS がセットアップ されている。
  • すべてのノード上のすべての証明書の Extended Key Usage フィールドが次のように設定されている。

    TLS Web Server Authentication, TLS Web Client Authentication
    Copy to Clipboard Toggle word wrap

手順

  1. MariaDB Galera Cluster パッケージをインストールします。

    # dnf install mariadb-server-galera
    Copy to Clipboard Toggle word wrap

    その結果、次のパッケージが依存関係とともにインストールされます。

  2. システムを初めてクラスターに追加する前に、MariaDB サーバーのレプリケーション設定を更新します。デフォルト設定は、/etc/my.cnf.d/galera.cnf ファイルに含まれています。MariaDB Galera Cluster をデプロイする前に、以下の文字列で開始するように、すべてのノードの /etc/my.cnf.d/galera.cnf ファイルに wsrep_cluster_address オプションを設定します。

    gcomm://
    Copy to Clipboard Toggle word wrap
    • 初期ノードでは、wsrep_cluster_address を空のリストとして設定できます。

      wsrep_cluster_address="gcomm://"
      Copy to Clipboard Toggle word wrap
    • その他のすべてのノードでは、wsrep_cluster_address を設定して、実行中のクラスターに属するノードへのアドレスを追加します。以下に例を示します。

      wsrep_cluster_address="gcomm://10.0.0.10"
      Copy to Clipboard Toggle word wrap

      Galera Cluster アドレスの設定方法は、Galera Cluster Address を参照してください。

  3. /etc/my.cnf.d/galera.cnf 設定ファイルで wsrep_on=1 オプションを設定して、すべてのノードで wsrep API を有効にします。
  4. TLS 鍵と証明書を含む Galera 設定ファイルに wsrep_provider_options 変数を追加します。以下に例を示します。

    wsrep_provider_options="socket.ssl_cert=/etc/pki/tls/certs/source.crt;socket.ssl_key=/etc/pki/tls/private/source.key;socket.ssl_ca=/etc/pki/tls/certs/ca.crt"
    Copy to Clipboard Toggle word wrap
  5. ノードで以下のラッパーを実行して、新規クラスターの最初のノードをブートストラップします。

    # galera_new_cluster
    Copy to Clipboard Toggle word wrap

    このラッパーにより、MariaDB サーバーデーモン (mariadbd) に --wsrep-new-cluster オプションが指定されて実行されるようになります。このオプションは、接続する既存クラスターがないという情報を提供します。したがって、ノードは新規 UUID を作成し、新しいクラスターを特定します。

    注記

    mariadb サービスは、複数の MariaDB サーバープロセスと対話する systemd メソッドをサポートします。したがって、複数の MariaDB サーバーが実行中の場合は、インスタンス名を接尾辞として指定することで、特定のインスタンスをブートストラップできます。

    # galera_new_cluster mariadb@node1
    Copy to Clipboard Toggle word wrap
  6. 各ノードで次のコマンドを実行して、その他のノードをクラスターに接続します。

    # systemctl start mariadb
    Copy to Clipboard Toggle word wrap

    その結果、ノードはクラスターに接続し、それ自体をクラスターの状態と同期します。

1.8.4. MariaDB Galera クラスターのステータスの確認

MariaDB Galera クラスターの健全性、パフォーマンス、同期を監視し、確保することが重要です。そのためには、各ノードのステータス変数をクエリーして、ノードとクラスターを監視できます。

MariaDB Galera クラスターのステータスを確認するには、次のクエリーを使用します。

  • クラスター内のノードの数を表示します。

    # mysql -u root -p -e 'show status like "wsrep_cluster_size";'
    +--------------------+-------+
    | Variable_name      | Value |
    +--------------------+-------+
    | wsrep_cluster_size | 4     |
    +--------------------+-------+
    Copy to Clipboard Toggle word wrap
  • ノードのクラスターコンポーネントのステータスを表示します。

    # mysql -u root -p -e 'show status like "wsrep_cluster_status";'
    +----------------------+---------+
    | Variable_name        | Value   |
    +----------------------+---------+
    | wsrep_cluster_status | Primary |
    +----------------------+---------+
    Copy to Clipboard Toggle word wrap

    wsrep_cluster_status 変数の値は、現在のノードが属するクラスターコンポーネントのステータスを示します。可能な値は次のとおりです。

    • Primary: クラスターは正常に機能しています。定足数が満たされています。正常なクラスターでは、すべてのノードが Primary を報告します。
    • Non-primary: ノードはクラスターのプライマリーコンポーネントへの接続を失い、アクティブクラスターの一部ではなくなりました。ただし、ノードは引き続き読み取りクエリーを処理できますが、書き込み操作を処理することはできません。
    • Disconnected: ノードはどのクラスターコンポーネントにも接続されていません。その結果、クエリーを受け入れることができず、データはレプリケートされません。
  • ノードのステータスを表示します。

    # mysql -u root -p -e 'show status like "wsrep_local_state_comment";'
    +---------------------------+--------+
    | Variable_name             | Value  |
    +---------------------------+--------+
    | wsrep_local_state_comment | Synced |
    +---------------------------+--------+
    Copy to Clipboard Toggle word wrap

    wsrep_local_state_comment 変数の頻繁に使用される値は次のとおりです。

    • Synced: ノードはクラスター内で完全に同期されており、レプリケーションにアクティブに参加しています。
    • Desynced: ノードは引き続きクラスターの一部ですが、状態の遷移で主にビジー状態です。
    • Joining: ノードはクラスターへの参加処理中です。
    • Joined: ノードはクラスターに正常に参加しました。クラスターから書き込みセットを受信して適用できます。
    • Donor: ノードは現在、State Snapshot Transfer (SST) を提供しています。新しいノードが参加して完全な状態の遷移が必要な場合、クラスターは既存のノードを選択して必要なデータを送信します。
  • ノードがクラスターからの書き込みセットを受け入れるかどうかを確認します。

    # mysql -u root -p -e 'show status like "wsrep_ready";'
    +---------------+-------+
    | Variable_name | Value |
    +---------------+-------+
    | wsrep_ready   | ON    |
    +---------------+-------+
    Copy to Clipboard Toggle word wrap

    wsrep_ready 変数が ON の場合、ノードはコンポーネントを正常に初期化し、クラスターに接続されています。さらに、ノードは同期されているか、クエリーを処理できる状態に達しています。

  • ノードが他のホストとネットワーク接続されているか確認します。

    # mysql -u root -p -e 'show status like "wsrep_connected";'
    +-----------------+-------+
    | Variable_name   | Value |
    +-----------------+-------+
    | wsrep_connected | ON    |
    +-----------------+-------+
    Copy to Clipboard Toggle word wrap

    ON 値は、ノードがクラスター内の少なくとも 1 つのメンバーに接続されていることを意味します。

  • 最後の FLUSH STATUS コマンド以降、またはサーバーの起動以降の書き込みセットのローカル受信キューの平均サイズを表示します。

    # mysql -u root -p -e 'show status like "wsrep_local_recv_queue_avg";'
    +----------------------------+-------+
    | Variable_name              | Value |
    +----------------------------+-------+
    | wsrep_local_recv_queue_avg | 0.012 |
    +----------------------------+-------+
    Copy to Clipboard Toggle word wrap

    0 に近い値は理想的な状態であり、ノードが書き込みセットを受信するとそれを適用し続けることを示します。値が継続的に高い、または増加している場合は、ディスク I/O が遅いなどのパフォーマンスのボトルネックが発生している可能性があります。

  • フロー制御ステータスを表示します。

    # mysql -u root -p -e 'show status like "wsrep_flow_control_paused";'
    +---------------------------+-------+
    | Variable_name             | Value |
    +---------------------------+-------+
    | wsrep_flow_control_paused | 0     |
    +---------------------------+-------+
    Copy to Clipboard Toggle word wrap

    この変数は、ローカル受信キューがいっぱいでフロー制御がトリガーされたために、ノードが一時停止され、新しい着信トランザクションを処理できない時間の割合を表します。値が 0 に近い場合、ノードはレプリケーションワークロードを効率的に継続していることを示します。値が 1.0 に近づくと、ノードが書き込みセットの適用で頻繁または継続的に問題に遭遇し、クラスターのボトルネックになる可能性があることを意味します。

    ノードが頻繁に一時停止する場合は、/etc/my.cnf.d/galera.cnf ファイルの wsrep_slave_threads パラメーターを調整できます。

  • ノードが並列に適用できる最小シーケンス番号と最大シーケンス番号間の平均距離を表示します。

    # mysql -u root -p -e 'show status like "wsrep_cert_deps_distance";'
    +--------------------------+-------+
    | Variable_name            | Value |
    +--------------------------+-------+
    | wsrep_cert_deps_distance | 1     |
    +--------------------------+-------+
    Copy to Clipboard Toggle word wrap

    値が大きいほど、並列度が高くなります。これは、/etc/my.cnf.d/galera.cnf ファイルの wsrep_slave_threads パラメーターで使用できる最適な値です。

1.8.5. MariaDB Galera Cluster への新しいノードの追加

ノードの設定ファイルでクラスターアドレスを設定することにより、MariaDB Galera Cluster に新しいノードを追加したり、既存のノードに再接続したりできます。

手順

  • 特定のノードで、/etc/my.cnf.d/galera.cnf 設定ファイルの [mariadb] セクション内にある wsrep_cluster_address オプションで、1 つ以上の既存クラスターメンバーにアドレスを指定します。

    [mariadb]
    wsrep_cluster_address="gcomm://192.168.0.1"
    Copy to Clipboard Toggle word wrap

    新規ノードを既存クラスターノードのいずれかに接続すると、クラスター内のすべてのノードを表示できるようになります。

    ただし、wsrep_cluster_address にクラスターのすべてのノードをリスト表示することを推奨します。

    したがって、1 つ以上のクラスターノードがダウンしても、その他のクラスターノードに接続することでノードがクラスターに参加できます。すべてのメンバーがメンバーシップに同意すると、クラスターの状態が変更します。新規ノードの状態がクラスターの状態と異なる場合、新しいノードは Incremental State Transfer (IST) または State Snapshot Transfer (SST) のいずれかを要求し、他のノードとの一貫性を確保します。

1.8.6. MariaDB Galera Cluster の再起動

すべてのノードを同時にシャットダウンすると、クラスターが終了し、実行中のクラスターは存在しなくなります。ただし、クラスターのデータは引き続き存在します。

クラスターを再起動するには、MariaDB Galera Cluster のデプロイ の説明に従って、最初のノードをブートストラップします。

警告

クラスターがブートストラップされておらず、最初のノードの mariadbsystemctl start mariadb コマンドのみで起動された場合、ノードは /etc/my.cnf.d/galera.cnf ファイルの wsrep_cluster_address オプションにリスト表示されているノードの 1 つ以上に接続しようとします。現在実行中のノードがない場合、再起動は失敗します。

1.9. MariaDB インスタンスを以前の RHEL バージョンから RHEL 10 上の MariaDB 10.11 に移行する

RHEL 10 では MariaDB 10.11 が提供されます。以前の RHEL バージョンで MariaDB インスタンスを実行している場合は、新しいホストに RHEL 10 をセットアップし、インスタンスを移行できます。

前提条件

  • 新しいホストに RHEL 10 をセットアップした。
  • RHEL 8 または RHEL 9 ホスト上の MariaDB インスタンスのファイルシステムバックアップを実行した。

手順

  1. mariadb-server パッケージをインストールします。

    # dnf install mariadb-server
    Copy to Clipboard Toggle word wrap
  2. サービスがすでに実行されている場合は停止します。

    # systemctl stop mariadb.service
    Copy to Clipboard Toggle word wrap
  3. 以前のホストの /var/lib/mysql/ ディレクトリーの内容を、RHEL 10 ホストの同じ場所にコピーします。
  4. 以前のホストから /etc/my.cnf.d/ ディレクトリーに設定ファイルをコピーし、ファイルに MariaDB 10.11 に有効なオプションのみが含まれていることを確認します。詳細は、アップストリームのドキュメント を参照してください。
  5. SELinux コンテキストを復元します。

    # restorecon -rv /var/lib/mysql/
    # restorecon -rv /etc/my.cnf.d/
    Copy to Clipboard Toggle word wrap
  6. /var/lib/mysql/ とそのサブディレクトリーの正しい所有権を確認します。

    # chown -R mysql:mysql /var/lib/mysql/
    Copy to Clipboard Toggle word wrap
  7. mariadb サービスを有効にして起動します。

    # systemctl enable --now mariadb.service
    Copy to Clipboard Toggle word wrap

    サービスが開始されると、MariaDB は内部テーブルを自動的にチェック、修復、更新します。

検証

  • MariaDB サーバーへの接続を確立します。

    # mysql -u root -p -h <hostname>
    Copy to Clipboard Toggle word wrap

第2章 MySQL の使用

MySQL サーバーは、高性能なオープンソースのリレーショナルデータベース管理システム (RDBMS) です。データアクセス用の SQL インターフェイスと、複数のストレージエンジンのサポートなどの高度な機能を備えています。

RHEL システムに MySQL をインストールして設定する方法、MySQL データをバックアップする方法、以前の MySQL バージョンから移行する方法、および MySQL データベースをレプリケートする方法を説明します。

2.1. MySQL のインストール

RHEL 10 では、Application Stream の初期バージョンとして MySQL 8.4 が提供されます。これは、RPM パッケージとしてインストールできます。追加の MySQL バージョンは、RHEL 10 のマイナーリリースで、ライフサイクルが短いモジュールとして提供されます。

注記

設計上、同じモジュールの 1 つのバージョン (ストリーム) のみをインストールでき、RPM パッケージが競合するため、MariaDB と MySQL を同じホストにインストールすることはできません。代わりに、コンテナー内でデータベースサーバーサービスを実行することもできます。コンテナーを使用して、単一のホスト上で複数の MariaDB および MySQL インスタンスを実行する を参照してください。

手順

  1. MySQL サーバーパッケージをインストールします。

    # dnf install mysql8.4-server
    Copy to Clipboard Toggle word wrap
  2. mysqld サービスを有効にして起動します。

    # systemctl enable --now mysqld.service
    Copy to Clipboard Toggle word wrap
  3. インストール後のセキュリティーを強化します。

    $ mysql_secure_installation
    Copy to Clipboard Toggle word wrap

    このコマンドは、完全にインタラクティブなスクリプトを起動して、プロセスの各ステップのプロンプトを表示します。このスクリプトを使用すると、次の方法でセキュリティーを改善できます。

    • root アカウントのパスワードの設定
    • 匿名ユーザーの削除
    • リモート root ログインの拒否 (ローカルホスト外)

パッケージから MariaDB または MySQL をインストールする場合、同じホスト上でこれらのサービスのうち 1 つのみ、かつその 1 つのバージョンのみを実行できます。代わりに、コンテナー内でサービスを実行することもできます。

次のような環境を構成できます。

  • 同じホスト上で MariaDB または MySQL の複数のインスタンスを実行したい。
  • MariaDB と MySQL の両方を同じホストで実行したい。

前提条件

  • podman パッケージがインストールされている。

手順

  1. Red Hat カスタマーポータルアカウントを使用して、registry.redhat.io レジストリーに対して認証します。

    # podman login registry.redhat.io
    Copy to Clipboard Toggle word wrap

    すでにコンテナーレジストリーにログインしている場合は、このステップをスキップしてください。

  2. 使用するコンテナーを起動します。

    • MariaDB 10.11:

      $ podman run -d --name <container_name_1> -e MYSQL_ROOT_PASSWORD=<password> -p <host_port_1>:3306 rhel10/mariadb-1011
      Copy to Clipboard Toggle word wrap

      このコンテナーイメージを使用する方法の詳細は、Red Hat Ecosystem Catalog を参照してください。

    • MySQL 8.4:

      $ podman run -d --name <container_name_2> -e MYSQL_ROOT_PASSWORD=<password> -p <host_port_2>:3306 rhel10/mysql-84
      Copy to Clipboard Toggle word wrap

      このコンテナーイメージを使用する方法の詳細は、Red Hat Ecosystem Catalog を参照してください。

    重要

    2 つのデータベースサーバーのコンテナー名とホストポートが異なっている必要があります。

  3. クライアントがネットワーク上のデータベースサーバーにアクセスできるように、ファイアウォールでホストポートを開きます。

    # firewall-cmd --permanent --add-port={<host_port_1>/tcp,<host_port_2>/tcp,...}
    # firewall-cmd --reload
    Copy to Clipboard Toggle word wrap

検証

  1. データベースサーバーに接続し、root としてログインします。

    # mysql -u root -p -h localhost -P <host_port> --protocol tcp
    Copy to Clipboard Toggle word wrap
  2. オプション: 実行中のコンテナーに関する情報を表示します。

    $ podman ps
    Copy to Clipboard Toggle word wrap

2.3. MySQL へのネットワークアクセスの設定

リモートクライアントがデータベースサーバーにアクセスできるようにするには、ネットワークインターフェイスをリッスンし、ファイアウォールポートを開くように MySQL を設定する必要があります。

手順

  1. /etc/my.cnf.d/mysql-server.cnf ファイルの mysqld セクションを編集します。以下の設定ディレクティブを設定できます。

    • bind-address: サーバーがリッスンするアドレスです。設定可能なオプションは以下のとおりです。

      • ホスト名
      • IPv4 アドレス
      • IPv6 アドレス
    • skip-networking: サーバーが TCP/IP 接続をリッスンするかどうかを制御します。可能な値は次のとおりです。

      • 0 - すべてのクライアントをリッスンする
      • 1 - ローカルクライアントのみをリッスンする
    • port: MySQL が TCP/IP 接続をリッスンするポート。
  2. クライアントがネットワーク上のデータベースサーバーにアクセスできるようにするには、ファイアウォールのポートを開きます。

    # firewall-cmd --permanent --add-service=mysql
    # firewall-cmd --reload
    Copy to Clipboard Toggle word wrap
  3. mysqld サービスを再起動します。

    # systemctl restart mysqld.service
    Copy to Clipboard Toggle word wrap

2.4. MySQL サーバーでの TLS 暗号化の設定

デフォルトでは、MySQL は暗号化されていない接続を使用します。安全な接続のために、MySQL サーバーで TLS サポートを有効にし、暗号化された接続を確立するようにクライアントを設定します。

2.4.1. MySQL サーバーに CA 証明書、サーバー証明書、および秘密鍵を配置する

MySQL サーバーで TLS 暗号化を有効にする前に、認証局 (CA) 証明書、サーバー証明書、および秘密鍵を MySQL サーバーに保存します。

前提条件

  • Privacy Enhanced Mail(PEM) 形式の以下のファイルがサーバーにコピーされています。

    • サーバーの秘密鍵: server.example.com.key.pem
    • サーバー証明書: server.example.com.crt.pem
    • 認証局 (CA) 証明書: ca.crt.pem

    秘密鍵および証明書署名要求 (CSR) の作成や、CA からの証明書要求に関する詳細は、CA のドキュメントを参照してください。

手順

  1. CA およびサーバー証明書を /etc/pki/tls/certs/ ディレクトリーに保存します。

    # mv <path>/server.example.com.crt.pem /etc/pki/tls/certs/
    # mv <path>/ca.crt.pem /etc/pki/tls/certs/
    Copy to Clipboard Toggle word wrap
  2. MySQL サーバーがファイルを読み取れるように、CA とサーバー証明書のパーミッションを設定します。

    # chmod 644 /etc/pki/tls/certs/server.example.com.crt.pem /etc/pki/tls/certs/ca.crt.pem
    Copy to Clipboard Toggle word wrap

    証明書は、セキュアな接続が確立される前は通信の一部であるため、任意のクライアントは認証なしで証明書を取得できます。そのため、CA およびサーバーの証明書ファイルに厳密なパーミッションを設定する必要はありません。

  3. サーバーの秘密鍵を /etc/pki/tls/private/ ディレクトリーに保存します。

    # mv <path>/server.example.com.key.pem /etc/pki/tls/private/
    Copy to Clipboard Toggle word wrap
  4. サーバーの秘密鍵にセキュアなパーミッションを設定します。

    # chmod 640 /etc/pki/tls/private/server.example.com.key.pem
    # chgrp mysql /etc/pki/tls/private/server.example.com.key.pem
    Copy to Clipboard Toggle word wrap

    承認されていないユーザーが秘密鍵にアクセスできる場合、MySQL サーバーへの接続は安全ではなくなります。

  5. SELinux コンテキストを復元します。

    # restorecon -Rv /etc/pki/tls/
    Copy to Clipboard Toggle word wrap

2.4.2. MySQL サーバーでの TLS 暗号化の設定

デフォルトでは、MySQL は暗号化されていない接続を使用します。よりセキュアな接続のために、MySQL サーバーで Transport Layer Security (TLS) サポートを有効にし、暗号化された接続を確立するようにクライアントを設定できます。

前提条件

  • MySQL サーバーがインストールされている。
  • mysqld サービスが実行されている。
  • Privacy Enhanced Mail(PEM) 形式の以下のファイルがサーバー上にあり、mysql ユーザーが読み取りできます。

    • サーバーの秘密鍵: /etc/pki/tls/private/server.example.com.key.pem
    • サーバー証明書: /etc/pki/tls/certs/server.example.com.crt.pem
    • 認証局 (CA) 証明書 /etc/pki/tls/certs/ca.crt.pem
  • サーバー証明書のサブジェクト識別名 (DN) またはサブジェクトの別名 (SAN) フィールドは、サーバーのホスト名と一致します。

手順

  1. /etc/my.cnf.d/mysql-server-tls.cnf ファイルを作成します。

    1. 以下の内容を追加して、秘密鍵、サーバー、および CA 証明書へのパスを設定します。

      [mysqld]
      ssl_key = /etc/pki/tls/private/server.example.com.key.pem
      ssl_cert = /etc/pki/tls/certs/server.example.com.crt.pem
      ssl_ca = /etc/pki/tls/certs/ca.crt.pem
      Copy to Clipboard Toggle word wrap
    2. 証明書失効リスト (CRL) がある場合は、それを使用するように MySQL サーバーを設定します。

      ssl_crl = /etc/pki/tls/certs/example.crl.pem
      Copy to Clipboard Toggle word wrap
    3. オプション: 暗号化なしの接続試行を拒否します。この機能を有効にするには、以下を追加します。

      require_secure_transport = on
      Copy to Clipboard Toggle word wrap
    4. オプション: サーバーがサポートする必要がある TLS バージョンを設定します。たとえば、TLS 1.3 のみをサポートするには、次を追加します。

      tls_version = TLSv1.3
      Copy to Clipboard Toggle word wrap

      デフォルトでは、サーバーは TLS 1.2 と TLS 1.3 をサポートします。

  2. mysqld サービスを再起動します。

    # systemctl restart mysqld
    Copy to Clipboard Toggle word wrap

検証

トラブルシューティングを簡素化するには、ローカルクライアントが TLS 暗号化を使用するように設定する前に、MySQL サーバーで以下の手順を実行します。

  1. MySQL で TLS 暗号化が有効になっていることを確認します。

    # mysql -u root -p -h <MySQL_server_hostname> -e "SHOW session status LIKE 'Ssl_cipher';"
    +---------------+------------------------+
    | Variable_name | Value                  |
    +---------------+------------------------+
    | Ssl_cipher    | TLS_AES_256_GCM_SHA384 |
    +---------------+------------------------+
    Copy to Clipboard Toggle word wrap
  2. MySQL サーバーが特定の TLS バージョンのみをサポートするように設定している場合は、tls_version 変数を表示します。

    # mysql -u root -p -e "SHOW GLOBAL VARIABLES LIKE 'tls_version';"
    +---------------+---------+
    | Variable_name | Value   |
    +---------------+---------+
    | tls_version   | TLSv1.3 |
    +---------------+---------+
    Copy to Clipboard Toggle word wrap
  3. サーバーが正しい CA 証明書、サーバー証明書、および秘密鍵ファイルを使用していることを確認します。

    # mysql -u root -e "SHOW GLOBAL VARIABLES WHERE Variable_name REGEXP '{caret}ssl_ca|{caret}ssl_cert|{caret}ssl_key';"
    +-----------------+-------------------------------------------------+
    | Variable_name   | Value                                           |
    +-----------------+-------------------------------------------------+
    | ssl_ca          | /etc/pki/tls/certs/ca.crt.pem                   |
    | ssl_capath      |                                                 |
    | ssl_cert        | /etc/pki/tls/certs/server.example.com.crt.pem   |
    | ssl_key         | /etc/pki/tls/private/server.example.com.key.pem |
    +-----------------+-------------------------------------------------+
    Copy to Clipboard Toggle word wrap

2.4.3. MySQL サーバー上の特定のユーザーアカウントに対して TLS 暗号化接続を必須とする

機密データの転送を保護するために、特定の MySQL ユーザーアカウントに対して TLS 暗号化接続を必須とするように設定できます。

サーバー側ですべての接続に対してセキュアな転送を必須とするように設定 (require_secure_transport = on) できない場合は、個々のユーザーアカウントに対して TLS 暗号化を必須とするように設定してください。

前提条件

  • MySQL サーバーで TLS サポートが有効になっている。
  • セキュアなトランスポートを必要とするように設定するユーザーが存在する。
  • CA 証明書がクライアントに保存されている。

手順

  1. 管理ユーザーとして MySQL サーバーに接続します。

    # mysql -u root -p -h server.example.com
    Copy to Clipboard Toggle word wrap

    管理ユーザーがリモートでサーバーにアクセスするパーミッションを持たない場合は、MySQL サーバーでコマンドを実行し、localhost に接続します。

  2. REQUIRE SSL 句を使用して、ユーザーが TLS 暗号化接続を使用して接続する必要があるよう強制します。

    MySQL [(none)]> ALTER USER 'example'@'%' REQUIRE SSL;
    Copy to Clipboard Toggle word wrap

検証

  1. TLS 暗号化を使用して、example ユーザーとしてサーバーに接続します。

    # mysql -u example -p -h server.example.com
    ...
    MySQL [(none)]>
    Copy to Clipboard Toggle word wrap

    エラーが表示されず、インタラクティブな MySQL コンソールにアクセスできる場合は、TLS による接続は成功しています。

    デフォルトでは、サーバーが TLS 暗号化を提供している場合、クライアントは自動的にその TLS 暗号化を使用します。したがって、--ssl-ca=ca.crt.pem および --ssl-mode=VERIFY_IDENTITY オプションは必須ではありません。ただし、これらのオプションを使用するとクライアントはサーバーの ID を検証するため、セキュリティーが向上します。

  2. TLS を無効にして、example ユーザーとして接続を試みます。

    # mysql -u example -p -h server.example.com --ssl-mode=DISABLED
    ERROR 1045 (28000): Access denied for user 'example'@'server.example.com' (using password: YES)
    Copy to Clipboard Toggle word wrap

    このユーザーには TLS が必要なのにもかかわらず無効になっているため、サーバーはログインの試行を拒否しました (--ssl-mode=DISABLED)。

2.5. デフォルトで TLS 暗号化を使用するように MySQL クライアントを設定する

RHEL では、MySQL クライアントが TLS 暗号化を使用するようにグローバルに設定でき、サーバー証明書の Common Name (CN) が、ユーザーが接続するホスト名と一致することを検証します。これにより、man-in-the-middle 攻撃 (中間者攻撃) を防ぎます。

前提条件

  • MySQL サーバーで TLS サポートが有効になっている。
  • CA 証明書は、クライアントの /etc/pki/tls/certs/ca.crt.pem ファイルに保存されます。

手順

  • 以下の内容で /etc/my.cnf.d/mysql-client-tls.cnf ファイルを作成します。

    [client]
    ssl-mode=VERIFY_IDENTITY
    ssl-ca=/etc/pki/tls/certs/ca.crt.pem
    Copy to Clipboard Toggle word wrap

    これらの設定は、MySQL クライアントが TLS 暗号化を使用すること、およびクライアントがホスト名をサーバー証明書の CN と比較することを定義します (ssl-mode=VERIFY_IDENTITY)。さらに、CA 証明書 (ssl-ca) へのパスも指定します。

検証

  • ホスト名を使用してサーバーに接続し、サーバーの状態を表示します。

    # mysql -u root -p -h server.example.com -e status
    ...
    SSL:        Cipher in use is TLS_AES_256_GCM_SHA384
    Copy to Clipboard Toggle word wrap

    SSL エントリーに Cipher in use is…​ が含まれている場合、接続は暗号化されています。

    このコマンドで使用するユーザーには、リモートで認証するパーミッションがあることに注意してください。

    接続するホスト名がサーバーの TLS 証明書のホスト名と一致しない場合、ssl-mode=VERIFY_IDENTITY パラメーターにより接続が失敗します。たとえば、localhost に接続する場合は、以下のようになります。

    # mysql -u root -p -h localhost -e status
    ERROR 2026 (HY000): SSL connection error: error:0A000086:SSL routines::certificate verify failed
    Copy to Clipboard Toggle word wrap

2.6. 論理ダンプを使用した MySQL データのバックアップと復元

MySQL データの論理バックアップは、データの復元に必要な SQL ステートメントで構成されます。物理バックアップに対する論理バックアップの利点は、異なるハードウェア構成や MySQL バージョンでもデータを復元できることです。

2.6.1. mysqldump を使用した論理バックアップの実行

mysqldump ユーティリティーは、1 つ以上のデータベースをエクスポートできるバックアップユーティリティーです。mysqldump の出力は通常、サーバーテーブル構造を再作成したり、そこにデータを入力したり、またはその両方を行う SQL ステートメントで構成されます。

mysqldump バックアップを実行するには、以下のいずれかのオプションを使用できます。

  • 選択したデータベースを 1 つまたは複数バックアップ
  • すべてのデータベースをバックアップする。
  • あるデータベースのテーブルのサブセットのバックアップを作成する。

手順

  • 単一のデータベースをダンプするには、以下を実行します。

    # mysqldump [options] --databases db_name > backup-file.sql
    Copy to Clipboard Toggle word wrap
  • 複数のデータベースを一度にダンプするには、次のコマンドを実行します。

    # mysqldump [options] --databases db_name1 [db_name2 ...] > backup-file.sql
    Copy to Clipboard Toggle word wrap
  • すべてのデータベースをダンプするには、以下を実行します。

    # mysqldump [options] --all-databases > backup-file.sql
    Copy to Clipboard Toggle word wrap
  • 1 つ以上のダンプされたフルデータベースをサーバーにロードし直すには、以下を実行します。

    # mysql < backup-file.sql
    Copy to Clipboard Toggle word wrap
  • データベースをリモート MySQL サーバーにロードするには、以下を実行します。

    # mysql --host=remote_host < backup-file.sql
    Copy to Clipboard Toggle word wrap
  • 1 つのデータベースからテーブルのサブセットをダンプするには、mysqldump コマンドの末尾に、選択したテーブルのリストを追加します。

    # mysqldump [options] db_name [tbl_name ...​] > backup-file.sql
    Copy to Clipboard Toggle word wrap
  • 1 つのデータベースからダンプされたテーブルのサブセットをロードするには、以下を実行します。

    # mysql db_name < backup-file.sql
    Copy to Clipboard Toggle word wrap
    注記

    この時点で、db_name データベースが存在している必要があります。

  • mysqldump がサポートするオプションのリストを表示するには、以下を実行します。

    $ mysqldump --help
    Copy to Clipboard Toggle word wrap

2.6.2. SQL 形式のダンプから MySQL のデータを復元する

1 つまたは複数のデータベースを SQL ファイルにバックアップした場合は、このファイルを使用してデータベース構造とそのデータを再作成できます。

前提条件

  • mysqld サービスが実行されている。
  • root アカウントなど、データを復元する権限を持つ認証情報を持っている。

手順

  1. 復元するデータベースがすでに存在し、SQL ファイルに DROP TABLE IF EXISTS ステートメントが含まれていない場合は、テーブルまたはデータベース全体を手動で削除する必要があります。

    • テーブルを削除するには、次のように入力します。

      # mysql -u root -p -e "DROP TABLE <database>.<table>;"
      Copy to Clipboard Toggle word wrap

      SQL ファイルによって再作成されるすべてのテーブルに対してこのコマンドを繰り返します。

    • データベースを削除するには、次のように入力します。

      # mysql -u root -p -e "DROP DATABASE <database>;"
      Copy to Clipboard Toggle word wrap

      SQL ファイルによって再作成されるすべてのデータベースに対してこのコマンドを繰り返します。

  2. SQL ファイルをインポートします。

    # mysql -u root -p < backup.sql"
    Copy to Clipboard Toggle word wrap

検証

  • MySQL データベースに接続してデータを照会します。次に例を示します。

    # mysql -u root -p <database> -e "*SELECT * FROM <table>;"
    Copy to Clipboard Toggle word wrap

2.7. 物理コピーを使用した MySQL データのバックアップと復元

MySQL データの物理バックアップには、コンテンツを格納しているファイルとディレクトリーが含まれます。通常、この方法はより高速で、サイズが小さくなります。

2.7.1. MySQL サーバーでのファイルシステムバックアップの実行

ファイルシステムレベルのバックアップは、MySQL インスタンス全体をバックアップする高速な方法です。この方法では、データの整合性を保つために mysqld サービスをシャットダウンする必要があります。

重要

ファイルシステムレベルのバックアップは、アーキテクチャーと MySQL バージョンに固有のものです。この方法でバックアップしたデータを、異なるアーキテクチャーまたは MySQL バージョンで復元することはできません。

手順

  1. mysqld サービスを停止します。

    # systemctl stop mysqld.service
    Copy to Clipboard Toggle word wrap
  2. バックアップディレクトリーを作成します。次に例を示します。

    # mkdir -p /root/mysqld-backup/{data,config}/
    Copy to Clipboard Toggle word wrap
  3. データディレクトリーをバックアップします。

    # cp -rp /var/lib/mysql/ /root/mysqld-backup/data/
    Copy to Clipboard Toggle word wrap
  4. 設定ファイルをバックアップします。

    # cp -rp /etc/my.cnf /etc/my.cnf.d/ /root/mysqld-backup/config/
    Copy to Clipboard Toggle word wrap
  5. mysqld サービスを開始します。

    # systemctl start mysqld.service
    Copy to Clipboard Toggle word wrap

2.7.2. MySQL サーバーでのファイルシステムバックアップの復元

MySQL インスタンスが破損した場合は、以前にデータディレクトリーと設定ファイルを含むファイルシステムバックアップを実行済みであれば、このバックアップからインスタンスを復元できます。

前提条件

手順

  1. mysqld サービスを停止します。

    # systemctl stop mysqld.service
    Copy to Clipboard Toggle word wrap
  2. 現在の /var/lib/mysql/ ディレクトリーを削除します。

    # rm -rf /var/lib/mysql/
    Copy to Clipboard Toggle word wrap
  3. バックアップからデータディレクトリーを復元します。

    # cp -rp /root/mysqld-backup/data/mysql/ /var/lib/
    Copy to Clipboard Toggle word wrap
  4. /var/lib/mysql/ ディレクトリーの所有権を正しく設定します。

    # chown -R mysql:mysql /var/lib/mysql/
    Copy to Clipboard Toggle word wrap
  5. /var/lib/mysql/ ディレクトリーの SELinux コンテキストを復元します。

    # restorecon -Rv /var/lib/mysql/
    Copy to Clipboard Toggle word wrap
  6. 現在の設定ファイルを削除します。

    # rm -rf /etc/my.cnf /etc/my.cnf.d/
    Copy to Clipboard Toggle word wrap
  7. バックアップから設定ファイルを復元します。

    # cp -rp /root/mysqld-backup/config/my.cnf /root/mysqld-backup/config/my.cnf.d/ /etc/
    Copy to Clipboard Toggle word wrap
  8. 設定ファイルの所有権を正しく設定します。

    # chown -R root:root /etc/my.cnf /etc/my.cnf.d/
    Copy to Clipboard Toggle word wrap
  9. 設定ファイルの SELinux コンテキストを復元します。

    # restorecon -Rv /etc/my.cnf /etc/my.cnf.d/
    Copy to Clipboard Toggle word wrap
  10. mysqld サービスを開始します。

    # systemctl start mysqld.service
    Copy to Clipboard Toggle word wrap

検証

  • MySQL データベースに接続してデータを照会します。次に例を示します。

    # mysql -u root -p <database> -e "*SELECT * FROM <table>;"
    Copy to Clipboard Toggle word wrap

2.8. TLS 暗号化を使用した MySQL のレプリケーション

TLS 暗号化を使用した MySQL レプリケーションを設定すると、ソースサーバーとレプリカサーバーの間にセキュアなデータレプリケーション環境を構築できます。

警告

レプリケーション自体は、バックアップソリューションとしては十分ではありません。レプリケーションは、ハードウェア障害からソースサーバーを保護しますが、データ損失に対する保護は保証していません。

2.8.1. MySQL ソースサーバーの設定

MySQL ソースサーバーを適切に実行し、TLS プロトコルを介してデータベースサーバーで行われたすべての変更をレプリケートするために必要な設定オプションを設定できます。

前提条件

  • ソースサーバーがインストールされている。
  • ソースサーバーに TLS がセットアップ されている。

    重要

    ソース証明書とレプリカ証明書が、同じ認証局によって署名されている必要があります。

手順

  1. [mysqld] セクションの /etc/my.cnf.d/mysql-server.cnf ファイルに以下のオプションを含めます。

    • bind-address=source_ip_adress

      このオプションは、レプリカからソースへの接続に必要です。

    • server-id=id

      id は一意である必要があります。

    • log_bin=path_to_source_server_log

      このオプションは、MySQL ソースサーバーのバイナリーログファイルへのパスを定義します。例: log_bin=/var/log/mysql/mysql-bin.log

    • gtid_mode=ON

      このオプションは、サーバー上でグローバルトランザクション識別子 (GTID) を有効にします。

    • enforce-gtid-consistency=ON

      サーバーは、GTID を使用して安全にログに記録できるステートメントのみの実行を許可することにより、GTID の整合性を強化します。

    • オプション: binlog_do_db=db_name

      選択したデータベースのみを複製する場合は、このオプションを使用します。選択した複数のデータベースを複製するには、各データベースを個別に指定します。

      binlog_do_db=db_name1
      binlog_do_db=db_name2
      binlog_do_db=db_name3
      Copy to Clipboard Toggle word wrap
    • オプション: binlog_ignore_db=db_name

      このオプションを使用して、特定のデータベースをレプリケーションから除外します。

  2. mysqld サービスを再起動します。

    # systemctl restart mysqld.service
    Copy to Clipboard Toggle word wrap

2.8.2. MySQL レプリカサーバーの設定

レプリケーションを成功させるために MySQL レプリカサーバーに必要な設定オプションを設定できます。

前提条件

  • レプリカサーバーがインストールされている。
  • レプリカサーバーに TLS がセットアップ されている。

    重要

    ソース証明書とレプリカ証明書が、同じ認証局によって署名されている必要があります。

手順

  1. [mysqld] セクションの /etc/my.cnf.d/mysql-server.cnf ファイルに以下のオプションを含めます。

    • server-id=id

      id は一意である必要があります。

    • relay-log=path_to_replica_server_log

      リレーログは、レプリケーション中に MySQL レプリカサーバーによって作成されたログファイルのセットです。

    • log_bin=path_to_replica_sever_log

      このオプションは、MySQL レプリカサーバーのバイナリーログファイルへのパスを定義します。例: log_bin=/var/log/mysql/mysql-bin.log

      このオプションはレプリカでは必須ではありませんが、強く推奨します。

    • gtid_mode=ON

      このオプションは、サーバー上でグローバルトランザクション識別子 (GTID) を有効にします。

    • enforce-gtid-consistency=ON

      サーバーは、GTID を使用して安全にログに記録できるステートメントのみの実行を許可することにより、GTID の整合性を強化します。

    • log-replica-updates=ON

      このオプションにより、ソースサーバーから受信した更新がレプリカのバイナリーログに記録されます。

    • skip-replica-start=ON

      このオプションは、レプリカサーバーの起動時に、レプリカサーバーがレプリケーションスレッドを開始しないようにします。

    • オプション: binlog_do_db=db_name

      特定のデータベースのみを複製する場合は、このオプションを使用します。複数のデータベースを複製するには、各データベースを個別に指定します。

      binlog_do_db=db_name1
      binlog_do_db=db_name2
      binlog_do_db=db_name3
      Copy to Clipboard Toggle word wrap
    • オプション: binlog_ignore_db=db_name

      このオプションを使用して、特定のデータベースをレプリケーションから除外します。

  2. mysqld サービスを再起動します。

    # systemctl restart mysqld.service
    Copy to Clipboard Toggle word wrap

2.8.3. MySQL ソースサーバーでのレプリケーションユーザーの作成

レプリカサーバーが接続してデータの変更を受信できるように、MySQL ソースサーバー上で適切な権限を持つレプリケーションユーザーを作成する必要があります。

前提条件

手順

  1. レプリケーションユーザーを作成します。

    mysql> CREATE USER 'replication_user'@'replica_server_hostname' IDENTIFIED WITH mysql_native_password BY 'password';
    Copy to Clipboard Toggle word wrap
  2. ユーザーにレプリケーションパーミッションを付与します。

    mysql> GRANT REPLICATION SLAVE ON *.* TO 'replication_user'@'replica_server_hostname';*
    Copy to Clipboard Toggle word wrap
  3. MySQL データベースの付与テーブルをリロードします。

    mysql> FLUSH PRIVILEGES;
    Copy to Clipboard Toggle word wrap
  4. ソースサーバーを読み取り専用状態に設定します。

    mysql> SET @@GLOBAL.read_only = ON;
    Copy to Clipboard Toggle word wrap

2.8.4. MySQL レプリカサーバーをソースサーバーに接続する

MySQL レプリカとソースサーバー間の接続を確立するために、ソースサーバーの認証情報を使用してレプリカサーバーを設定し、レプリケーションを開始する必要があります。

前提条件

手順

  1. レプリカサーバーを読み取り専用状態に設定します。

    mysql> SET @@GLOBAL.read_only = ON;
    Copy to Clipboard Toggle word wrap
  2. レプリケーションソースを設定します。

    mysql> CHANGE REPLICATION SOURCE TO
           SOURCE_HOST='source_hostname',
           SOURCE_USER='replication_user',
           SOURCE_PASSWORD='password',
           SOURCE_AUTO_POSITION=1,
           SOURCE_SSL=1,
           SOURCE_SSL_CA='path_to_ca_on_source',
           SOURCE_SSL_CAPATH='path_to_directory_with_certificates',
           SOURCE_SSL_CERT='path_to_source_certificate',
           SOURCE_SSL_KEY='path_to_source_key';
    Copy to Clipboard Toggle word wrap
  3. MySQL レプリカサーバーでレプリカスレッドを開始します。

    mysql> START REPLICA;
    Copy to Clipboard Toggle word wrap
  4. ソースサーバーとレプリカサーバーの両方で、読み取り専用状態の設定を解除します。

    mysql> SET @@GLOBAL.read_only = OFF;
    Copy to Clipboard Toggle word wrap
  5. オプション: デバッグの目的で、レプリカサーバーのステータスを検査します。

    mysql> SHOW REPLICA STATUS\G;
    Copy to Clipboard Toggle word wrap
    注記

    レプリカサーバーの起動または接続に失敗した場合は、SHOW MASTER STATUS コマンドの出力に表示されるバイナリーログファイルの位置に続く特定の数のイベントをスキップできます。たとえば、定義された位置から最初のイベントをスキップします。

    mysql> SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
    Copy to Clipboard Toggle word wrap

    その後、レプリカサーバーを再度起動してみます。

  6. オプション: レプリカサーバーでレプリカスレッドを停止します。

    mysql> STOP REPLICA;
    Copy to Clipboard Toggle word wrap

2.8.5. MySQL サーバーでのレプリケーションの検証

テストデータベースを作成し、ソースサーバーとレプリカサーバーのレプリケーションステータスを確認することで、MySQL レプリケーションが正しく動作していることを検証できます。

手順

  1. ソースサーバーにサンプルデータベースを作成します。

    mysql> CREATE DATABASE test_db_name;
    Copy to Clipboard Toggle word wrap
  2. test_db_name データベースが、レプリカサーバーで複製されていることを確認します。
  3. ソースサーバーまたはレプリカサーバーのいずれかで以下のコマンドを実行して、MySQL サーバーのバイナリーログファイルに関するステータス情報を表示します。

    mysql> SHOW MASTER STATUS;
    Copy to Clipboard Toggle word wrap

    ソースで実行されたトランザクションの GTID のセットを示す Executed_Gtid_Set 列は、空であってはなりません。

    注記

    レプリカサーバーで SHOW REPLICA STATUS を使用すると、同じ GTID のセットが Executed_Gtid_Set 行に表示されます。

2.9. MySQL インスタンスを以前の RHEL バージョンから RHEL 10 上の MySQL 8.4 に移行する

RHEL 10 では MySQL 8.4 が提供されます。以前の RHEL バージョンで MySQL インスタンスを実行している場合は、新しいホストに RHEL 10 をセットアップし、インスタンスを移行できます。

前提条件

  • 新しいホストに RHEL 10 をセットアップした。
  • RHEL 8 または RHEL 9 ホスト上の MySQL インスタンスのファイルシステムバックアップを実行した。

手順

  1. mysql8.4-server パッケージをインストールします。

    # dnf install mysql8.4-server
    Copy to Clipboard Toggle word wrap
  2. サービスがすでに実行されている場合は停止します。

    # systemctl stop mysqld.service
    Copy to Clipboard Toggle word wrap
  3. 以前のホストの /var/lib/mysql/ ディレクトリーの内容を、RHEL 10 ホストの同じ場所にコピーします。
  4. 以前のホストから /etc/my.cnf.d/ ディレクトリーに設定ファイルをコピーし、ファイルに MySQL 8.4 に有効なオプションのみが含まれていることを確認します。詳細は、アップストリームのドキュメント を参照してください。
  5. SELinux コンテキストを復元します。

    # restorecon -rv /var/lib/mysql/
    # restorecon -rv /etc/my.cnf.d/
    Copy to Clipboard Toggle word wrap
  6. /var/lib/mysql/ とそのサブディレクトリーの正しい所有権を確認します。

    # chown -R mysql:mysql /var/lib/mysql/
    Copy to Clipboard Toggle word wrap
  7. mysqld サービスを有効にして起動します。

    # systemctl enable --now mysqld.service
    Copy to Clipboard Toggle word wrap

    サービスが開始されると、MySQL は内部テーブルを自動的にチェック、修復、更新します。

検証

  • MySQL サーバーへの接続を確立します。

    # mysql -u root -p -h <hostname>
    Copy to Clipboard Toggle word wrap

第3章 PostgreSQL の使用

PostgreSQL サーバーは、SQL 言語に基づいた、堅牢で拡張性の高いオープンソースのデータベースサーバーです。PostgreSQL サーバーは、大規模なデータセットと多数の同時ユーザーを管理できるオブジェクトリレーショナルデータベースシステムを提供します。

PostgreSQL サーバーには、データの整合性の確保、耐障害性のある環境やアプリケーションの構築を行うための機能が含まれます。PostgreSQL サーバーを使用すると、データベースを再コンパイルすることなく、独自のデータ型、カスタム関数、またはさまざまなプログラミング言語のコードでデータベースを拡張できます。

RHEL システムに PostgreSQL をインストールして設定する方法、PostgreSQL データをバックアップする方法、および PostgreSQL の以前のバージョンから移行する方法を説明します。

3.1. PostgreSQL のインストール

RHEL 10 では、Application Stream の初期バージョンとして PostgreSQL 16 が提供されます。これは、RPM パッケージとしてインストールできます。追加の PostgreSQL バージョンは、RHEL 10 のマイナーリリースで、ライフサイクルが短い代替バージョンとして提供されます。

重要

設計上、同じモジュールの 1 つのバージョン (ストリーム) のみをインストールでき、RPM パッケージが競合するため、同じホストに複数の PostgreSQL インスタンスをインストールすることはできません。代わりに、コンテナー内でデータベースサーバーサービスを実行することもできます。コンテナーを使用して単一ホスト上で複数の PostgreSQL インスタンスを実行する を参照してください。

手順

  1. PostgreSQL サーバーパッケージをインストールします。

    # dnf install postgresql-server
    Copy to Clipboard Toggle word wrap

    postgres のスーパーユーザーが自動的に作成されます。

  2. データベースクラスターを初期化します。

    # postgresql-setup --initdb
    Copy to Clipboard Toggle word wrap

    データをデフォルトの /var/lib/pgsql/data ディレクトリーに保存します。

  3. postgresql サービスを有効にして起動します。

    # systemctl enable --now postgresql.service
    Copy to Clipboard Toggle word wrap

3.2. コンテナーを使用して単一ホスト上で複数の PostgreSQL インスタンスを実行する

パッケージから PostgreSQL をインストールする場合、同じホスト上で実行できるのは 1 つのバージョンのみです。複数のインスタンスを実行するか、異なるバージョンの PostgreSQL を実行するには、サービスをコンテナー内で実行します。

前提条件

  • podman パッケージがインストールされている。

手順

  1. Red Hat カスタマーポータルアカウントを使用して、registry.redhat.io レジストリーに対して認証します。

    # podman login registry.redhat.io
    Copy to Clipboard Toggle word wrap

    すでにコンテナーレジストリーにログインしている場合は、このステップをスキップしてください。

  2. 使用するコンテナーを起動します。各コンテナーについて、以下を入力します。

    $ podman run -d --name <container_name> -e POSTGRESQL_USER=<user_name> -e POSTGRESQL_PASSWORD=<password> -p <host_port_1>:5432 rhel10/postgresql-16
    Copy to Clipboard Toggle word wrap

    このコンテナーイメージを使用する方法の詳細は、Red Hat Ecosystem Catalog を参照してください。

    重要

    2 つのデータベースサーバーのコンテナー名とホストポートが異なっている必要があります。

  3. クライアントがネットワーク上のデータベースサーバーにアクセスできるように、ファイアウォールでホストポートを開きます。

    # firewall-cmd --permanent --add-port={<host_port_1>/tcp,<host_port_2>/tcp,...}
    # firewall-cmd --reload
    Copy to Clipboard Toggle word wrap

検証

  1. データベースサーバーに接続し、root としてログインします。

    # psql -u postgres -p -h localhost -P <host_port> --protocol tcp
    Copy to Clipboard Toggle word wrap
  2. 実行中のコンテナーに関する情報を表示します。

    $ podman ps
    Copy to Clipboard Toggle word wrap

3.3. PostgreSQL ユーザーの作成

特定の権限を持つ PostgreSQL ユーザーを作成して、データベースへのアクセスを管理し、ユーザーの特権を制御することで、セキュアなデータベース管理を実現できます。

PostgreSQL ユーザーは以下のタイプのものです。

  • postgres Linux システムユーザー: PostgreSQL サーバーおよびクライアントアプリケーション (pg_dump など) を実行するためにのみ使用します。データベース作成およびユーザー管理などの、PostgreSQL 管理上の対話的な作業には postgres システムユーザーを使用しないでください。
  • データベースのスーパーユーザー: デフォルトの postgres PostgreSQL スーパーユーザーは、postgres システムユーザーとは関係ありません。/var/lib/pgsql/data/pg_hba.conf ファイルで postgres スーパーユーザーのアクセスを制限できます。それ以外の場合、他のパーミッションの制限はありません。他のデータベースのスーパーユーザーを作成することもできます。
  • 特定のデータベースアクセスパーミッションを持つロール:

    • データベースユーザー: デフォルトでログインするパーミッションがあります。
    • ユーザーのグループ: グループ全体のパーミッションを管理できるようにします。

ロールはデータベースオブジェクト (テーブルや関数など) を所有でき、SQL コマンドを使用して他のロールにオブジェクト特権を割り当てることができます。

標準のデータベース管理権限には SELECTINSERTUPDATEDELETETRUNCATEREFERENCESTRIGGERCREATECONNECTTEMPORARYEXECUTE、および USAGE が含まれます。

ロール属性は、LOGINSUPERUSERCREATEDB、および CREATEROLE などの特別な権限です。

重要

ほとんどのタスクをスーパーユーザー以外のロールとして実行します。一般的な方法として、CREATEDB および CREATEROLE の権限を持つロールを作成し、このロールをデータベースおよびロールのすべてのルーチン管理に使用します。

前提条件

  • PostgreSQL サーバーがインストールされている。
  • データベースクラスターが初期化されている。
  • /var/lib/pgsql/data/postgresql.conf ファイルの password_encryption パラメーターが scram-sha-256 に設定されている。
  • /var/lib/pgsql/data/pg_hba.conf ファイル内のエントリーが、認証方法として scram-sha-256 ハッシュアルゴリズムを使用している。

手順

  1. postgres システムユーザーとしてログインするか、このユーザーに切り替えます。

    # su - postgres
    Copy to Clipboard Toggle word wrap
  2. PostgreSQL インタラクティブターミナルを起動します。

    $ psql
    psql (16.4)
    Type "help" for help.
    
    postgres=#
    Copy to Clipboard Toggle word wrap
  3. オプション: 現在のデータベース接続に関する情報を取得します。

    postgres=# \conninfo
    You are connected to database "postgres" as user "postgres" via socket in "/var/run/postgresql" at port "5432".
    Copy to Clipboard Toggle word wrap
  4. mydbuser という名前のユーザーを作成し、パスワードを設定して、そのユーザーに CREATEROLE および CREATEDB パーミッションを割り当てます。

    postgres=# CREATE USER mydbuser WITH PASSWORD '<password>' CREATEROLE CREATEDB;
    CREATE ROLE
    Copy to Clipboard Toggle word wrap

    これで、mydbuser ユーザーは、日常的なデータベース管理操作 (データベースの作成とユーザーインデックスの管理) を実行できるようになりました。

  5. \q メタコマンドを使用して、インタラクティブターミナルからログアウトします。

    postgres=# \q
    Copy to Clipboard Toggle word wrap

検証

  1. mydbuser として PostgreSQL ターミナルにログインし、ホスト名を指定して、初期化中に作成されたデフォルトの postgres データベースに接続します。

    # psql -U mydbuser -h 127.0.0.1 -d postgres
    Password for user mydbuser:
    Type the password.
    psql (16.4)
    Type "help" for help.
    
    postgres=>
    Copy to Clipboard Toggle word wrap
  2. データベースを作成します。

    postgres=> CREATE DATABASE <db_name>;
    Copy to Clipboard Toggle word wrap
  3. セッションからログアウトします。

    postgres=# \q
    Copy to Clipboard Toggle word wrap
  4. mydbuser として新しいデータベースに接続します。

    # psql -U mydbuser -h 127.0.0.1 -d <db_name>
    Password for user mydbuser:
    psql (16.4)
    Type "help" for help.
    mydatabase=>
    Copy to Clipboard Toggle word wrap

3.4. PostgreSQL の設定

データベースクラスターディレクトリー内の設定ファイルを編集して、データベースのパラメーター、認証、およびクライアントアクセスを設定することで、PostgreSQL を設定できます。デフォルトでは、PostgreSQL は /var/lib/pgsql/data/ ディレクトリーを使用します。

  • /var/lib/pgsql/data/postgresql.conf: データベースクラスターのパラメーターを設定するために使用されます。
  • /var/lib/pgsql/data/postgresql.auto.conf: postgresql.conf と同様に、基本的な PostgreSQL 設定を格納しています。ただし、このファイルはサーバーの管理下にあります。これは、ALTER SYSTEM クエリーにより編集され、手動で編集することはできません。
  • /var/lib/pgsql/data/pg_ident.conf: ユーザーアイデンティティーを外部認証メカニズムから PostgreSQL ユーザーアイデンティティーにマッピングするために使用されます。
  • /var/lib/pgsql/data/pg_hba.conf: PostgreSQL データベースのクライアント認証を設定するために使用されます。

手順

  1. /var/lib/pgsql/data/postgresql.conf ファイルを編集し、データベースクラスターパラメーターの基本設定を行います。次に例を示します。

    log_connections = yes
    log_destination = 'syslog'
    search_path = '"$user", public'
    shared_buffers = 128MB
    password_encryption = scram-sha-256
    Copy to Clipboard Toggle word wrap
  2. /var/lib/pgsql/data/pg_hba.conf ファイルを編集し、クライアント認証を設定します。次に例を示します。

    # TYPE    DATABASE       USER        ADDRESS              METHOD
    local     all            all                              trust
    host      postgres       all         192.168.93.0/24      ident
    host      all            all         .example.com         scram-sha-256
    Copy to Clipboard Toggle word wrap
  3. postgresql サービスを再起動して、変更を有効にします。

    # systemctl restart postgresql.service
    Copy to Clipboard Toggle word wrap

3.5. PostgreSQL サーバーにおける TLS 暗号化の設定

デフォルトでは、PostgreSQL は暗号化されていない接続を使用します。よりセキュアな接続のために、PostgreSQL サーバーで Transport Layer Security (TLS) サポートを有効にし、暗号化された接続を確立するようにクライアントを設定できます。

前提条件

  • TLS 秘密鍵を作成済みであり、かつ認証局 (CA) によって PostgreSQL サーバー用のサーバー証明書が発行されている。
  • PostgreSQL サーバーがインストールされている。
  • データベースクラスターが初期化されている。
  • FIPS モードが有効になっている場合、クライアントは Extended Master Secret (EMS) 拡張機能をサポートするか、TLS 1.3 を使用する必要があります。EMS を使用しない TLS 1.2 接続は失敗します。詳細は、Red Hat ナレッジベースソリューション TLS extension "Extended Master Secret" enforced on RHEL 9.2 and later を参照してください。

手順

  1. 秘密鍵とサーバー証明書を /var/lib/pgsql/data/ ディレクトリーに保存します。

    # cp server.{key,crt} /var/lib/pgsql/data/
    Copy to Clipboard Toggle word wrap
  2. 秘密鍵と証明書の所有権を設定します。

    # chown postgres:postgres /var/lib/pgsql/data/server.{key,crt}
    Copy to Clipboard Toggle word wrap
  3. PostgreSQL サーバーのみがファイルを読み取れるように、サーバー証明書のパーミッションを設定します。

    # chmod 0400 /var/lib/pgsql/data/server.key
    Copy to Clipboard Toggle word wrap

    証明書は、セキュアな接続が確立される前は通信の一部であるため、任意のクライアントは認証なしで証明書を取得できます。したがって、サーバー証明書ファイルに厳密なパーミッションを設定する必要はありません。

  4. /var/lib/pgsql/data/postgresql.conf ファイルを編集し、次の変更を加えます。

    1. scram-sha-256 ハッシュアルゴリズムを設定します。

      password_encryption = scram-sha-256
      Copy to Clipboard Toggle word wrap
    2. TLS 暗号化を有効にします。

      ssl = on
      Copy to Clipboard Toggle word wrap
  5. /var/lib/pgsql/data/pg_hba.conf ファイルを編集し、TLS 暗号化と scram-sha-256 ハッシュアルゴリズムを使用するように認証エントリーを更新します。たとえば、TLS 暗号化を有効にするには、host エントリーを hostssl に変更し、最後の列に scram-sha-256 ハッシュアルゴリズムを設定します。

    hostssl    all    all    192.0.2.0/24    scram-sha-256
    Copy to Clipboard Toggle word wrap
  6. postgresql サービスを再起動します。

    # systemctl restart postgresql.service
    Copy to Clipboard Toggle word wrap

検証

  • postgres スーパーユーザーを使用して PostgreSQL サーバーに接続し、\conninfo メタコマンドを実行します。

    # psql "postgresql://postgres@localhost:5432" -c '\conninfo'
    Password for user postgres:
    You are connected to database "postgres" as user "postgres" on host "192.0.2.1" at port "5432".
    SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off)
    Copy to Clipboard Toggle word wrap

3.6. 論理ダンプを使用した PostgreSQL データのバックアップと復元

PostgreSQL データの論理バックアップは、データの復元に必要な SQL ステートメントで構成されます。物理バックアップに対する論理バックアップの利点は、異なるハードウェア構成や PostgreSQL バージョンでもデータを復元できることです。

SQL ダンプのメソッドは、SQL コマンドを使用したダンプファイルの生成に基づいています。ダンプがデータベースサーバーにアップロードされると、ダンプ時と同じ状態でデータベースが再作成されます。

SQL ダンプは、次の PostgreSQL クライアントアプリケーションによって実現されます。

  • pg_dump は、ロールまたはテーブルスペースに関するクラスター全体の情報なしに単一のデータベースをダンプします。
  • pg_dumpall は、指定されたクラスター内の各データベースをダンプし、ロールやテーブルスペースの定義など、クラスター全体のデータを保持します。

デフォルトでは、pg_dump コマンドおよび pg_dumpall コマンドは、結果を標準出力に書き込みます。ダンプをファイルに保存するには、出力を SQL ファイルにリダイレクトします。作成される SQL ファイルは、テキスト形式またはその他の形式のいずれかになります。これにより並列処理が可能になり、オブジェクトの復元をより詳細に制御できます。

データベースにアクセスできる任意のリモートホストから、SQL ダンプを実行できます。

3.6.1. SQL ダンプの利点と欠点

SQL ダンプは、データベースの構造とデータを SQL ステートメントの形式で含むテキストファイルです。

利点:

  • SQL ダンプは、サーバーのバージョン固有ではない唯一の PostgreSQL バックアップメソッドです。pg_dump ユーティリティーの出力は、PostgreSQL の新しいバージョンに再読み込みすることができます。これは、ファイルシステムレベルのバックアップや継続的アーカイブでは不可能です。
  • SQL ダンプは、32 ビットサーバーから 64 ビットサーバーへなど、異なるアーキテクチャーにデータベースを転送する際に有効な唯一の方法です。
  • SQL ダンプは、内部的に一貫性のあるダンプを提供します。ダンプは、pg_dump の実行開始時のデータベースのスナップショットを表します。
  • pg_dump ユーティリティーは、実行中のデータベースの他の操作をブロックしません。

欠点:

  • SQL ダンプは、ファイルシステムレベルのバックアップに比べて時間がかかります。

3.6.2. pg_dump を使用した単一の PostgreSQL データベースのバックアップ

pg_dump ユーティリティーを使用してデータベース構造とデータをファイルにエクスポートすることにより、単一の PostgreSQL データベースのバックアップを作成できます。

前提条件

  • postgres スーパーユーザーまたはデータベース管理者特権を持つユーザーとしてログインしている。

手順

  • クラスター全体の情報なしでデータベースをダンプします。

    $ pg_dump <db_name> > <dump_file>
    Copy to Clipboard Toggle word wrap

    pg_dump が接続するデータベースサーバーを指定するには、以下のコマンドラインオプションを使用します。

    • ホストを定義する -h オプション

      デフォルトのホストは、ローカルホストか、PGHOST 環境変数で指定されているものです。

    • ポートを定義する -p オプション

      デフォルトのポートは、PGPORT 環境変数またはコンパイル済みデフォルトで示されます。

3.6.3. pg_dump を使用した単一の PostgreSQL データベースの復元

pg_restore ユーティリティーを使用してデータベース構造とデータを再作成することにより、SQL ダンプファイルから PostgreSQL データベースを復元できます。

前提条件

  • postgres スーパーユーザーまたはデータベース管理者特権を持つユーザーとしてログインしている。

手順

  1. 新しいデータベースを作成します。

    $ createdb <db_name>
    Copy to Clipboard Toggle word wrap
  2. ダンプされたデータベース内のオブジェクトを所有しているすべてのユーザー、またはそのオブジェクトに対する権限を付与されているすべてのユーザーがすでに存在することを検証します。このようなユーザーが存在しない場合、復元を実行しても、元の所有権と権限でオブジェクトが再作成されません。
  3. psql ユーティリティーを実行して、pg_dump ユーティリティーが作成したテキストファイルのダンプを復元します。

    $ psql <db_name> < <dump_file>
    Copy to Clipboard Toggle word wrap

    ここでの <dump_file> は、pg_dump コマンドの出力になります。非テキストファイルのダンプを復元するには、代わりに pg_restore ユーティリティーを使用します。

    $ pg_restore <non-plain_text_file>
    Copy to Clipboard Toggle word wrap

3.6.4. pg_dumpall を使用した PostgreSQL サーバー上の全データベースのバックアップ

pg_dumpall ユーティリティーを使用して、すべてのデータベースとクラスター全体のデータを 1 つのファイルにエクスポートすることにより、PostgreSQL サーバー上の全データベースのバックアップを作成できます。

前提条件

  • postgres スーパーユーザーまたはデータベース管理者特権を持つユーザーとしてログインしている。

手順

  • データベースクラスターのすべてのデータベースをダンプし、クラスター全体のデータを保存します。

    $ pg_dumpall > <dump_file>
    Copy to Clipboard Toggle word wrap

    pg_dumpall が接続するデータベースサーバーを指定するには、以下のコマンドラインオプションを使用します。

    • ホストを定義する -h オプション

      デフォルトのホストは、ローカルホストか、PGHOST 環境変数で指定されているものです。

    • ポートを定義する -p オプション

      デフォルトのポートは、PGPORT 環境変数またはコンパイル済みデフォルトで示されます。

    • デフォルトのデータベースを定義する -l オプション

      このオプションにより、初期化時に自動的に作成された postgres データベースとは異なるデフォルトのデータベースを選択できます。

3.6.5. pg_dumpall を使用した PostgreSQL サーバー上の全データベースの復元

psql ユーティリティーを使用してデータベースクラスター全体を再作成することにより、pg_dumpall ファイルから PostgreSQL サーバー上の全データベースを復元できます。

前提条件

  • postgres スーパーユーザーまたはデータベース管理者特権を持つユーザーとしてログインしている。

手順

  1. ダンプされたデータベースのオブジェクトを所有するか、オブジェクトに対するパーミッションが許可されたユーザーがすべて、すでに存在していることを検証してください。このようなユーザーが存在しない場合、復元を実行しても、元の所有権と権限でオブジェクトが再作成されません。
  2. psql ユーティリティーを実行して、pg_dumpall ユーティリティーにより作成されたテキストファイルのダンプを復元します。

    $ psql < <dump_file>
    Copy to Clipboard Toggle word wrap

    ここでの <dump_file> は、pg_dumpall コマンドの出力になります。

3.6.6. 復元中の SQL エラーの処理

デフォルトでは、SQL エラーが発生した場合でも psql ユーティリティーは実行を継続します。これは、データベースが部分的にしか復元されない原因となります。データの整合性を確保するために、エラー時に停止するように psql を設定できます。

前提条件

  • postgres スーパーユーザーまたはデータベース管理者特権を持つユーザーとしてログインしている。

手順

  • ON_ERROR_STOP 変数を設定して SQL エラーが発生した場合は、終了ステータス 3 で psql を終了します。

    $ psql --set ON_ERROR_STOP=on <db_name> < <dump_file>
    Copy to Clipboard Toggle word wrap
  • ダンプ全体が単一のトランザクションとして復元されるように指定して、復元が完全に完了するかキャンセルされるようにします。

    • psql ユーティリティーを使用してテキストファイルのダンプを復元する場合:

      $ psql -1
      Copy to Clipboard Toggle word wrap
    • pg_restore ユーティリティーを使用してテキストファイル以外のダンプを復元する場合:

      $ pg_restore -e
      Copy to Clipboard Toggle word wrap

    この方法を使用する場合、小さなエラーでも、すでに何時間も実行されている復元操作がキャンセルされる可能性があることに注意してください。

3.7. 物理コピーを使用した PostgreSQL データのバックアップと復元

PostgreSQL データの物理バックアップには、コンテンツを格納しているファイルとディレクトリーが含まれます。通常、この方法はより高速で、サイズが小さくなります。

3.7.1. PostgreSQL サーバーでのファイルシステムバックアップの実行

ファイルシステムレベルのバックアップは、PostgreSQL インスタンス全体をバックアップする高速な方法です。この方法では、データの整合性を保つために postgresql サービスをシャットダウンする必要があります。

重要

PostgreSQL のファイルシステムレベルのバックアップは、アーキテクチャーと RHEL メジャーバージョンに固有のものです。この方法でバックアップしたデータは、異なるアーキテクチャーまたは RHEL メジャーバージョンで復元することはできません。

手順

  1. postgresql サービスを停止します。

    # systemctl stop postgresql.service
    Copy to Clipboard Toggle word wrap
  2. バックアップディレクトリーを作成します。次に例を示します。

    # mkdir -p /root/postgresql-backup/
    Copy to Clipboard Toggle word wrap
  3. /var/lib/pgsql/ ディレクトリーをバックアップします。

    # cp -rp /var/lib/pgsql/ /root/postgresql-backup/
    Copy to Clipboard Toggle word wrap

    /var/lib/pgsql/ には、設定ファイル、データファイル、ログなど、PostgreSQL データベースサーバーの重要なファイルがすべて含まれています。

  4. postgresql サービスを開始します。

    # systemctl start postgresql.service
    Copy to Clipboard Toggle word wrap

3.7.2. PostgreSQL サーバーでのファイルシステムバックアップの復元

PostgreSQL インスタンスが破損した場合は、以前にデータディレクトリーを含むファイルシステムバックアップを実行済みであれば、このバックアップからインスタンスを復元できます。

前提条件

手順

  1. postgresql サービスを停止します。

    # systemctl stop postgresql.service
    Copy to Clipboard Toggle word wrap
  2. 現在の /var/lib/pgsql/ ディレクトリーを削除します。

    # rm -rf /var/lib/pgsql/
    Copy to Clipboard Toggle word wrap
  3. バックアップからデータディレクトリーを復元します。

    # cp -rp /root/postgresql-backup/pgsql/ /var/lib/
    Copy to Clipboard Toggle word wrap
  4. /var/lib/pgsql/ ディレクトリーの所有権を正しく設定します。

    # chown -R postgres:postgres /var/lib/pgsql/
    Copy to Clipboard Toggle word wrap
  5. /var/lib/pgsql/ ディレクトリーの SELinux コンテキストを復元します。

    # restorecon -Rv /var/lib/pgsql/
    Copy to Clipboard Toggle word wrap
  6. postgresql サービスを開始します。

    # systemctl start postgresql.service
    Copy to Clipboard Toggle word wrap

検証

  1. postgres ユーザーとしてログインします。
  2. データベースに接続します。

    $ psql <database>
    Copy to Clipboard Toggle word wrap
  3. データベース内のデータにアクセスします。

    <database>=# SELECT * FROM <table>;
    Copy to Clipboard Toggle word wrap
  4. PostgreSQL サービスから切断します。

    <database>=# \q
    Copy to Clipboard Toggle word wrap

3.8. 継続的アーカイブを使用した PostgreSQL データのバックアップと復元

継続的アーカイブを使用すると、WAL ファイルとベースバックアップを組み合わせることで、ポイントインタイムリカバリーと高可用性に対応した堅牢な PostgreSQL バックアップを作成できます。

PostgreSQL は、データベースのデータファイルに対するすべての変更を、クラスターのデータディレクトリーの pg_wal/ サブディレクトリーにあるログ先行書き込み (WAL) ファイルに記録します。このログは、主にクラッシュからの復元を目的としています。クラッシュが発生した後、最後のチェックポイント以降に作成されたログエントリーを使用して、データベースを整合性の取れた状態に復元できます。

継続的アーカイブ方式は、オンラインバックアップとも呼ばれ、WAL ファイルと、データベースクラスターのコピー (稼働中のサーバーで実行されたベースバックアップ、またはファイルシステムレベルのバックアップ) を組み合わせたものです。

データベースの復元が必要な場合は、データベースクラスターのコピーからデータベースを復元してから、バックアップした WAL ファイルからログをリプレイすることで、システムを現在の状態に戻すことができます。

継続的アーカイブ方式では、少なくとも最後のベースバックアップの開始時刻まで遡る、途切れのない一連の WAL ファイルをすべて保持する必要があります。そのため、ベースバックアップの理想的な頻度は、次の要素に左右されます。

  • アーカイブされた WAL ファイルで利用可能なストレージボリューム。
  • 復元が必要な場合の、データ復元の最大許容期間。最後のバックアップからの期間が長い場合、システムはより多くの WAL セグメントを再生するため、回復に時間がかかります。
注記

pg_dump および pg_dumpall SQL ダンプは、継続的にアーカイブするバックアップソリューションの一部として使用することができません。SQL ダンプは論理バックアップを生成しますが、WAL 再生で使用する上で十分な情報は含まれていません。

3.8.1. 継続的アーカイブの利点と欠点

継続的アーカイブは、データベースのトランザクションログファイルを継続的に保存することで、データのバックアップ、高可用性、およびポイントインタイムリカバリー (PITR) のための堅牢な手法を提供する機能です。

利点:

  • 継続的なバックアップメソッドでは、バックアップ内の内部不整合がログ再生により修正されるため、整合性が完全に取れないベースバックアップを使用することができます。したがって、実行中の PostgreSQL サーバーでベースバックアップを実行できます。
  • ファイルシステムのスナップショットは必要ありません。tar または同様のアーカイブユーティリティーで十分です。
  • 継続的にバックアップを行うには、継続的に WAL ファイルをアーカイブします。これは、ログ再生用の WAL ファイルの順序が無限に長くなる可能性があるためです。これは、特に大規模なデータベースで有用です。
  • 継続的バックアップは、特定の時点への復旧 (ポイントインタイムリカバリー) をサポートします。WAL エントリーを最後まで再生する必要はありません。再生はいつでも停止でき、ベースバックアップを作成してから、データベースをいつでもその状態に復元できます。
  • 一連の WAL ファイルが同じベースのバックアップファイルで読み込まれた別のマシンが継続的に利用可能である場合は、任意の時点で、データベースで現在に一番近いコピーで、他のマシンを復元できます。

欠点:

  • 継続バックアップ方法は、サブセットではなく、データベースクラスター全体の復元のみをサポートします。
  • 継続的にバックアップするには、大きなアーカイブストレージが必要です。

3.8.2. WAL アーカイブの設定

PostgreSQL サーバーでログ先行書き込み (WAL) アーカイブを有効にすると、バックアップやポイントインタイムリカバリーのために、WAL セグメントファイルを取得して保存できます。

実行中の PostgreSQL サーバーは、一連の WAL レコードを生成します。サーバーは、このシーケンスを WAL セグメントファイルに物理的に分割します。このファイルには、WAL シーケンスの位置を反映する数値名が与えられます。WAL のアーカイブを使用しない場合は、セグメントファイルは再利用され、より大きなセグメント番号に名前が変更されます。

WAL データをアーカイブする場合、各セグメントファイルの内容がキャプチャーされ、新しい場所に保存されてから、セグメントファイルが再利用されます。別のマシン上の NFS マウントディレクトリー、テープドライブ、または CD など、コンテンツの保存場所には複数のオプションがあります。

WAL レコードには、設定ファイルへの変更が含まれていないことに注意してください。

手順

  1. /var/lib/pgsql/data/postgresql.conf ファイルで以下を行います。

    1. wal_level 設定パラメーターを replica 以降に設定します。
    2. archive_mode パラメーターを on に設定します。
    3. archive_command 設定パラメーターでシェルコマンドを指定します。cp コマンド、別のコマンド、またはシェルスクリプトを使用できます。

      以下に例を示します。

      archive_command = 'test ! -f /mnt/server/archivedir/%f && cp %p /mnt/server/archivedir/%f'
      Copy to Clipboard Toggle word wrap

      %p パラメーターは、アーカイブするファイルの相対パスに置き換えられ、%f パラメーターはファイル名に置き換えられます。

      このコマンドは、アーカイブ可能な WAL セグメントを /mnt/server/archivedir/ ディレクトリーにコピーします。%p パラメーターおよび %f パラメーターを置き換えると、実行されたコマンドは以下のようになります。

      test ! -f /mnt/server/archivedir/00000001000000A900000065 && cp pg_wal/00000001000000A900000065 /mnt/server/archivedir/00000001000000A900000065
      Copy to Clipboard Toggle word wrap

      アーカイブされる新規ファイルごとに同様のコマンドが生成されます。

      注記

      archive コマンドは、完了した WAL セグメントでのみ実行されます。WAL トラフィックをほとんど生成しないサーバーでは、トランザクションの完了とアーカイブストレージへの安全な記録の間にかなりの遅延が生じる可能性があります。アーカイブされていないデータの古さを制限するには、以下を行います。

      • archive_timeout パラメーターを設定して、サーバーが特定の頻度で新しい WAL セグメントファイルに切り替えるように強制します。
      • pg_switch_wal パラメーターを使用して、セグメント切り替えを強制し、トランザクションが終了後すぐにアーカイブされるようにします。
  2. postgresql サービスを再起動して、変更を適用します。

    # systemctl restart postgresql.service
    Copy to Clipboard Toggle word wrap
  3. アーカイブコマンドをテストし、既存のファイルが上書きされないこと、失敗した場合にゼロ以外の終了ステータスが返されることを確認します。
  4. データを保護するには、セグメントファイルがグループまたはワールド読み取りアクセスを持たないディレクトリーにアーカイブされていることを確認してください。

3.8.3. ベースバックアップの作成

pg_basebackup ユーティリティーを使用すると、バックアップと復元のために、データベースの整合性の取れたスナップショットを取得し、PostgreSQL ベースバックアップを作成できます。

ベースバックアッププロセスは、WAL アーカイブ領域に保存され、ベースバックアップに必要な最初の WAL セグメントファイルにちなんで名付けられたバックアップ履歴ファイルを作成します。

バックアップ履歴ファイルは、開始時間および終了時間、およびバックアップの WAL セグメントが含まれる小さなテキストファイルです。ラベル文字列を使用して関連するダンプファイルを特定した場合は、バックアップ履歴ファイルを使用して復元するダンプファイルを判断できます。

注記

データを確実に復元できるようにするために、複数のバックアップセットを維持することを検討してください。

前提条件

  • postgres スーパーユーザー、データベース管理者特権を持つユーザー、または少なくとも REPLICATION 権限を持つその他のユーザーとしてログインしている。
  • ベースバックアップ中およびベースバックアップ後に生成されたすべての WAL セグメントファイルを保持する必要があります。

手順

  1. pg_basebackup ユーティリティーを使用してベースバックアップを実行します。

    • 個々のファイル (プレーン形式) としてベースバックアップを作成するには、以下を実行します。

      $ pg_basebackup -D <backup_directory> -Fp
      Copy to Clipboard Toggle word wrap

      backup_directory は、任意のバックアップの場所に置き換えます。

      テーブルスペースを使用し、サーバーと同じホストでベースバックアップを実行する場合は、--tablespace-mapping オプションも使用する必要があります。そうしないと、バックアップを同じ場所に書き込もうとすると、バックアップが失敗します。

    • tar アーカイブ (tar および圧縮形式) としてベースバックアップを作成するには、以下を実行します。

      $ pg_basebackup -D <backup_directory> -Ft -z
      Copy to Clipboard Toggle word wrap

      backup_directory は、任意のバックアップの場所に置き換えます。

      このようなデータを復元するには、ファイルを正しい場所に手動で抽出する必要があります。

    pg_basebackup が接続するデータベースサーバーを指定するには、以下のコマンドラインオプションを使用します。

    • ホストを定義する -h オプション

      デフォルトのホストは、ローカルホストまたは PGHOST 環境変数により指定されたホストです。

    • ポートを定義する -p オプション

      デフォルトのポートは、PGPORT 環境変数またはコンパイル済みデフォルトで示されます。

  2. ベースバックアッププロセスが完了すると、バックアップ履歴ファイルで指定されている、データベースクラスターのコピーとバックアップ中に使用された WAL セグメントファイルを安全にアーカイブします。
  3. ベースバックアップで使用されている WAL セグメントファイルよりも数値が小さい WAL セグメントを削除します。これらはベースバックアップよりも古く、復元には必要ないためです。

3.8.4. 継続的なアーカイブバックアップを使用したデータベースの復元

ベースバックアップを復元し、アーカイブされた WAL ファイルを適用してポイントインタイムリカバリーを行うことで、PostgreSQL データベースを復元できます。

手順

  1. サーバーを停止します。

    # systemctl stop postgresql.service
    Copy to Clipboard Toggle word wrap
  2. 必要なデータを一時的な場所にコピーします。

    必要に応じて、クラスターデータのディレクトリー全体と、すべてのテーブルスペースをコピーします。既存データベースのコピーを 2 つ保持するには、システムに十分な空き領域が必要になることに注意してください。

    十分なスペースがない場合は、システムがダウンする前にアーカイブされなかったログが含まれている可能性がある、クラスターの pg_wal ディレクトリーの内容を保存します。

  3. クラスターデータディレクトリー、および使用しているテーブルスペースのルートディレクトリー下の既存ファイルおよびサブディレクトリーをすべて削除します。
  4. ベースバックアップからデータベースファイルを復元します。

    以下の点を確認してください。

    • ファイルは、正しい所有権 (root ではなくデータベースシステムのユーザー) で復元されます。
    • ファイルは、正しいパーミッションで復元されます。
    • pg_tblspc/ サブディレクトリーのシンボリックリンクが正しく復元されます。
  5. pg_wal/ サブディレクトリーにあるファイルをすべて削除します。

    このファイルは、ベースバックアップから作成されるため、非推奨になりました。pg_wal/ をアーカイブしていない場合は、適切な権限で再作成します。

  6. ステップ 2 で保存したアーカイブされていない WAL セグメントファイルを pg_wal/ にコピーします。
  7. クラスターデータディレクトリーの recovery.conf リカバリーコマンドファイルを作成し、restore_command 設定パラメーターでシェルコマンドを指定します。cp コマンド、別のコマンド、またはシェルスクリプトを使用できます。以下に例を示します。

    restore_command = 'cp /mnt/server/archivedir/%f "%p"'
    Copy to Clipboard Toggle word wrap
  8. サーバーを起動します。

    # systemctl start postgresql.service
    Copy to Clipboard Toggle word wrap

    サーバーは復元モードに入り、必要なアーカイブ済み WAL ファイルの読み込みを開始します。

    外部エラーにより復元が終了した場合は、サーバーを再起動するとリカバリーが続行されます。復元プロセスが完了すると、サーバーは recovery.conf の名前を recovery.done に変更します。これにより、サーバーが通常のデータベース操作を開始した後に誤って復元モードに戻ることが防止されます。

  9. データベースのコンテンツを確認して、データベースが必要な状態に復元されたことを検証します。

    データベースが必要な状態に復元されていない場合は、手順 1 に戻ります。データベースが必要な状態に復元された場合は、pg_hba.conf ファイル内のクライアント認証設定を復元して、ユーザーが接続できるようにします。

3.9. PostgreSQL データベースをあるサーバーから別のサーバーに直接転送する

pg_dump および psql ユーティリティーを使用して PostgreSQL データベースをバックアップし、別の PostgreSQL サーバー上で直接復元できます。この方法を使用すると、中間ファイルなしで 1 つのステップでデータベースを転送できます。

前提条件

  • postgres ユーザーとしてログインしている。

手順

  • ソースサーバーからターゲットサーバーにデータベースを転送します。

    $ pg_dump -h <source_server> <db_name> | psql -h <destination_server> <db_name>
    Copy to Clipboard Toggle word wrap

3.10. PostgreSQL インスタンスを以前の RHEL バージョンから RHEL 10 上の PostgreSQL に移行する

すでに RHEL 9 上で PostgreSQL を運用しており、RHEL 10 を実行するホストにデータベースソフトウェアを移動する場合は、データベースを移行できます。

次の移行方法を使用できます。

重要

PostgreSQL の移行前に、必ずソースホスト上の /var/lib/pgsql/data/ ディレクトリーをバックアップしてください。

3.10.1. バックアップとリストア方式を使用して RHEL 10 上の PostgreSQL に移行する

バックアップと復元の方法を使用して、PostgreSQL の RHEL 8 または RHEL 9 バージョンから、RHEL 10 上の同等またはそれ以降のバージョンの PostgreSQL にデータを移行できます。

前提条件

  • 既存のデータベースサーバーは RHEL 8 または RHEL 9 上で実行され、RHEL リポジトリーからインストールされた PostgreSQL バージョンを使用します。
  • 両方のホストのロケール設定は同じです。これを確認するには、両方のホストで echo $LANG コマンドの出力を比較します。

手順

  1. 移行する既存の PostgreSQL インスタンスがあるホストで、次の手順を実行します。

    1. すべてのデータベースを /var/lib/pgsql/pgdump_file.sql ファイルにエクスポートします。

      # su - postgres -c "pg_dumpall > /var/lib/pgsql/pgdump_file.sql"
      Copy to Clipboard Toggle word wrap
    2. エクスポートされたファイルを確認します。

      # su - postgres -c 'less "/var/lib/pgsql/pgdump_file.sql"'
      Copy to Clipboard Toggle word wrap
    3. 前の手順で作成したデータベースダンプと PostgreSQL 設定ファイルを RHEL 10 ホストにコピーします。以下に例を示します。

      # scp /var/lib/pgsql/pgdump_file.sql \
             /var/lib/pgsql/data/pg_hba.conf \
             /var/lib/pgsql/data/pg_ident.conf \
             /var/lib/pgsql/data/postgresql.conf \
             <user>@<rhel_10_host>:/tmp/
      Copy to Clipboard Toggle word wrap
  2. RHEL 10 ホストの場合:

    1. postgresql-server パッケージをインストールします。

      # dnf install postgresql-server
      Copy to Clipboard Toggle word wrap
    2. /var/lib/pgsql/data/ ディレクトリーを初期化します。

      # postgresql-setup --initdb
      Copy to Clipboard Toggle word wrap
    3. コピーした設定ファイルを /var/lib/pgsql/data/ ディレクトリーに移動します。

      # mv /tmp/pg_hba.conf \
           /tmp/pg_ident.conf \
           /tmp/postgresql.conf \
           /var/lib/pgsql/data/
      Copy to Clipboard Toggle word wrap
    4. /var/lib/pgsql/data/ directory 内のコンテンツの正しい所有権を確認します。

      # chown -R postgres:postgres /var/lib/pgsql/data/
      Copy to Clipboard Toggle word wrap
    5. /var/lib/pgsql/data/ の SELinux コンテキストを復元します。

      # restorecon -Rv /var/lib/pgsql/data/
      Copy to Clipboard Toggle word wrap
    6. postgresql サービスを有効にして起動します。

      # systemctl enable --now postgresql.service
      Copy to Clipboard Toggle word wrap
    7. postgres ユーザーとしてデータをインポートします。

      # su - postgres -c 'psql -f /tmp/pgdump_file.sql postgres'
      Copy to Clipboard Toggle word wrap
    8. データベースを検証し、PostgreSQL サーバーを使用するアプリケーションが期待どおりに動作することを確認します。

PostgreSQL 13 インスタンスを以前の RHEL バージョンから RHEL 10 上の PostgreSQL 16 に移行する場合は、高速アップグレード方式を使用できます。この方法では、/var/lib/pgsql/data/ ディレクトリーの内容を RHEL 10 ホストにコピーし、pg_update ユーティリティーによってデータベースが変換されます。

重要

この方法は、既存の PostgreSQL インスタンスがバージョン 13 で、ソースホストと宛先ホストのハードウェアアーキテクチャーが同じである場合にのみ機能します。それ以外の場合は、バックアップと復元の方法 を使用します。

前提条件

  • 既存のデータベースサーバーが PostgreSQL 13 を使用している。
  • 現在のサーバーと将来のサーバーのハードウェアアーキテクチャーが同じである。
  • RHEL 10 ホストには、/var/lib/pgsql/ ディレクトリーを保持するディスク上に十分な空き領域がある。

    たとえば、移行する PostgreSQL サーバー上のディレクトリーのサイズが 10 GiB の場合、移行中に RHEL 10 ホストに少なくとも 20 GiB の空きディスク領域が必要です。

  • 両方のホストのロケール設定は同じです。これを確認するには、両方のホストで echo $LANG コマンドの出力を比較します。

手順

  1. 移行する既存の PostgreSQL インスタンスがあるホストで、次の手順を実行します。

    1. postgresql サービスを停止します。

      # systemctl stop postgresql.service
      Copy to Clipboard Toggle word wrap
    2. /var/lib/pgsql/ ディレクトリーに移動し、data サブディレクトリーをバックアップします。

      # cd /var/lib/pgsql/
      # tar -zcf ~/pgdata.bak.tar.gz data/
      Copy to Clipboard Toggle word wrap
    3. ~/pgdata.bak.tar.gz アーカイブを RHEL 10 ホストにコピーします。以下に例を示します。

      # scp ~/pgdata.bak.tar.gz <user>@<rhel_10_host>:/tmp/
      Copy to Clipboard Toggle word wrap
  2. RHEL 10 ホストの場合:

    1. 必要なパッケージをインストールします。

      # dnf install postgresql-server postgresql-upgrade
      Copy to Clipboard Toggle word wrap

      postgresql-upgrade パッケージは、移行中に必要な PostgreSQL 13 サーバーを提供します。

    2. サードパーティーの PostgreSQL サーバーモジュールを使用する場合は、postgresql-devel および postgresql-upgrade-devel の両方のパッケージに対してビルドし、インストールします。
    3. postgresql サービスが停止していることを確認します。

      # systemctl stop postgresql.service
      Copy to Clipboard Toggle word wrap
    4. /var/lib/pgsql/ ディレクトリーに移動し、以前のホストからバックアップされたデータディレクトリーを抽出します。

      # cd /var/lib/pgsql/
      # tar -zxf /tmp/pgdata.bak.tar.gz
      Copy to Clipboard Toggle word wrap
    5. オプション: /tmp/pgdata.bak.tar.gz アーカイブを削除します。

      # rm /tmp/pgdata.bak.tar.gz
      Copy to Clipboard Toggle word wrap
    6. アップグレードプロセスを実行します。

      # postgresql-setup --upgrade
      Copy to Clipboard Toggle word wrap

      postgresql-setup シェルスクリプトは、/var/lib/pgsql/data/ ディレクトリーの名前を /var/lib/pgsql/data-old/ に変更し、pg_upgrade ユーティリティーを使用して、データベースを再作成された /var/lib/pgsql/data/ ディレクトリーに移行します。

      重要

      pg_upgrade ユーティリティーは、データベースのみを移行し、設定ファイルは移行しません。移行後、/var/lib/pgsql/data/ にはデフォルトの .conf ファイルのみが含まれます。以前にカスタム設定ファイルがあった場合は、それらを /var/lib/pgsql/data-old/ ディレクトリーからコピーし、新しい PostgreSQL バージョンと互換性があることを確認します。

    7. postgresql サービスを有効にして起動します。

      # systemctl enable --now postgresql.service
      Copy to Clipboard Toggle word wrap
    8. すべてのデータベースをクリーンアップして分析します。

      # su postgres -c 'vacuumdb --all --analyze-in-stages'
      Copy to Clipboard Toggle word wrap
    9. データベースを検証し、PostgreSQL サーバーを使用するアプリケーションが期待どおりに動作することを確認します。
    10. オプション: 移行前のデータベースと設定ファイルが含まれている /var/lib/pgsql/data-old/ ディレクトリーを削除します。

      # rm -r /var/lib/pgsql/data-old/
      Copy to Clipboard Toggle word wrap
    11. オプション: postgresql-upgrade パッケージを削除します。

      # dnf remove postgresql-upgrade
      Copy to Clipboard Toggle word wrap

法律上の通知

Copyright © 2025 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2026 Red Hat
トップに戻る