MySQL サービスの設定

この mysql サービスは以下に基づいて永続的なデータストレージを提供 MariaDB バージョン 10.2 ~ 10.4、 XtraDB ストレージエンジンと、MySQL 5.6 および 5.7 の機能を再実装。

MariaDB 10.4 でのインデックス再作成は、他の MariaDB または MySQL バージョンに比べて時間がかかります。 参照: インデクサー が含まれる パフォーマンスのベストプラクティス ガイド。

WARNING
MariaDB をバージョン 10.1 から 10.2 にアップグレードする場合は注意が必要です。MariaDB 10.1 は、サポートされる最後のバージョンです XtraDB ストレージエンジンとして。 MariaDB 10.2 は、 InnoDB ストレージエンジン用。 10.1 から 10.2 にアップグレードした後は、変更をロールバックできません。 Adobe Commerceは両方のストレージエンジンをサポートしていますが、MariaDB 10.2 と互換性があることを確認するには、プロジェクトで使用されている拡張機能やその他のシステムを確認する必要があります。参照: 10.1 と 10.2 の間で互換性のない変更.

Pro 統合環境およびスターター環境でのサービス設定については、以下の手順に従ってください。 master 分岐。

NOTE
Adobe Commerce サポートチケットを送信 pro 実稼動環境およびステージング環境でサービス設定を変更する場合。

MySQL を有効にするには:

  1. 必要な名前、タイプ、ディスク値(MB 単位)をに追加します .magento/services.yaml ファイル。

    code language-yaml
    mysql:
        type: mysql:<version>
        disk: 5120
    
    note tip
    TIP
    MySQL エラー(など) PDO Exception: MySQL server has gone awayディスク容量が不足した結果、が発生する場合があります。 のサービスに十分なディスク領域が割り当てられていることを確認します。 .magento/services.yaml ファイル。
  2. での関係の設定 .magento.app.yaml ファイル。

    code language-yaml
    relationships:
        database: "mysql:mysql"
    
  3. コードの変更を追加、コミット、プッシュします。

    code language-bash
    git add .magento/services.yaml .magento.app.yaml && git commit -m "Enable mysql service" && git push origin <branch-name>
    
  4. サービス関係の検証.

TIP
サービスの初期セットアップ後、 services.yaml および .magento.app.yaml 設定ファイル。 参照: サービスバージョンの変更 サービスのアップグレードまたはダウングレードのガイダンス。

MySQL データベースの設定

MySQL データベースを設定する際には、次のオプションがあります。

  • schemas- スキーマはデータベースを定義します。 デフォルトのスキーマは main データベース。
  • endpoints – 各エンドポイントは、特定の権限を持つ資格情報を表します。 デフォルトのエンドポイントはです。 mysql、次を持つ admin アクセス (への) main データベース。
  • properties- プロパティを使用して、追加のデータベース構成を定義します。

以下は、の基本的な設定例です .magento/services.yaml ファイル:

mysql:
    type: mysql:10.4
    disk: 5120
    configuration:
        properties:
            optimizer_switch: "rowid_filter=off"
            optimizer_use_condition_selectivity: 1

この properties 上記の例では、デフォルトを変更します optimizer の設定 パフォーマンスのベストプラクティスガイドで推奨.

MariaDB 設定オプション:

オプション
説明
デフォルト値
default_charset
デフォルトの文字セット。
utf8mb4
default_collation
既定の照合順序です。
utf8mb4_unicode_ci
max_allowed_packet
パケットの最大サイズ (MB 単位)。 範囲 1 対象: 100.
16
optimizer_switch
クエリオプティマイザーの値を設定します。 参照: MariaDB ドキュメント.
optimizer_use_condition_selectivity
オプティマイザが使用する統計を選択します。 範囲 1 対象: 5. 参照: MariaDB ドキュメント.
10.4 以降の場合は 4

複数のデータベースユーザーの設定

オプションで、へのアクセスに関する異なる権限を持つ複数のユーザーを設定できます main データベース。

デフォルトでは、という名前のエンドポイントが 1 つあります。 mysql データベースへの管理者アクセス権を持つ。 複数のデータベースユーザーを設定するには、で複数のエンドポイントを定義する必要があります。 services.yaml ファイルに関係を記述し、で関係を宣言します .magento.app.yaml ファイル。 ステージング環境および実稼動環境の場合は、 Adobe Commerce サポートチケットを送信 追加のユーザーをリクエストします。

