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:
Catatan
|
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:
|
create_tables | Menentukan apakah akan membuat skema tabel dalam database AUTO tujuan selama konversi. Nilai valid:
|
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';\GKeluaran 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.
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);CatatanTabel 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 );CatatanTabel 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;CatatanTabel 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;CatatanTabel 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
CHARSETdanCOLLATEuntuk database AUTO tujuan sama dengan yang ada pada database DRDS sumber. Oleh karena itu, Anda tidak dapat menentukan secara manualCHARSETatauCOLLATEdalam pernyataanCREATE DATABASE LIKE or CREATE DATABASE AS.Atribut
LOCALITYdari database DRDS sumber dan tabelnya tidak dikonfigurasi dalam database AUTO tujuan. Untuk informasi lebih lanjut tentang atributlocalitydari database DRDS, lihat Gunakan Atribut LOCALITY untuk Menentukan Node Data (Mode DRDS).