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の間の互換性のない変更を参照してください。

master ブランチを含むPro統合環境およびスターター環境でのサービス設定については、次の手順を使用します。

NOTE
Adobe Commerce サポートチケット ​を送信して、Pro実稼動環境とステージング環境のサービス構成を変更します。

MySQL​を有効にするには:

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

    code language-yaml
    mysql:
        type: mysql:<version>
        disk: 5120
    
    note tip
    TIP
    ディスク領域が不足しているため、PDO Exception: MySQL server has gone awayなどのMySQL エラーが発生する可能性があります。 .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で、main データベースへのadmin アクセス権があります。
  • 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単位)。 範囲1100
16
optimizer_switch
クエリオプティマイザーの値を設定します。 MariaDB ドキュメント ​を参照してください。
optimizer_use_condition_selectivity
オプティマイザーが使用する統計情報を選択します。 範囲15MariaDB ドキュメント ​を参照してください。
4 (10.4以降)

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

必要に応じて、main データベースにアクセスするための異なる権限を持つ複数のユーザーを設定できます。

デフォルトでは、データベースへの管理者アクセス権を持つmysqlという名前のエンドポイントが1つあります。 複数のデータベースユーザーを設定するには、services.yaml ファイルで複数のエンドポイントを定義し、.magento.app.yaml ファイルで関係を宣言する必要があります。 Pro ステージング環境および実稼動環境の場合は、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権限があります。

上記の例で定義されたエンドポイントを.magento.app.yaml ファイルのrelationships プロパティに追加します。 例:

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. $MAGENTO_CLOUD_RELATIONSHIPS変数のdatabaseおよびtype プロパティからMySQL ログイン資格情報を取得します。

    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. データベースに接続します。

    • Starterには、次のコマンドを使用します。

      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
この機能は、Pro実稼動クラスターとステージングクラスターでのみ使用できます。

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

トラブルシューティング

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

recommendation-more-help
commerce-on-cloud-help-cloud-guide