このトピックでは、PolarDB-X インスタンスと、そのインスタンスにアタッチされた RDS インスタンスのストレージエンジンを InnoDB から X-Engine に変換する方法について説明します。
背景情報
多くのユーザーが、既存の ApsaraDB RDS インスタンスのストレージエンジンとして X-Engine を使用したいと考えています。以下のリストは、これらのユーザーと既存の RDS インスタンスの特性を示しています。
ほとんどの RDS インスタンスは MySQL 5.6 または MySQL 5.7 を実行しています。MySQL 8.0 を実行している RDS インスタンスはほとんどありません。
単一の RDS インスタンスのデータ量が大きく、インスタンスタイプでサポートされているディスク容量の上限に達しています。たとえば、4 CPU コアと 8 GB のメモリを搭載した RDS インスタンスは、最大 2 TB のローカルディスクをサポートしています。
ほとんどのユーザーは PolarDB-X を使用しています。さらに、一部のユーザーは、以前のバージョンの PolarDB-X を使用しているか、SQL パススルーなどのカスタム機能を使用しています。
ユーザーの要件を満たすために、Alibaba Cloud では、このトピックの手順に従って、PolarDB-X のストレージエンジンを InnoDB から X-Engine に変換できます。
変換計画
MySQL 8.0 を実行している RDS インスタンスは、InnoDB を使用しているか X-Engine を使用しているかに関係なく、一貫した API 操作とユーザーエクスペリエンスを提供します。この状況では、PolarDB-X のアップグレード後、RDS インスタンスのストレージエンジンを 1 つずつ InnoDB から X-Engine に変換することをお勧めします。たとえば、PolarDB-X インスタンスに 8 つの RDS インスタンスがアタッチされている場合は、最初に 8 つの RDS インスタンスのいずれかのストレージエンジンを変換します。一定期間 RDS インスタンスを監視します。互換性やパフォーマンスの問題が発生しない場合は、残りの 7 つの RDS インスタンスのストレージエンジンを変換します。
変換前の圧縮効率の検証
RDS インスタンスのストレージエンジンを変換する前に、InnoDB を使用する既存の RDS インスタンスと同じインスタンスタイプで、X-Engine を使用する RDS インスタンスを購入することをお勧めします。その後、Alibaba Cloud Data Transmission Service (DTS) を使用して、既存の RDS インスタンスから購入した RDS インスタンスにデータをインポートできます。このようにして、圧縮効率を確認できます。圧縮効率により、以下の項目を判断できます。
インスタンスのストレージ容量
圧縮効率に基づいて、ストレージエンジンを InnoDB から X-Engine に変換した後に購入する必要があるインスタンスタイプを決定できます。たとえば、圧縮後に必要なストレージ容量が元のストレージ容量の 30% 未満の場合、元々 3 TB のディスク容量を必要とする RDS インスタンスのストレージエンジンを変換した後に、1 TB のディスク容量を持つ RDS インスタンスを購入できます。または、将来のビジネス開発のためにストレージ容量を確保するために、同じインスタンスタイプの RDS インスタンスを購入することもできます。
データベースシャードの数
RDS インスタンスのストレージ容量が削減された後、データベースシャードの数を減らすことができます。たとえば、RDS インスタンスに分散されているデータベースを 1 つの RDS インスタンスにマージできます。これにより、コストが削減されます。
説明
検証が完了したら、X-Engine を使用する RDS インスタンスをリリースするか、後で正式に変換するために RDS インスタンスのデータをクリアすることができます。
変換手順
PolarDB-X を V5.4.2-15744202 以降のバージョンにアップグレードします。
説明
このセクションでは、PolarDB-X 1.0 を例として使用します。
バージョンが v5.4.2-15744202 以降の場合は、この手順をスキップします。
互換性を確保するために、コードを変更する必要があります。これは、ビジネスが DRDS の以前のバージョンで提供されている特定の API 操作に基づいている場合に適用されます。たとえば、パフォーマンス最適化のために SQL パススルー機能が使用されている場合は、コードを変更する必要があります。
DRDS から InnoDB ストレージエンジンを使用する RDS インスタンスを最初の変換対象インスタンスとして選択します。テーブル作成文をエクスポートし、エンジンの種類を X-Engine に変更します。次に、必要なインスタンスタイプと X-Engine ストレージエンジンを使用して RDS インスタンスを作成します。または、圧縮効率を検証するときに作成した RDS インスタンスを使用し、テーブル構造スクリプトをこのインスタンスにインポートします。
説明
DTS を使用して既存の RDS インスタンスから新しい RDS インスタンスにデータを移行する場合、新しい RDS インスタンスはデフォルトで既存の RDS インスタンスのストレージエンジンを継承します。X-Engine を使用する新しい RDS インスタンスにデータを移行する前に、テーブル作成文を個別にエクスポートし、エンジンの種類を X-Engine に変更する必要があります。
DTS を使用して、InnoDB ストレージエンジンを使用する RDS インスタンスから X-Engine ストレージエンジンを使用する RDS インスタンスにデータを同期します。データ同期の詳細については、「MySQL データベース間の双方向同期を設定する」をご参照ください。
説明
DTS の双方向同期機能を使用して、2 つの RDS インスタンス間のデータ整合性を確保できます。
PolarDB-X ルーティングルールを変更し、InnoDB ストレージエンジンを使用する RDS インスタンスへのアクセスリクエストを X-Engine ストレージエンジンを使用する RDS インスタンスにリダイレクトします。
説明
X-Engine ストレージエンジンを使用する最初の RDS インスタンスを 5 日間実行します。インスタンスを監視し、リクエスト処理時間、例外情報、および双方向同期の進捗状況を考慮します。例外が発生した場合は、ワークロードを InnoDB ストレージエンジンを使用する元の RDS インスタンスに切り替えることができることを確認する必要があります。詳細については、「監視情報を表示する」をご参照ください。
X-Engine ストレージエンジンを使用する最初の RDS インスタンスが想定どおりに実行されていることを確認したら、残りの RDS インスタンスの 30% から 50% の変換に進み、3 ~ 5 日間インスタンスを監視します。この場合、前の手順 2 ~ 4 を繰り返します。
説明
InnoDB ストレージエンジンを使用する元の RDS インスタンスは、X-Engine ストレージエンジンを使用する新しい RDS インスタンスとの双方向同期を実装するために必要であるため、リリースしたりオフラインにしたりしないでください。DTS は双方向同期機能を提供します。
残りのすべての RDS インスタンスの変換を実行します。DRDS のすべての RDS インスタンスの変換が完了したら、3 ~ 5 日間インスタンスを監視します。新しい RDS インスタンスが想定どおりに実行されている場合は、すべての DTS 同期リンクと InnoDB ストレージエンジンを使用する元の RDS インスタンスをリリースします。