全部产品
Search
文档中心

PolarDB:Mengonversi database dalam mode DRDS ke database dalam mode AUTO

更新时间:Jul 03, 2025

Topik ini menjelaskan cara mengonversi database dalam mode Distributed Relational Database Service (DRDS) ke mode AUTO.

Informasi latar belakang

PolarDB-X memungkinkan Anda mengeksekusi pernyataan CREATE DATABASE LIKE atau CREATE DATABASE AS untuk mengonversi database dalam mode DRDS ke mode AUTO. Untuk informasi lebih lanjut tentang database dalam mode AUTO dan DRDS, lihat Database dalam Mode AUTO dan DRDS. Pada bagian berikutnya, database dalam mode DRDS yang akan dikonversi disebut sebagai database DRDS sumber, sedangkan database dalam mode AUTO setelah konversi disebut sebagai database AUTO tujuan.

  • Jika Anda mengeksekusi pernyataan CREATE DATABASE LIKE, PolarDB-X hanya mengonversi skema tabel dari database DRDS sumber tanpa menyalin data tabel.

  • Jika Anda mengeksekusi pernyataan CREATE DATABASE AS, PolarDB-X akan mengonversi skema tabel dari database DRDS sumber dan menyalin data tabel tersebut.

Prasyarat

Versi instance PolarDB-X tempat database DRDS sumber berada adalah 5.4.16-16717637 atau lebih baru. Untuk informasi lebih lanjut tentang cara melihat versi instance PolarDB-X, lihat Lihat Versi Instance.

Catatan penggunaan

  • Selama konversi, kunci baca diterapkan pada database DRDS sumber sehingga menjadi hanya-baca. Dalam kondisi ini, tidak ada pernyataan DML atau DDL yang dapat dieksekusi pada database DRDS sumber hingga konversi selesai. Pastikan bahwa konversi tersebut tidak memengaruhi operasional bisnis Anda.

  • Disarankan agar Anda tidak mengeksekusi pernyataan DML atau DDL pada database DRDS sumber atau database AUTO tujuan selama proses konversi. Jika dilakukan, konversi akan gagal.

  • Selama konversi, database DRDS sumber tidak dihapus atau ditimpa. Sebagai gantinya, database AUTO tujuan baru dibuat berdasarkan database DRDS sumber. Setelah konversi selesai, database DRDS sumber tetap dapat diakses.

  • Pastikan kapasitas ruang tersisa mencukupi sebelum melakukan konversi. Jika kapasitas ruang tidak mencukupi, konversi akan gagal.

Sintaksis

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

covert_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...]

Parameters

Parameter

Deskripsi

auto_database_name

Nama database AUTO tujuan yang akan dibuat.

drds_database_name

Nama database DRDS sumber. Masukkan nama database valid dalam mode DRDS.

mode

Mode database yang dibuat. Atur nilainya ke auto.

dry_run

Menentukan apakah akan mengaktifkan mode uji coba kering proses konversi. Dalam mode dry_run, Anda dapat melihat skema tabel dalam database DRDS sumber dan skema tabel dalam mode AUTO. Untuk informasi lebih lanjut tentang cara PolarDB-X mengonversi database, lihat Aturan konversi skema.

Nilai valid:

  • true: mengaktifkan mode dry_run proses konversi.

  • false: menonaktifkan mode dry_run proses konversi. Ini adalah nilai default.

Catatan
  • Parameter dry_run hanya digunakan untuk memungkinkan Anda melihat bagaimana skema tabel dalam mode DRDS dikonversi ke skema tabel dalam mode AUTO. Tidak ada skema tabel yang dibuat dan tidak ada data tabel yang disalin selama uji coba kering.

  • Jika Anda mengatur parameter dry_run ke true, database DRDS sumber tidak terpengaruh. Misalnya, database DRDS sumber tidak menjadi hanya-baca.

lock

Menentukan apakah akan menerapkan kunci baca lock ke database DRDS sumber selama konversi. Setelah kunci baca diterapkan, database DRDS sumber menjadi hanya-baca, dan tidak ada pernyataan DML atau DDL yang dapat dieksekusi pada database DRDS sumber.

Nilai valid:

  • true: menerapkan kunci baca lock ke database DRDS sumber. Ini adalah nilai default.

  • false: menghapus kunci baca lock dari database DRDS sumber.

    Penting

    Jika Anda mengatur parameter ini ke false, data tidak konsisten antara database DRDS sumber dan database AUTO tujuan.

create_tables

Menentukan apakah akan membuat skema tabel dalam database AUTO tujuan selama konversi.

