前提条件

高可用性ではMySQLグループ・レプリケーションが使用され、各表に主キーが定義されていることが必要です。高可用性DBシステムに主キーのない表を作成しようとすると、失敗します。

データをHeatWaveに移行し、表に主キーを定義していない場合は、それらを追加する必要があります。表に主キーがあるか確認し、それがない表にはキーを追加します:

  1. コマンドライン・クライアントを使用した主キーの表の確認
  2. 次のいずれかの方法を使用して主キーを追加します:
    • 非表示列の使用: コマンドライン・クライアントを使用した主キーの手動追加を参照してください。
      ノート

      非表示列を使用した主キーの追加は、高可用性DBシステムに対応できるように既存データを更新するための影響の少ない方法です。これはアプリケーションに対して透過的であり、新しい列はSELECT問合せから隠された状態であるため、アプリケーションは以前と同様に動作し続けることができます。
    • MySQLシェルのダンプ・ユーティリティの使用: MySQLシェルのダンプ・ユーティリティcreate_invisible_pksを参照してください。
    • MySQLシェルのロード・ユーティリティの使用: MySQLシェルのロード・ユーティリティcreateInvisiblePKsを参照してください。
      ノート

      MySQLシェル・ダンプおよびロード・ユーティリティを使用するには、MySQLシェル・バージョン8.0.30以上を使用します。
    • sql_generate_invisible_primary_key変数の使用: 作成した新しい表に主キーを追加するには、変数をONに設定します。変数をONに設定すると、既存の表に主キーは追加されません。「非表示主キーの生成」を参照してください。

コマンドライン・クライアントを使用した主キーの表の確認

MySQLクライアントやMySQLシェルなどのコマンドライン・クライアントを使用して、表に主キーがあるか確認し、主キーがある表をリストします。主キーは、高可用性で使用されるグループ・レプリケーションの前提条件です。

  1. データベースに対して次の文を実行すると、主キーがない表のリストが生成されます。
    SELECT t.table_schema, t.table_name
    FROM information_schema.tables t
      LEFT JOIN (SELECT table_schema, table_name 
                 FROM information_schema.statistics
                 WHERE index_name = 'PRIMARY' 
                 GROUP BY table_schema, table_name, index_name
                 ) pks 
      ON t.table_schema = pks.table_schema AND t.table_name = pks.table_name 
    WHERE pks.table_name IS NULL
      AND t.table_type = 'BASE TABLE' 
      AND t.table_schema NOT IN ('mysql', 'sys', 'performance_schema', 'information_schema');

コマンドライン・クライアントを使用した主キーの手動追加

MySQLクライアントやMySQLシェルなどのコマンドライン・クライアントを使用して、主キーを非表示列に追加します。

このタスクでは次が必要です:
  • MySQLバージョン8.0.23以上。非表示列は8.0.23バージョンで導入されました。
非表示列に主キーを追加するには、次を実行します:
  1. 非表示列および主キーを追加する表に対して、次のようなコマンドを実行します:
    ALTER TABLE <Table1> ADD <my_row_id> BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY INVISIBLE FIRST;

    このコマンドは、1つの列testを含む表<Table1>に列<my_row_id>を追加して変更します。この列は非表示で、表の主キーを含みます。

関連トピック