すべてのプロダクト
Search
ドキュメントセンター

PolarDB:DRDS モードデータベースから AUTO モードデータベースへの変換

最終更新日:Aug 21, 2026

このトピックでは、DRDS モードデータベースから AUTO モードデータベースへの変換方法について説明します。

背景情報

PolarDB-X では、CREATE DATABASE LIKE または CREATE DATABASE AS ステートメントを使用して、DRDS モードデータベースから AUTO モードデータベースへの変換が可能です。AUTO モードデータベースと DRDS モードデータベースの詳細については、「AUTO モードデータベースと DRDS モードデータベース」をご参照ください。本トピックでは、明確化のため、元の DRDS モードデータベースを「ソース DRDS データベース」、新しい AUTO モードデータベースを「ターゲット AUTO データベース」と呼びます。

  • create database like ステートメントは、ソース DRDS データベースのテーブルスキーマのみを変換し、データはコピーしません。

  • create database as ステートメントは、テーブルスキーマを変換し、対応するテーブルからデータをコピーします。

前提条件

インスタンスのバージョンが 5.4.16-16717637 以降である必要があります。インスタンスのバージョンの確認方法については、「インスタンスバージョンの確認」をご参照ください。

注意事項

  • 変換プロセス中は、ソース DRDS データベースに読み取りロックがかかって読み取り専用になり、変換が完了するまですべての DML および DDL ステートメントがブロックされます。そのため、業務への影響を慎重に評価してください。

  • 変換の失敗を防ぐため、変換中はソース DRDS データベースまたはターゲット AUTO データベースでは、DML または DDL ステートメントを実行しないでください。

  • 変換プロセスは、ソース DRDS データベースを削除または上書きしません。代わりに、ソース DRDS データベースから新しいターゲット AUTO データベースを作成します。変換後もソース DRDS データベースにアクセスできます。

  • ストレージ容量不足による失敗を防ぐため、開始前に十分な容量があることを確認してください。

構文

CREATE DATABASE [IF NOT EXISTS] auto_database_name
as
drds_database_name
[convert_option_list]

convert_option_list:
      convert_option [convert_option...] [{include_list|exclude_list}]

convert_option:
      mode=auto
    |    dry_run={true|false}
    |    lock={true|false}
    |    create_tables={true|false}

include_list:
      include=table_name [,table_name...]

exclude_list:
      exclude=table_name [,table_name...]

パラメータ

パラメータ

説明

auto_database_name

新しいターゲット AUTO データベースの名前。

drds_database_name

ソース DRDS データベースの名前。このデータベースは既に存在し、DRDS モードデータベースである必要があります。

mode

新しいデータベースのモード。このパラメータは auto に設定する必要があります。

dry_run

dry_run パラメータは、PolarDB-X がソース DRDS データベースから AUTO モードデータベースへのテーブルスキーマ変換をどのように実行するかをプレビューします。PolarDB-X がどのように変換を実行するかについての詳細は、「テーブルスキーマ変換ルール」をご参照ください。

有効な値:

  • true:dry_run パラメータを有効にします。

  • false:dry_run パラメータを無効にします。これがデフォルト値です。

説明
  • dry_run パラメータは、DRDS モードから AUTO モードへのテーブルスキーマ変換のプレビューのみを行います。テーブルスキーマの作成やデータのコピーは行いません。

  • dry_run パラメータを有効にしても、ソース DRDS データベースには影響しません。たとえば、読み取り専用にはなりません。

lock

lock パラメータは、変換中にソース DRDS データベースに読み取りロックをかけるかどうかを制御します。読み取りロックは、ソース DRDS データベースを読み取り専用にし、すべての DML および DDL 操作をブロックします。

有効な値:

  • true:ソース DRDS データベースに読み取りロックをかけます。これがデフォルト値です。

  • false:ロックを無効にします。

    重要

    このパラメータを無効にすると、ソース DRDS データベースとターゲット AUTO データベース間でデータの不整合が発生する可能性があります。

create_tables

create_tables パラメータは、変換中にターゲット AUTO データベースに、対応するテーブルスキーマを作成するかどうかを制御します。

有効な値:

  • true:create_tables が有効な場合、PolarDB-X は自動的にテーブルスキーマを変換し、ターゲット AUTO データベースにデータテーブルを作成します。これがデフォルト値です。

  • false:create_tables が無効な場合、事前にターゲット AUTO データベースを作成し、ソース DRDS データベース内の全テーブルに対応するテーブルを作成する必要があります。

    説明
    • PolarDB-X によって自動変換されたテーブルがアプリケーションシナリオに適さない場合は、create_tables パラメータを無効にして、ターゲット AUTO データベースとテーブルを手動で作成できます。ターゲット AUTO データベース内のテーブルは、ソース DRDS データベース内のテーブルと完全に同じテーブル名と列定義を持つ必要があります。パーティションモードはカスタマイズできます。

    • create_tables オプションが無効な場合、create database as ステートメントは、ソース DRDS データベースからターゲット AUTO データベースへのデータのコピーのみを行います。ターゲット AUTO データベースやそのテーブルは作成しません。