Nilai valid:

  • true: Jika Anda mengatur create_tables ke true, PolarDB-X secara otomatis mengonversi skema tabel dan membuat tabel dalam database AUTO tujuan. Ini adalah nilai default.

  • false: Jika Anda mengatur create_tables ke false, Anda harus membuat database AUTO tujuan terlebih dahulu dan membuat tabel dalam database AUTO tujuan yang sesuai dengan semua tabel dalam database DRDS sumber.

    Catatan
    • Jika tabel yang dikonversi secara otomatis oleh PolarDB-X tidak sesuai dengan skenario Anda, Anda dapat menonaktifkan parameter create_tables dan membuat database AUTO tujuan dan tabel berdasarkan kebutuhan bisnis Anda. Tabel dalam database AUTO tujuan harus memiliki nama tabel dan definisi kolom yang sama dengan tabel dalam database DRDS sumber. Anda dapat menyesuaikan mode partisi dalam database AUTO tujuan.

    • Jika parameter create_tables diatur ke false, ketika Anda mengeksekusi pernyataan CREATE DATABASE AS, PolarDB-X hanya menyalin data dari database DRDS sumber ke database AUTO tujuan, tetapi tidak membuat database AUTO tujuan atau tabel.

include

Skema tabel yang akan dikonversi dalam database DRDS sumber. Jika Anda mengonfigurasi parameter include, hanya skema tabel yang ditentukan oleh parameter include yang dikonversi.

exclude

Skema tabel yang tidak akan dikonversi dalam database DRDS sumber. Jika Anda mengonfigurasi parameter exclude, skema tabel yang ditentukan oleh parameter exclude tidak dikonversi.

Contoh

  • Eksekusi pernyataan berikut untuk mengonversi database bernama db_drds dalam mode DRDS ke database bernama db_auto dalam mode AUTO. Jika Anda mengeksekusi pernyataan ini, hanya skema tabel dalam database db_drds yang dikonversi, tanpa menyalin data tabel.

    CREATE DATABASE db_auto like db_drds mode=auto;

    Keluaran berikut dikembalikan:

    +-------------+
    | RESULT      |
    +-------------+
    | ALL SUCCESS |
    +-------------+
    1 row in set (10 min 32.17 sec)
  • Eksekusi pernyataan berikut untuk mengonversi database bernama db_drds dalam mode DRDS ke database bernama db_auto dalam mode AUTO. Jika Anda mengeksekusi pernyataan ini, skema tabel dalam database db_drds dikonversi dan data tabel disalin.

    CREATE DATABASE db_auto as db_drds mode=auto;

    Keluaran berikut dikembalikan:

    +-------------+
    | RESULT      |
    +-------------+
    | ALL SUCCESS |
    +-------------+
    1 row in set (10 min 37.30 sec)
  • Eksekusi pernyataan berikut untuk memigrasikan tabel tb1 dalam database db_drds dalam mode DRDS ke database AUTO tujuan yang sudah ada. Jika Anda mengeksekusi pernyataan ini, skema tabel tb1 dikonversi dan data tabel disalin.

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

    Keluaran berikut dikembalikan:

    +-------------+
    | RESULT      |
    +-------------+
    | ALL SUCCESS |
    +-------------+
    1 row in set (8 min 12.05 sec)
  • Eksekusi pernyataan berikut untuk melihat skema tabel tb1 dan tb2 dalam database DRDS sumber serta skema tabel dalam mode AUTO. Jika Anda mengeksekusi pernyataan ini, tidak ada konversi yang dilakukan.

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

    Keluaran berikut dikembalikan:

    +-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | 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)
  • Eksekusi pernyataan berikut untuk menyalin data dari database DRDS sumber ke database AUTO tujuan. Jika Anda mengeksekusi pernyataan ini, tidak ada konversi yang dilakukan. Anda harus membuat database AUTO tujuan dan tabel yang sesuai terlebih dahulu. Definisi tabel dalam database AUTO tujuan harus sama dengan yang ada dalam database DRDS sumber.

    CREATE DATABASE db_auto as db_drds create_tables=false;

    Keluaran berikut dikembalikan:

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

Lihat kemajuan dan hasil konversi

PolarDB-X memungkinkan Anda menggunakan tampilan INFORMATION_SCHEMA.CREATE_DATABASE untuk melihat kemajuan dan hasil konversi. Misalnya, Anda dapat mengeksekusi pernyataan SQL berikut untuk melihat kemajuan tugas konversi di mana database AUTO tujuan adalah db_auto:

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

Keluaran berikut dikembalikan:

*************************** 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)

PolarDB-X memungkinkan Anda mengeksekusi pernyataan SHOW FULL DDL guna memeriksa kemajuan konversi.

Untuk tugas konversi yang memakan waktu, hasil konversi dapat dilihat dengan mengeksekusi pernyataan SHOW DDL RESULT jika koneksi ditutup dan hasil yang dikembalikan tidak dapat dilihat. Tugas konversi akan tetap berjalan meskipun koneksi ditutup. Selain itu, Anda dapat menggunakan tampilan INFORMATION_SCHEMA.CREATE_DATABASE untuk melihat hasil yang lebih rinci.

Time taken for the conversion

Sebagian besar waktu dihabiskan selama periode penyalinan data dari database DRDS sumber ke database AUTO tujuan. Misalnya, dalam instance PolarDB-X dengan spesifikasi 8 core, 64 GB memori, empat node komputasi, dan empat node penyimpanan, buat database DRDS dengan merujuk pada Tes Sysbench. Database tersebut memiliki empat tabel, dan setiap tabel memiliki 50 juta baris data. Total volume data sekitar 44 GB. Dalam kasus ini, konversi memakan waktu 10 menit dan 37 detik.

