一般的なMySQL ガイドライン
サポートされているバージョンのMySQLについては、必要システム構成を参照してください。
Adobe stronglyでは、データベースを設定する際に、次の標準に従うことをお勧めします。
- Adobe Commerceでは、インデックス再作成時のデータベースアクセスを向上させるためにMySQL データベーストリガーを使用しています。 これらは、インデクサーモードが スケジュール に設定されている場合に作成されます。 カスタムトリガーは、将来のAdobe Commerce バージョンとの互換性が失われる可能性があるため、データベース内のカスタムトリガーはサポートされません。
- 続行する前に、これらの潜在的なMySQL トリガーの制限事項を確認してください。
- データベースのセキュリティ体制を強化するには、
STRICT_ALL_TABLESSQL モードを有効にして、無効なデータ値を保存しないようにします。これにより、データベースの不要なインタラクションが発生する可能性があります。 - Adobe Commerceでは、notはMySQL ステートメント ベースのレプリケーションをサポートしていません。 only 行ベースのレプリケーション を使用していることを確認してください。
CREATE TEMPORARY TABLE ステートメントを使用しています。トランザクション内では互換性がありません。データベース実装では、Google Cloud SQLの第2世代インスタンス など、GTID ベースのレプリケーションを使用しています。 MySQL for Cloud SQL 8.0を代替手段として検討してください。UbuntuでのMySQLのインストール
Adobe Commerce 2.4は、インストールするリリースに応じて、異なるMySQL 8 バージョンをサポートしています。 必要システム構成に記載されているバージョンを使用し、次のリンクに従って、お使いのコンピューターにMySQLをインストールする手順を確認してください。
大量の製品をインポートする場合は、max_allowed_packetの値をデフォルトの16 MBよりも大きい値に増やすことができます。
max_allowed_packetの値を増やすためにサポートチケットを開く必要があります。 Adobe Commerce on cloud infrastructure Starterのお客様は、/etc/mysql/mysql.cnf ファイルの設定を更新することで、値を増やすことができます。値を増やすには、テキストエディターで/etc/mysql/mysql.cnf ファイルを開き、max_allowed_packetの値を見つけます。 mysql.cnf ファイルに変更を保存し、テキストエディターを閉じて、MySQL (service mysql restart)を再起動します。
オプションで設定した値を確認するには、mysql> プロンプトで次のコマンドを入力します。
SHOW VARIABLES LIKE 'max_allowed_packet';
MySQL 8の変更
Adobe Commerce 2.4では、MySQL 8のサポートが追加されました。
この節では、開発者が認識すべきMySQL 8の主な変更点について説明します。
整数型の幅を削除しました(パディング)
整数データ型(TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT)の表示幅仕様は、MySQL 8.0.17で廃止されました。 出力にデータ型定義を含むステートメントでは、TINYINT (1)を除き、整数型の表示幅が表示されなくなりました。 MySQL コネクタは、TINYINT (1)列がBOOLEAN列として始まったと仮定します。 この例外は、彼らがその仮定を作り続けることを可能にします。
例
mysql 8.19でのadmin_userの説明
int unsignedNULLauto_incrementfirstnamevarchar(32)NULLlastnamevarchar(32)NULLemailvarchar(128)NULLusernamevarchar(40)NULLpasswordvarchar(255)NULLcreatedtimestampCURRENT_TIMESTAMPDEFAULT_GENERATEDmodifiedtimestampCURRENT_TIMESTAMPCURRENT_TIMESTAMPのDEFAULT_GENERATEDlogdatetimestampNULLlognumsmallint unsigned0TINYINT (1)を除き、すべての整数パディング (TINYINT > 1、SMALLINT、MEDIUMINT、INT、BIGINT)をdb_schema.xml ファイルから削除する必要があります。
詳しくは、https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-19.html#mysqld-8-0-19-featureを参照してください。
ビヘイビアーによるデフォルトの順序
8.0以前は、エントリは外部キーでソートされていました。 デフォルトの並べ替え順序は、使用するエンジンによって異なります。
コードが特定のソートに依存する場合は、常にソート順序を指定します。
GROUP BYのASCおよびDESC修飾子は非推奨
MySQL 8.0.13の時点で、GROUP BY句の非推奨のASCまたはDESC修飾子が削除されました。 以前にGROUP BYの並べ替えに依存していたクエリは、以前のMySQL バージョンとは異なる結果を生成する可能性があります。 指定された並べ替え順序を生成するには、ORDER BY句を指定します。
CommerceとMySQL 8
MySQL 8を適切にサポートするために、Adobe Commerceにいくつかの変更がありました。
クエリと挿入の動作
Adobe Commerceは、/lib/internal/Magento/Framework/DB/Adapter/Pdo/Mysql.php:424.でSET SQL_MODE="を設定することにより、通常の検証動作を無効にしました。 検証を無効にすると、MySQLでデータが切り捨てられる可能性があります。 MySQLでは、クエリの動作が変更されました。IP アドレスが整数ではなく文字列として正しく表示されるようになったため、Select * on my_table where IP='127.0.0.1'は結果を返しません。
MySQL 5.7からMySQL 8へのアップグレード
MySQLをバージョン 5.7からバージョン 8に正しく更新するには、次の手順に従う必要があります。
-
Adobe Commerceを2.4.0にアップグレードします。
あらゆる要素をテストし、システムが期待通りに動作することを確認します。 -
メンテナンスモードを有効にする:
code language-shell bin/magento maintenance:enable -
データベースのバックアップを作成します。
code language-shell bin/magento setup:backup --db -
MySQLをバージョン 8に更新します。
-
バックアップしたデータをMySQLにインポートします。
-
キャッシュをクリーニングします。
code language-shell bin/magento cache:clean -
メンテナンスモードを無効にする:
code language-shell bin/magento maintenance:disable
データベースインスタンスの設定
この節では、Adobe Commerceのデータベースインスタンスを作成する方法について説明します。 新しいデータベースインスタンスを作成することをお勧めしますが、オプションで既存のデータベースインスタンスにAdobe Commerceをインストールできます。
MySQL データベースインスタンスを設定するには:
-
任意のユーザーとしてデータベース・サーバにログインします。
-
MySQL コマンドプロンプトに移動します。
code language-shell mysql -u root -p -
プロンプトが表示されたら、MySQL
rootユーザーのパスワードを入力します。 -
ユーザー名
magentoのmagentoという名前のデータベースインスタンスを作成するには、次のコマンドを順に入力します。code language-sql create database magento;code language-sql create user 'magento'@'localhost' IDENTIFIED BY 'magento';code language-sql GRANT ALL ON magento.* TO 'magento'@'localhost';code language-sql flush privileges; -
コマンド プロンプトを終了するには、
exitと入力します。 -
データベースを確認します。
code language-shell mysql -u magento -pMySQL モニターが表示される場合は、データベースを適切に作成しました。 エラーが表示された場合は、上記のコマンドを繰り返します。
-
Web サーバーとデータベース サーバーが異なるホスト上にある場合は、このトピックで説明したタスクをデータベース サーバー上で実行し、 リモート MySQL データベース接続の設定を参照してください。
ビジネスに適したデータベースインスタンスを設定することをお勧めします。 データベースを設定する際は、次の点に注意してください。
-
インデクサーには、より大きな
tmp_table_size値とmax_heap_table_size値(64 Mなど)が必要です。batch_sizeパラメーターを設定する場合は、その値をテーブルサイズ設定と共に調整して、インデクサーのパフォーマンスを向上させることができます。 詳しくは、最適化ガイド を参照してください。 -
最適なパフォーマンスを得るには、すべてのMySQLおよびAdobe Commerce インデックステーブルをメモリに保持できることを確認します(例:
innodb_buffer_pool_size)。 -
MariaDB 10.4でのインデックス再作成は、他のMariaDBまたはMySQL バージョンと比較してより多くの時間がかかります。 設定のベストプラクティス を参照してください。
-
-
MySQL
TIMESTAMPフィールドが、アプリケーションの宣言型スキーマアーキテクチャで期待される環境設定と構成に従うには、システム変数explicit_defaults_for_timestampをonに設定する必要があります。参照:
この設定が有効になっていない場合、
bin/magento setup:db:statusは常にDeclarative Schema is not up to dateを報告します。
explicit_defaults_for_timestamp設定は非推奨です。 この設定は、将来のMySQL リリースで削除される非推奨のTIMESTAMP ビヘイビアーを制御します。 これらのビヘイビアーが削除されると、explicit_defaults_for_timestamp設定も削除されます。explicit_defaults_for_timestamp設定はデフォルトで_OFF_になります。MariaDB 10.4 および 10.6 でのインデックス再作成は、以前のバージョンの MariaDB または MySQL と比較して時間がかかります。 インデックス再作成を高速化するには、次の MariaDB 設定パラメーターを設定することをお勧めします。
MariaDB 10.6 にアップグレードした後、インデックス作成に関係なくパフォーマンスが低下する場合は、--query-cache-type 設定を有効にすることを検討してください。 例:--query-cache-type=ON。
クラウドインフラストラクチャプロジェクトでAdobe Commerceをアップグレードする前に、MariaDB をアップグレードする必要がある場合もあります(MariaDB のアップグレードのベストプラクティスを参照 )。
例:
- Adobe Commerce 2.4.6 (MariaDB バージョン 10.5.1 以降)
- Adobe Commerce 2.3.5 と MariaDB バージョン 10.3 以前
これらの推奨事項に加えて、次のパラメータの設定についてはデータベース管理者に問い合わせてください。