include

include パラメータは、ソース DRDS データベースから変換するテーブルを指定します。include を指定すると、include パラメータで指定したテーブルのみが変換されます。

exclude

exclude パラメータは、変換から除外するテーブルを指定します。exclude を指定すると、exclude パラメータで指定したテーブルは変換されません。

例

  • db_drds DRDS モードデータベースを db_auto AUTO モードデータベースに変換します。この操作では、テーブルスキーマのみを変換し、データはコピーしません。

    CREATE DATABASE db_auto like db_drds mode=auto;

    次の出力が返されます:

    +-------------+
    | RESULT      |
    +-------------+
    | ALL SUCCESS |
    +-------------+
    1 row in set (10 min 32.17 sec)
  • db_drds DRDS モードデータベースを db_auto AUTO モードデータベースに変換します。この操作では、テーブルスキーマを変換し、データをコピーします。

    CREATE DATABASE db_auto as db_drds mode=auto;

    次の出力が返されます:

    +-------------+
    | RESULT      |
    +-------------+
    | ALL SUCCESS |
    +-------------+
    1 row in set (10 min 37.30 sec)
  • tb1 テーブルのみを db_drds DRDS モードデータベースから db_auto_exist AUTO モードデータベースに変換してコピーします。

    CREATE DATABASE IF NOT EXISTS db_auto_exist as db_drds include=tb1;

    次の出力が返されます:

    +-------------+
    | RESULT      |
    +-------------+
    | ALL SUCCESS |
    +-------------+
    1 row in set (8 min 12.05 sec)
  • db_drds ソース DRDS データベース内の tb1 および tb2 テーブルのテーブルスキーマと、変換後の AUTO モードスキーマをプレビューします。実際の変換は実行しません。

    CREATE DATABASE db_auto like db_drds dry_run=true include=tb1,tb2;

    次の出力が返されます:

    +-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | TABLE | CREATE_TABLE_DRDS                                                                                                                                                                                                                                   | CREATE_TABLE_AUTO                                                                                                                                                                                                                                              |
    +-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | tb1   | CREATE TABLE `tb1` (
            `id` int(11) NOT NULL,
            `k` int(11) NOT NULL DEFAULT '0',
            `c` char(120) NOT NULL DEFAULT '',
            `pad` char(60) NOT NULL DEFAULT '',
            PRIMARY KEY (`id`)
    ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4  dbpartition by hash(`id`) | CREATE TABLE `tb1` (
            `id` int(11) NOT NULL,
            `k` int(11) NOT NULL DEFAULT '0',
            `c` char(120) NOT NULL DEFAULT '',
            `pad` char(60) NOT NULL DEFAULT '',
            PRIMARY KEY (`id`)
    ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4
    PARTITION BY KEY (`id`) PARTITIONS 32 |
    | tb2   | CREATE TABLE `tb2` (
            `id` int(11) NOT NULL,
            `k` int(11) NOT NULL DEFAULT '0',
            `c` char(120) NOT NULL DEFAULT '',
            `pad` char(60) NOT NULL DEFAULT '',
            PRIMARY KEY (`id`)
    ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4  dbpartition by hash(`id`) | CREATE TABLE `tb2` (
            `id` int(11) NOT NULL,
            `k` int(11) NOT NULL DEFAULT '0',
            `c` char(120) NOT NULL DEFAULT '',
            `pad` char(60) NOT NULL DEFAULT '',
            PRIMARY KEY (`id`)
    ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4
    PARTITION BY KEY (`id`) PARTITIONS 32 |
    +-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    2 rows in set (0.04 sec)
  • テーブルスキーマを変換せずに、ソース DRDS データベースからターゲット AUTO データベースへデータのみをコピーします。事前にターゲット AUTO データベースとそのテーブルを作成する必要があります。ターゲットデータベースのテーブルスキーマは、ソースデータベースのものと同一である必要があります。

    CREATE DATABASE db_auto as db_drds create_tables=false;

    次の出力が返されます:

    +-------------+
    | RESULT      |
    +-------------+
    | ALL SUCCESS |
    +-------------+
    1 row in set (5 min 47.75 sec)

変換の進行状況と結果の確認

PolarDB-X には INFORMATION_SCHEMA.CREATE_DATABASE ビューが用意されており、変換タスクの進行状況と結果を確認できます。たとえば、次の SQL ステートメントを実行して、ターゲット AUTO データベースが db_auto であるタスクの進行状況を確認できます。

SELECT * FROM INFORMATION_SCHEMA.CREATE_DATABASE where TARGET_SCHEMA = 'db_auto';\G

次の出力が返されます:

*************************** 1. row ***************************
             DDL_JOB_ID: 1547426040408715264
          SOURCE_SCHEMA: db_drds
          TARGET_SCHEMA: db_auto
              TABLE/SEQ: tb1
                  STAGE: BACKFILL
                 STATUS: RUNNING
                 DETAIL: NULL
                SQL_SRC: CREATE TABLE `tb1` (
        `id` int(11) NOT NULL,
        `k` int(11) NOT NULL DEFAULT '0',
        `c` char(120) NOT NULL DEFAULT '',
        `pad` char(60) NOT NULL DEFAULT '',
        PRIMARY KEY (`id`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4  dbpartition by hash(`id`)
                SQL_DST: CREATE TABLE IF NOT EXISTS `tb1` (
        `id` int(11) NOT NULL,
        `k` int(11) NOT NULL DEFAULT '0',
        `c` char(120) NOT NULL DEFAULT '',
        `pad` char(60) NOT NULL DEFAULT '',
        PRIMARY KEY (`id`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4
PARTITION BY KEY (`id`) PARTITIONS 32
    BACKFILL_START_TIME: 2023-01-01 19:13:01
CURRENT_SPEED(ROWS/SEC): 37632
AVERAGE_SPEED(ROWS/SEC): 216064
          FINISHED_ROWS: 216064
 APPROXIMATE_TOTAL_ROWS: 1
      BACKFILL_PROGRESS: 100%
*************************** 2. row ***************************
             DDL_JOB_ID: 1547426040408715264
          SOURCE_SCHEMA: db_drds
          TARGET_SCHEMA: db_auto
              TABLE/SEQ: tb2
                  STAGE: BACKFILL
                 STATUS: RUNNING
                 DETAIL: NULL
                SQL_SRC: CREATE TABLE `tb2` (
        `id` int(11) NOT NULL,
        `k` int(11) NOT NULL DEFAULT '0',
        `c` char(120) NOT NULL DEFAULT '',
        `pad` char(60) NOT NULL DEFAULT '',
        PRIMARY KEY (`id`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4  dbpartition by hash(`id`)
                SQL_DST: CREATE TABLE IF NOT EXISTS `tb2` (
        `id` int(11) NOT NULL,
        `k` int(11) NOT NULL DEFAULT '0',
        `c` char(120) NOT NULL DEFAULT '',
        `pad` char(60) NOT NULL DEFAULT '',
        PRIMARY KEY (`id`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4
PARTITION BY KEY (`id`) PARTITIONS 32
    BACKFILL_START_TIME: 2023-01-01 19:13:01
CURRENT_SPEED(ROWS/SEC): 36608
AVERAGE_SPEED(ROWS/SEC): 211968
          FINISHED_ROWS: 211968
 APPROXIMATE_TOTAL_ROWS: 1
      BACKFILL_PROGRESS: 100%
2 rows in set (0.01 sec)

また、show full ddl コマンドを使用して進行状況を確認することもできます。

時間のかかる変換タスクでは、接続が失われた場合に結果を確認できないことがあります (接続が失われても変換タスクは正常に実行され続けます)。その場合は、show ddl result を使用して変換結果を確認できます。また、INFORMATION_SCHEMA.CREATE_DATABASE でより詳細な結果を確認することもできます。

[変換時間]

変換時間は、主にソース DRDS データベースとターゲット AUTO データベース間のデータコピープロセスに依存します。PolarDB-X 専用インスタンス (8 コア CPU、64 GB メモリ、4 コンピュートノード、4 ストレージノード) のテスト環境では、Sysbench テストに基づいて DRDS データベースが作成されました。データベースには 4 つのテーブルが含まれ、各テーブルには 5,000 万行、合計約 44 GB のデータがありました。変換には 10 分 37 秒かかりました。

説明

実際の変換時間は、インスタンスの仕様やデータベースのサイズなどの要因によって異なります。より正確な見積もりを得るには、オフピーク時またはテスト環境でリハーサルを実行することを推奨します。リハーサルでは、lock パラメータを false に設定できます。

[テーブルスキーマ変換ルール]

PolarDB-X が DRDS モードデータベースから AUTO モードデータベースへ自動変換する際のルールを理解することで、PolarDB-X によって変換されたデータベースとテーブルが業務要件を満たすかどうかを評価し、必要に応じて調整できます。

単一テーブルとブロードキャストテーブル

DRDS モードの単一テーブルとブロードキャストテーブルは、それぞれ AUTO モードの単一テーブルとブロードキャストテーブルに変換されます。

データベースシャーディングとテーブルシャーディングを使用するテーブル

  • 関数マッピングテーブル

    DRDS 関数タイプ

    DRDS シャーディング関数

    AUTO パーティショニング関数

    Hash

    hash(a)

    key(a)

    str_hash(a, startIdx, endIdx)

    key(a)

    uni_hash(a)

    key(a)

    right_shift(a)

    key(a)

    range_hash(a, b, 10)

    co_hash(right(a,10), right(b,10))

    Date

    YYYYMM(a)

    hash(to_months(a))

    YYYYWEEK(a)

    hash(to_weeks(a))

    YYYYDD(a)

    hash(to_days(a))

    MM(a)

    range(month(a))

    DD(a)

    range(dayofmonth(a))

    WEEK(a)

    range(dayofweek(a))

    MMDD(a)

    range(dayofyear(a))

  • テーブルシャーディングなしのデータベースシャーディング

    # DRDS モードのテーブル
    create table tb1 (
    	id int,
      name varchar(20)
    ) dbpartition by uni_hash(id);
    
    # AUTO モードでマッピングされたテーブル
    create table tb1 (
      id int,
      name varchar(20)
    ) partition by key(id);
    説明

    関数マッピングテーブルに示すように、

    • データベースシャーディング関数はパーティショニング関数に変換されます。

    • テーブルスキーマは、AUTO モードのレベル 1 パーティションテーブルに変換されます。

  • データベースシャーディングなしのテーブルシャーディング

    # DRDS モードのテーブル
    create table tb3 (
      id int,
      dt date
    ) tbpartition by week(dt) tbpartitions 4;
    
    # AUTO モードでマッピングされたテーブル
    create table tb3 (
      id int,
      dt date
    ) partition by range (dayofweek(`dt`)) (
    	partition p2 values less than (2),
    	partition p3 values less than (3),
    	partition p4 values less than (4),
    	partition p5 values less than (5),
    	partition p6 values less than (6),
    	partition pd values less than maxvalue
    );
    説明

    関数マッピングテーブルに示すように、

    • テーブルシャーディング関数は、対応するパーティショニング関数に変換されます。

    • テーブルスキーマは、AUTO モードのレベル 1 パーティションテーブルに変換されます。

  • 同一ルールによるデータベースシャーディングとテーブルシャーディング

    # DRDS モードのテーブル
    create table tb2 (
      buyer_id varchar(20),
      order_id varchar(20)
    ) dbpartition by range_hash(buyer_id,order_id, 10) tbpartition by range_hash(buyer_id,order_id, 10) tbpartitions 4; 
    
    # AUTO モードでマッピングされたテーブル
    create table tb2 (
      buyer_id varchar(20),
      order_id varchar(20)
    ) partition by co_hash(right(buyer_id,10), right(order_id,10)) partitions 64;
    
    説明

    関数マッピングテーブルに示すように、

    • データベースシャーディング関数は、対応するパーティショニング関数に変換されます。

    • パーティション数は、データベースシャード数とテーブルシャード数の積に等しくなります。

    • テーブルスキーマは、AUTO モードのレベル 1 パーティションテーブルに変換されます。

  • 異なるルールによるデータベースシャーディングとテーブルシャーディング

    # DRDS モードのテーブル
    create table tb5 (
      buyer_id varchar(20),
      order_id varchar(20)
    ) dbpartition by hash(buyer_id) tbpartition by hash(order_id) tbpartitions 4; 
    
    # AUTO モードでマッピングされたテーブル
    create table tb5 (
      buyer_id varchar(20),
      order_id varchar(20)
    ) partition by key(buyer_id) partitions 16 subpartition by key(order_id) subpartitions 4;
    
    説明

    関数マッピングテーブルに示すように、

    • データベースシャーディング関数は、対応するレベル 1 パーティショニング関数に変換され、レベル 1 パーティション数はデータベースシャード数と等しくなります。

    • テーブルシャーディング関数は、対応するレベル 2 パーティショニング関数に変換され、レベル 2 パーティション数はテーブルシャード数と等しくなります。

    • テーブルスキーマは、AUTO モードのレベル 2 パーティションテーブルに変換されます。

[シーケンス変換ルール]

DRDS モードでは、group sequence、time-based sequence、simple sequence は、すべて AUTO モードの New Sequence タイプに変換されます。これにより、全体的なパフォーマンスが向上します。詳細については、「シーケンス」をご参照ください。

注意事項

  • ターゲット AUTO データベースは、ソース DRDS データベースと同じ CHARSET および COLLATE 属性を持つ必要があります。そのため、create database LIKE/AS ステートメントで CHARSET または COLLATE を手動で指定することはできません。

  • ターゲット AUTO データベースとそのテーブルは、ソース DRDS データベースとそのテーブルから locality 属性を継承しません。locality の詳細については、「LOCALITY を使用したストレージロケーションの指定」をご参照ください。