All Products
Search
Document Center

PolarDB:Mengonversi database mode DRDS menjadi database mode AUTO

Last Updated:Mar 29, 2026

PolarDB-X memungkinkan Anda mengonversi database yang sudah ada dalam mode Distributed Relational Database Service (DRDS) menjadi database dalam mode AUTO menggunakan satu pernyataan SQL—yaitu CREATE DATABASE LIKE (hanya skema) atau CREATE DATABASE AS (skema dan data). Database DRDS sumber tetap dipertahankan selama proses; database AUTO tujuan baru dibuat di sampingnya sehingga Anda dapat memverifikasi hasil dan melakukan rollback jika diperlukan sebelum menghentikan penggunaan sumber.

Pilih pernyataan

CREATE DATABASE LIKECREATE DATABASE AS
Mengonversi skema tabelYaYa
Menyalin data tabelTidakYa
Durasi khas~10 menit (hanya skema)~10 menit 37 detik (44 GB, 4 tabel x 50 juta baris)
Gunakan saatMemvalidasi hasil konversi skema sebelum melakukan migrasi penuhMelakukan migrasi lengkap skema dan data

Prasyarat

Sebelum memulai, pastikan Anda telah memiliki:

  • Instans PolarDB-X yang menjalankan versi 5.4.16-16717637 atau lebih baru. Untuk memeriksa versi Anda, lihat Lihat versi instans.

  • Kapasitas penyimpanan tersisa yang mencukupi. Jika penyimpanan tidak mencukupi, konversi akan gagal.

Catatan penggunaan

  • Selama konversi, PolarDB-X menerapkan read lock pada database DRDS sumber. Database menjadi read-only—tidak ada pernyataan DML atau DDL yang dapat dijalankan terhadapnya hingga konversi selesai. Jadwalkan konversi selama jam sepi atau di lingkungan pengujian untuk menghindari gangguan bisnis.

  • Jangan menjalankan pernyataan DML atau DDL pada database DRDS sumber maupun database AUTO tujuan selama konversi. Melakukannya menyebabkan konversi gagal.

  • Database DRDS sumber tetap dipertahankan setelah konversi. Database AUTO tujuan baru dibuat di sampingnya, sehingga Anda dapat memverifikasi hasil dan melakukan rollback jika diperlukan sebelum menghentikan penggunaan sumber.

Sintaks

CREATE DATABASE [IF NOT EXISTS] auto_database_name
{ LIKE | 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...]

Parameter

ParameterDeskripsiBawaan
auto_database_nameNama database AUTO tujuan yang akan dibuat.
drds_database_nameNama database DRDS sumber.
modeMode database untuk database tujuan. Atur ke auto.
dry_runAtur ke true untuk melihat pratinjau hasil konversi skema tanpa membuat tabel atau menyalin data. Database sumber tidak dikunci dalam mode dry-run. Atur ke false untuk menjalankan konversi sesungguhnya.false
lockAtur ke true untuk menerapkan read lock pada database DRDS sumber selama konversi, menjaga konsistensi data antara sumber dan tujuan. Atur ke false untuk melewati penguncian — gunakan ini hanya dalam dry run atau lingkungan pengujian, bukan dalam migrasi produksi, karena melewatkan penguncian menyebabkan inkonsistensi data antara sumber dan tujuan.true
create_tablesAtur ke true agar PolarDB-X secara otomatis mengonversi dan membuat skema tabel di database AUTO tujuan. Atur ke false jika Anda ingin full kontrol atas skema partisi: buat terlebih dahulu database AUTO tujuan beserta semua tabelnya sendiri (sesuai nama tabel dan definisi kolom dari sumber), lalu PolarDB-X hanya akan menyalin datanya.true
includeHanya mengonversi tabel yang ditentukan.
excludeMelewati tabel yang ditentukan selama konversi.

Mengonversi database

Contoh berikut mencakup skenario paling umum. Semua contoh menggunakan db_drds sebagai database DRDS sumber dan db_auto sebagai database AUTO tujuan.

Hanya mengonversi skema (tanpa data)

Gunakan CREATE DATABASE LIKE ketika Anda ingin memvalidasi tampilan skema tabel dalam mode AUTO sebelum menjalankan migrasi penuh.

CREATE DATABASE db_auto LIKE db_drds mode=auto;

Output yang diharapkan:

+-------------+
| RESULT      |
+-------------+
| ALL SUCCESS |
+-------------+
1 row in set (10 min 32.17 sec)

Mengonversi skema dan menyalin data

Gunakan CREATE DATABASE AS untuk menjalankan migrasi penuh.

CREATE DATABASE db_auto AS db_drds mode=auto;

Output yang diharapkan:

+-------------+
| RESULT      |
+-------------+
| ALL SUCCESS |
+-------------+
1 row in set (10 min 37.30 sec)

Memigrasikan tabel tertentu ke database tujuan yang sudah ada

Jika database tujuan db_auto_exist sudah ada, gunakan IF NOT EXISTS untuk menambahkan tabel tb1 tanpa membuat ulang database.

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

Output yang diharapkan:

+-------------+
| RESULT      |
+-------------+
| ALL SUCCESS |
+-------------+
1 row in set (8 min 12.05 sec)