ネストされた配列を使用して、特定のユーザーアクセスのエンドポイントを定義します。 各エンドポイントは、1 つ以上のスキーマ(データベース)へのアクセスと、それぞれに対する異なるレベルの権限を指定できます。

有効な権限レベルは次のとおりです。

  • ro:SELECT クエリのみ使用できます。
  • rw:SELECT クエリと INSERT クエリ、UPDATE クエリ、DELETEクエリを使用できます。
  • admin:DDL クエリ(CREATE TABLE、DROP TABLE など)を含め、すべてのクエリが許可されます。

例:

mysql:
    type: mysql:10.4
    disk: 5120
    configuration:
        schemas:
            - main
        endpoints:
            admin:
                default_schema: main
                privileges:
                    main: admin
            reporter:
                privileges:
                    main: ro
            importer:
                privileges:
                    main: rw
        properties:
            optimizer_switch: "rowid_filter=off"
            optimizer_use_condition_selectivity: 1

前述の例では、 admin エンドポイントは、への管理者レベルのアクセスを提供します main データベース、 reporter エンドポイントは、読み取り専用アクセスを提供し、 importer エンドポイントは、読み取り/書き込みアクセスを提供します。つまり、

  • この admin ユーザーはデータベースを完全に制御できます。
  • この reporter ユーザーは SELECT 権限のみ持っています。
  • この importer ユーザーは、SELECT、INSERT、UPDATE およびDELETE権限を持っています。

上記の例で定義したエンドポイントを、 relationships のプロパティ .magento.app.yaml ファイル。 例:

relationships:
    database: "mysql:admin"
    databasereporter: "mysql:reporter"
    databaseimporter: "mysql:importer"
NOTE
1 つの MySQL ユーザーを設定した場合、 DEFINER ストアド・プロシージャとビューのアクセス制御メカニズム。

データベースへの接続

MariaDB データベースに直接アクセスするには、SSH を使用してリモート クラウド環境にログインし、データベースに接続する必要があります。

  1. SSH を使用してリモート環境にログインします。

    code language-bash
    magento-cloud ssh
    
  2. から MySQL ログイン資格情報を取得する database および type のプロパティ $CLOUD_RELATIONSHIPS$MAGENTO 変数。

    code language-bash
    echo $MAGENTO_CLOUD_RELATIONSHIPS | base64 -d | json_pp
    

    または

    code language-bash
    php -r 'print_r(json_decode(base64_decode($_ENV["MAGENTO_CLOUD_RELATIONSHIPS"])));'
    

    応答で、MySQL 情報を見つけます。 例:

    code language-json
    "database" : [
       {
          "password" : "",
          "rel" : "mysql",
          "hostname" : "nnnnnnnn.mysql.service._.magentosite.cloud",
          "service" : "mysql",
          "host" : "database.internal",
          "ip" : "###.###.###.###",
          "port" : 3306,
          "path" : "main",
          "cluster" : "projectid-integration-id",
          "query" : {
             "is_master" : true
          },
          "type" : "mysql:10.3",
          "username" : "user",
          "scheme" : "mysql"
       }
    ],
    
  3. データベースに接続します。

    • スターターの場合は、次のコマンドを使用します。

      code language-bash
      mysql -h database.internal -u <username>
      
    • Pro の場合は、次のコマンドを、から取得したホスト名、ポート番号、ユーザー名、パスワードと共に使用します。 $MAGENTO_CLOUD_RELATIONSHIPS 変数。

      code language-bash
      mysql -h <hostname> -P <number> -u <username> -p'<password>'
      
TIP
を使用できます magento-cloud db:sql リモート・データベースに接続して SQL コマンドを実行するコマンド。

セカンダリ データベースに接続する

IMPORTANT
この機能は、実稼動環境およびステージングクラスターでのみ使用できます。

場合によっては、データベースのパフォーマンスを向上させたり、データベース ロックの問題を解決するために、セカンダリ データベースに接続する必要があります。 この設定が必要な場合は、 "port" : 3304 接続を確立します。 を参照してください。 MySQL スレーブ接続を設定するためのベストプラクティス のトピック 実装のベストプラクティス ガイド。

トラブルシューティング

MySQL の問題のトラブルシューティングについては、次のAdobe Commerce サポートの記事を参照してください。

recommendation-more-help
05f2f56e-ac5d-4931-8cdb-764e60e16f26