Catatan

Waktu spesifik yang diperlukan untuk mengonversi database bergantung pada berbagai faktor, seperti jenis instans Anda dan ukuran database. Jika Anda ingin mendapatkan waktu tepat untuk mengonversi database, kami sarankan Anda melakukan latihan selama jam-jam sepi atau dalam lingkungan pengujian. Anda dapat mengatur parameter lock ke false selama latihan.

Schema conversion rules

Bagian ini menjelaskan beberapa aturan konversi yang digunakan oleh PolarDB-X untuk secara otomatis mengonversi database dalam mode DRDS ke mode AUTO. Ini membantu Anda mengevaluasi apakah database dan tabel tujuan yang dibuat oleh PolarDB-X setelah konversi memenuhi kebutuhan bisnis Anda.

Tabel tunggal dan tabel siaran

Tabel tunggal dalam mode DRDS dikonversi ke tabel siaran dalam mode AUTO, dan tabel siaran dalam mode DRDS dikonversi ke tabel siaran dalam mode AUTO.

Tabel sharding

  • Tabel berikut menjelaskan pemetaan fungsi.

    Jenis fungsi sharding DRDS

    Fungsi sharding dalam mode DRDS

    Fungsi partisi dalam mode 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,n), right(b,n))

    Tanggal dan waktu

    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))

  • Sharding database dilakukan dan partisi tabel tidak dilakukan.

    # Tabel dalam mode DRDS.
    create table tb1 (
    	id int,
      name varchar(20)
    ) dbpartition by uni_hash(id);
    
    # Tabel yang dipetakan dalam mode AUTO.
    create table tb1 (
      id int,
      name varchar(20)
    ) partition by key(id);
    Catatan

    Tabel Pemetaan Fungsi menampilkan:

    • Fungsi sharding database dikonversi menjadi fungsi partisi.

    • Skema tabel dikonversi menjadi tabel yang hanya memiliki satu tingkat partisi dalam mode AUTO.

  • Partisi tabel dilakukan dan sharding database tidak dilakukan.

    # Tabel dalam mode DRDS.
    create table tb3 (
      id int,
      dt date
    ) tbpartition by week(dt) tbpartitions 4;
    
    # Tabel yang dipetakan dalam mode 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
    );
    Catatan

    Tabel Pemetaan Fungsi menampilkan:

    • Fungsi sharding tabel dikonversi menjadi fungsi partisi yang sesuai.

    • Skema tabel dikonversi menjadi tabel yang hanya memiliki satu tingkat partisi dalam mode AUTO.

  • Sharding database dan partisi tabel dilakukan menggunakan aturan yang sama.

    # Tabel dalam mode 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; 
    
    # Tabel yang dipetakan dalam mode 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;
    
    Catatan

    Tabel Pemetaan Fungsi menunjukkan:

    • Fungsi sharding database dikonversi menjadi fungsi partisi yang sesuai.

    • Jumlah partisi sama dengan hasil kali jumlah shard database dan jumlah shard tabel.

    • Skema tabel dikonversi menjadi tabel yang hanya memiliki satu tingkat partisi dalam mode AUTO.

  • Sharding database dan partisi tabel dilakukan menggunakan aturan yang berbeda.

    # Tabel dalam mode DRDS.
    create table tb5 (
      buyer_id varchar(20),
      order_id varchar(20)
    ) dbpartition by hash(buyer_id) tbpartition by hash(order_id) tbpartitions 4; 
    
    # Tabel yang dipetakan dalam mode 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;
    
    Catatan

    Tabel Pemetaan Fungsi menampilkan:

    • Fungsi sharding database dikonversi menjadi fungsi partisi level-1 yang sesuai. Jumlah partisi level-1 sama dengan jumlah shard database.

    • Fungsi partisi tabel dikonversi menjadi fungsi partisi level-2 yang sesuai. Jumlah partisi level-2 sama dengan jumlah shard tabel.

    • Skema tabel dikonversi menjadi tabel yang memiliki dua tingkat partisi dalam mode AUTO.

Sequence conversion rules

Group sequence, time-based sequence (TIME), dan SIMPLE sequence dalam mode DRDS semuanya dikonversi ke New Sequences dengan performa komprehensif yang lebih baik dalam mode AUTO. Untuk informasi lebih lanjut, lihat Sequence.

Catatan penggunaan

  • Pernyataan CHARSET dan COLLATE untuk database AUTO tujuan sama dengan yang ada pada database DRDS sumber. Oleh karena itu, Anda tidak dapat menentukan secara manual CHARSET atau COLLATE dalam pernyataan CREATE DATABASE LIKE or CREATE DATABASE AS.

  • Atribut LOCALITY dari database DRDS sumber dan tabelnya tidak dikonfigurasi dalam database AUTO tujuan. Untuk informasi lebih lanjut tentang atribut locality dari database DRDS, lihat Gunakan Atribut LOCALITY untuk Menentukan Node Data (Mode DRDS).