MySQL サービスの設定
mysql
サービスは、MariaDB バージョン 10.2 から 10.4 に基づいて永続的なデータストレージを提供し、XtraDB ストレージエンジンをサポートし、MySQL 5.6 と 5.7 の機能を再実装しました。
MariaDB 10.4 でのインデックス再作成は、他の MariaDB または MySQL バージョンに比べて時間がかかります。 『 パフォーマンスのベストプラクティス 🔗 ガイドの インデクサー を参照してください。
master
ブランチを含む Pro 統合環境とスターター環境でのサービス設定については、以下の手順を使用します。
MySQL を有効にするには:
-
必要な名前、タイプ、ディスク値(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
ファイルのサービスに十分なディスク領域が割り当てられていることを確認します。 -
.magento.app.yaml
ファイルで関係を設定します。code language-yaml relationships: database: "mysql:mysql"
-
コードの変更を追加、コミット、プッシュします。
code language-bash git add .magento/services.yaml .magento.app.yaml && git commit -m "Enable mysql service" && git push origin <branch-name>
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
default_collation
max_allowed_packet
1
~ 100
。optimizer_switch
optimizer_use_condition_selectivity
複数のデータベースユーザーの設定
オプションとして、main
データベースへのアクセス権が異なる複数のユーザーを設定できます。
デフォルトでは、データベースへの管理者アクセス権を持つ mysql
という名前のエンドポイントが 1 つあります。 複数のデータベースユーザーを設定するには、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権限を持っています。
上記の例で定義したエンドポイントを、.magento.app.yaml
ファイルの relationships
プロパティに追加します。 例:
relationships:
database: "mysql:admin"
databasereporter: "mysql:reporter"
databaseimporter: "mysql:importer"
DEFINER
のアクセス制御メカニズムを使用することはできません。データベースへの接続
MariaDB データベースに直接アクセスするには、SSH を使用してリモート クラウド環境にログインし、データベースに接続する必要があります。
-
SSH を使用してリモート環境にログインします。
code language-bash magento-cloud ssh
-
$login_CLOUD_RELATIONSHIPS 変数の
database
プロパティおよびtype
プロパティから MySQL 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" } ],
-
データベースに接続します。
-
スターターの場合は、次のコマンドを使用します。
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>'
-
magento-cloud db:sql
コマンドを使用すると、リモート・データベースに接続し、SQL コマンドを実行できます。セカンダリ データベースに接続する
場合によっては、データベースのパフォーマンスを向上させたり、データベース ロックの問題を解決するために、セカンダリ データベースに接続する必要があります。 この設定が必要な場合は、"port" : 3304
を使用して接続を確立します。 実装のベストプラクティスガイドの MySQL スレーブ接続を設定するためのベストプラクティス トピックを参照してください。
トラブルシューティング
MySQL の問題のトラブルシューティングについては、次のAdobe Commerce サポートの記事を参照してください。