Pratinjau konversi skema tanpa membuat perubahan

Atur dry_run=true untuk melihat pratinjau pemetaan skema DRDS ke skema AUTO. Tidak ada tabel yang dibuat dan tidak ada data yang disalin. Database sumber tidak dikunci.

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

Output yang diharapkan:

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

Menyalin data ke database tujuan yang telah dibuat sebelumnya

Atur create_tables=false ketika Anda ingin full kontrol atas skema partisi di tujuan. Buat terlebih dahulu db_auto dan semua tabelnya (nama tabel dan definisi kolom sama dengan sumber), lalu jalankan:

CREATE DATABASE db_auto AS db_drds create_tables=false;

PolarDB-X menyalin data tetapi tidak membuat database atau tabel.

Output yang diharapkan:

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

Memantau progres konversi (untuk database besar)

Untuk database besar yang membutuhkan waktu signifikan untuk dikonversi, gunakan tampilan INFORMATION_SCHEMA.CREATE_DATABASE untuk melacak progres selama tugas berjalan.

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

Contoh output:

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

Untuk mendapatkan ringkasan cepat status pekerjaan DDL, jalankan:

SHOW FULL DDL;

Jika koneksi terputus sebelum tugas selesai, konversi tetap berjalan. Jalankan SHOW DDL RESULT setelah terhubung kembali untuk melihat hasil akhirnya.

Referensi performa: Pada instans dengan 8 core, memori 64 GB, 4 node komputasi, dan 4 node penyimpanan, mengonversi database dengan 4 tabel masing-masing berisi 50 juta baris (~44 GB total) membutuhkan waktu sekitar 10 menit 37 detik. Durasi aktual bergantung pada tipe instans dan ukuran database. Untuk mendapatkan perkiraan realistis, jalankan konversi uji selama jam sepi dengan lock=false.

Aturan konversi skema (referensi)

Tinjau aturan ini untuk memverifikasi bahwa skema yang dikonversi secara otomatis memenuhi kebutuhan Anda sebelum menjalankan migrasi penuh.

Tabel tunggal dan tabel broadcast

Baik tabel tunggal maupun tabel broadcast dalam mode DRDS dikonversi menjadi broadcast tables dalam mode AUTO.

Tabel sharded

Pemetaan fungsi sharding

Tipe fungsi sharding DRDSFungsi sharding dalam mode DRDSFungsi partisi dalam mode AUTO
Hashhash(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 waktuYYYYMM(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))

Contoh skenario sharding

Contoh berikut menunjukkan cara PolarDB-X mengonversi setiap skenario sharding.

*Hanya sharding database (tanpa partisi tabel)*

Fungsi sharding database dipetakan ke fungsi partisi. Hasilnya memiliki satu level partisi.

-- DRDS mode
CREATE TABLE tb1 (
  id INT,
  name VARCHAR(20)
) dbpartition BY uni_hash(id);

-- AUTO mode (converted)
CREATE TABLE tb1 (
  id INT,
  name VARCHAR(20)
) PARTITION BY KEY(id);

*Hanya partisi tabel (tanpa sharding database)*

Fungsi sharding tabel dipetakan ke fungsi partisi. Hasilnya memiliki satu level partisi.

-- DRDS mode
CREATE TABLE tb3 (
  id INT,
  dt DATE
) tbpartition BY week(dt) tbpartitions 4;

-- AUTO mode (converted)
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
);

*Sharding database dan partisi tabel menggunakan aturan yang sama*

Kedua fungsi sharding dipetakan ke satu fungsi partisi. Jumlah partisi sama dengan hasil kali shard database x shard tabel. Hasilnya memiliki satu level partisi.

-- DRDS mode
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 mode (converted)
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;

*Sharding database dan partisi tabel menggunakan aturan berbeda*

Fungsi sharding database menjadi fungsi partisi level-1 (jumlah partisi level-1 = shard database). Fungsi sharding tabel menjadi fungsi partisi level-2 (jumlah partisi level-2 = shard tabel). Hasilnya memiliki dua level partisi.

-- DRDS mode
CREATE TABLE tb5 (
  buyer_id VARCHAR(20),
  order_id VARCHAR(20)
) dbpartition BY hash(buyer_id)
  tbpartition BY hash(order_id) tbpartitions 4;

-- AUTO mode (converted)
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;

Aturan konversi sequence

Sequence grup, sequence berbasis waktu (TIME), dan sequence SIMPLE dalam mode DRDS semuanya dikonversi menjadi New Sequences dalam mode AUTO, yang menawarkan performa keseluruhan lebih baik. Untuk detailnya, lihat Sequence.

Batasan konversi

  • CHARSET dan COLLATE dari database AUTO tujuan sesuai dengan database DRDS sumber. Menentukan CHARSET atau COLLATE dalam CREATE DATABASE LIKE atau CREATE DATABASE AS tidak didukung.

  • Atribut LOCALITY dari database DRDS sumber dan tabel-tabelnya tidak dibawa ke database AUTO tujuan. Untuk detailnya, lihat Use the LOCALITY attribute to specify data nodes (DRDS mode).

Langkah berikutnya