MariaDB のアップグレードの前提条件
MariaDB を使用している場合は、クラウドインフラストラクチャー上のAdobe Commerceをアップグレードする前に、データベースソフトウェアをアップグレードする必要がある場合もあります。 例:
- Adobe Commerce 2.4.6 (MariaDB バージョン 10.5.1 以降)
- Adobe Commerce 2.3.5 と MariaDB バージョン 10.3 以前
Adobe Commerce 2.4.6
MariaDB 10.5.1 以降、古いテンポラル形式の列は、SHOW CREATE TABLE
、SHOW COLUMNS
、DESCRIBE
文の出力および INFORMATION_SCHEMA.COLUMNS
テーブルの COLUMN_TYPE
列に /* mariadb-5.3 */
コメントでマークされます。 MariaDB ドキュメントを参照してください。
MariaDB コメントが原因で、Adobe Commerceが日付列を適切なデータタイプにマッピングできず、カスタムコードで予期しない動作が起こる可能性があります。
MariaDB を旧バージョンからバージョン 10.6 にアップグレードする際の予期しない動作を避けるために、Adobeでは列を新しい内部フォーマットに移行することをお勧めします。
デフォルトの設定
MariaDB 10.1.2 では、MySQL 5.6 から新しい時間形式が導入されました。mysql56_temporal_format
システム変数を使用すると、alter table の実行時またはデータベースのインポート時に、データベースで古い日付形式を新しい日付形式に自動的に変換できます。 mysql56_temporal_format
のデフォルト設定は、クラウドインフラストラクチャー上のAdobe Commerceで常に有効になっています。
日付列を移行
次のクエリは、MariaDB を 10.5.1 以降にアップグレードした後に移行する必要がある、影響を受けるテーブルと列を示しています。
SELECT * FROM INFORMATION_SCHEMA.`COLUMNS` WHERE TABLE_SCHEMA = DATABASE() AND COLUMN_TYPE LIKE '%mariadb%';
列を新しい内部日付形式に移行するには、データベースを再インポートするか、同じ列定義で識別された列で alter を実行する必要があります。 次のクエリは、必要な変更クエリを生成します。
SELECT CONCAT( 'ALTER TABLE `', COALESCE(TABLE_NAME), '`', ' MODIFY ', '`', COALESCE(COLUMN_NAME), '`', ' ', COALESCE(DATA_TYPE), ' ', IF(COALESCE(IS_NULLABLE)='YES','NULL', 'NOT NULL'), IF(COLUMN_DEFAULT IS NOT NULL,CONCAT(' DEFAULT ',COLUMN_DEFAULT),' '), ' ', COALESCE(EXTRA), ' COMMENT \'', COALESCE(COLUMN_COMMENT), '\';' ) as sql_query FROM INFORMATION_SCHEMA.`COLUMNS` WHERE TABLE_SCHEMA = DATABASE() AND COLUMN_TYPE LIKE '%mariadb%';
Adobe Commerce 2.3.5
クラウドインフラストラクチャー上の MariaDB サービスをバージョン 10.0 または 10.2 からバージョン 10.3、10.4 または 10.5 にアップグレードします。MariaDB バージョン 10.3 以降では、動的テーブル行形式を使用するようにデータベースを必要とし、Adobe Commerceでは、テーブル用に InnoDB ストレージエンジンを使用する必要があります。 この記事では、これらの MariaDB 要件に準拠するようにデータベースを更新する方法について説明します。
データベースを準備したら、Adobe Commerceのアップグレードプロセスに進む前に、Adobe Commerce サポートチケットを送信して、クラウドインフラストラクチャ上の MariaDB サービスバージョンを更新します。
アップグレード用にデータベースを準備
Adobe Commerce サポートチームがアップグレードプロセスを開始する前に、データベーステーブルを変換してデータベースを準備します。
- 行形式を
COMPACT
からDYNAMIC
に変換します - ストレージエンジンを
MyISAM
からInnoDB
に変更します
コンバージョンを計画およびスケジュールする際は、次の点に注意してください。
-
大規模なデータベースでは、
COMPACT
テーブルからDYNAMIC
テーブルへの変換に数時間かかる場合があります。 -
データの破損を防ぐには、ライブサイトでコンバージョン作業を完了しないようにします。
-
サイトのトラフィックが少ない時間帯にコンバージョン作業を完了します。
-
データベーステーブルを変換するコマンドを実行する前に、サイトを メンテナンスモードに切り替えます。
データベース テーブル行の形式を変換する
クラスター内の 1 つのノードでテーブルを変換できます。 変更内容は、他のサービスノードに自動的にレプリケートされます。
-
クラウドインフラストラクチャー上のAdobe Commerceから、SSH を使用して Node 1 に接続します。
-
MariaDB にログインします。
-
コンパクト形式から動的形式に変換するテーブルを特定します。
code language-mysql SELECT table_name, row_format FROM information_schema.tables WHERE table_schema=DATABASE() and row_format = 'Compact';
-
変換作業をスケジュールできるように、テーブルサイズを決定します。
code language-mysql SELECT table_schema as 'Database', table_name AS 'Table', round(((data_length + index_length) / 1024 / 1024), 2) 'Size in MB' FROM information_schema.TABLES ORDER BY (data_length + index_length) DESC;
テーブルが大きいと、変換に時間がかかります。 テーブルをレビューし、優先度別およびテーブルサイズ別に変換作業をバッチ化して、必要なメンテナンスウィンドウを計画するのに役立ちます。
-
すべてのテーブルを 1 つずつ動的形式に変換します。
code language-mysql ALTER TABLE [ table name here ] ROW_FORMAT=DYNAMIC;
データベーステーブルのストレージ形式の変換
クラスター内の 1 つのノードでテーブルを変換できます。 変更内容は、他のサービスノードに自動的にレプリケートされます。
ストレージ形式を変換するプロセスは、Adobe Commerce Starter とAdobe Commerce Pro プロジェクトで異なります。
- スターターアーキテクチャの場合は、MySQL
ALTER
コマンドを使用して形式を変換します。 - Pro アーキテクチャでは、MySQL
CREATE
およびSELECT
コマンドを使用して、InnoDB
ストレージを含むデータベーステーブルを作成し、既存のテーブルから新しいテーブルにデータをコピーします。 この方法では、変更がクラスター内のすべてのノードに確実にレプリケートされます。
Adobe Commerce Pro プロジェクトのテーブルストレージフォーマットの変換
-
MyISAM
ストレージを使用するテーブルを識別します。code language-mysql SELECT table_name FROM INFORMATION_SCHEMA.TABLES WHERE engine = 'MyISAM';
-
すべてのテーブル
InnoDB
一度に 1 つずつストレージ形式に変換します。-
名前の競合を防ぐために、既存のテーブルの名前を変更します。
code language-mysql RENAME TABLE <existing_table> <table_old>;
-
既存のテーブルのデータを使用して、
InnoDB
ストレージを使用するテーブルを作成します。code language-mysql CREATE TABLE <existing_table> ENGINE=InnoDB SELECT * from <table_old>;
-
新しいテーブルに必要なデータがすべて含まれていることを確認します。
-
名前を変更した元のテーブルを削除します。
-
Adobe Commerce スタータープロジェクトのテーブルストレージ形式の変換
-
MyISAM
ストレージを使用するテーブルを識別します。code language-mysql SELECT table_name FROM INFORMATION_SCHEMA.TABLES WHERE engine = 'MyISAM';
-
MyISAM
ストレージを使用するテーブルをInnoDB
ストレージに変換します。code language-mysql ALTER TABLE [ table name here ] ENGINE=InnoDB;
データベース変換の検証
MariaDB バージョン 10.3、10.4、または 10.6 への予定アップグレードの前日に、すべてのテーブルのロー形式とストレージ・エンジンが正しいことを確認します。 検証が必要なのは、変換が完了した後にコードのデプロイメントを行うと、一部のテーブルが元の設定に戻る場合があるためです。
-
データベースにログインします。
-
COMPACT
行の形式がまだ残っているテーブルを確認します。code language-mysql SELECT table_name, row_format FROM information_schema.tables WHERE table_schema=DATABASE() and row_format = 'Compact';
-
MyISAM
ストレージ形式をまだ使用しているテーブルがないかどうかを確認しますcode language-mysql SELECT table_name FROM INFORMATION_SCHEMA.TABLES WHERE engine = 'MyISAM';
-
テーブルが元に戻された場合は、手順を繰り返してテーブル行の形式とストレージエンジンを変更します。
ストレージエンジンの変更
MyISAM テーブルの InnoDB への変換を参照してください。