Cette rubrique explique comment convertir une base de données en mode DRDS vers une base de données en mode AUTO.
Contexte
PolarDB-X vous permet de convertir une base de données en mode DRDS vers une base de données en mode AUTO à l'aide des instructions CREATE DATABASE LIKE ou CREATE DATABASE AS. Pour plus d'informations sur les bases de données en mode AUTO et en mode DRDS, consultez la section Bases de données en mode AUTO et bases de données en mode DRDS. Par souci de clarté, cette rubrique désigne la base de données en mode DRDS d'origine comme la « base de données source DRDS » et la nouvelle base de données en mode AUTO comme la « base de données cible AUTO ».
L'instruction
create database likeconvertit uniquement le schéma des tables de la base de données source DRDS et ne copie pas les données.L'instruction
create database asconvertit le schéma des tables et copie les données des tables correspondantes.
Prérequis
La version de l'instance doit être 5.4.16-16717637 ou ultérieure. Pour savoir comment vérifier la version de l'instance, consultez la section Afficher la version de l'instance.
Précautions
Le processus de conversion applique un verrou de lecture sur la base de données source DRDS, ce qui la rend accessible en lecture seule et bloque toutes les instructions DML et DDL jusqu'à la fin de la conversion. Évaluez donc attentivement l'impact potentiel sur votre activité.
Pour éviter les échecs de conversion, n'exécutez aucune instruction DML ou DDL sur la base de données source DRDS ou sur la base de données cible AUTO pendant la conversion.
Le processus de conversion ne supprime ni n'écrase la base de données source DRDS. Il crée plutôt une nouvelle base de données cible AUTO à partir de la base de données source DRDS. Vous pouvez toujours accéder à la base de données source DRDS après la conversion.
Pour prévenir les échecs dus à un espace de stockage insuffisant, assurez-vous qu'il reste suffisamment d'espace disponible avant de commencer.
Syntaxe
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...]
Paramètres
|
Paramètre |
Description |
|
auto_database_name |
Nom de la nouvelle base de données cible AUTO. |
|
drds_database_name |
Nom de la base de données source DRDS. Cette base de données doit déjà exister et être en mode DRDS. |
|
mode |
Mode de la nouvelle base de données. Ce paramètre doit être défini sur |
|
dry_run |
Le paramètre dry_run permet de prévisualiser la manière dont PolarDB-X convertit le schéma des tables d'une base de données source DRDS vers une base de données en mode AUTO. Vous pouvez également consulter la section Règles de conversion du schéma des tables pour comprendre comment PolarDB-X effectue la conversion. Valeurs valides :
Remarque
|
|
lock |
Le paramètre lock contrôle l'application d'un verrou de lecture sur la base de données source DRDS pendant la conversion. Un verrou de lecture rend la base de données source DRDS accessible en lecture seule et bloque toutes les opérations DML et DDL. Valeurs valides :
|
|
create_tables |
Le paramètre create_tables contrôle la création des schémas de tables correspondants dans la base de données cible AUTO pendant la conversion. Valeurs valides :
|
|
include |
Le paramètre include spécifie les tables à convertir depuis la base de données source DRDS. Si vous spécifiez le paramètre include, seules les tables indiquées dans ce paramètre seront converties. |
|
exclude |
Le paramètre exclude spécifie les tables à exclure de la conversion. Si vous spécifiez le paramètre exclude, les tables indiquées dans ce paramètre ne seront pas converties. |
Exemples
-
Convertissez la base de données en mode DRDS
db_drdsen une base de données en mode AUTOdb_auto. Cette opération convertit uniquement le schéma des tables et ne copie pas les données.CREATE DATABASE db_auto like db_drds mode=auto;Le résultat suivant est renvoyé :
+-------------+ | RESULT | +-------------+ | ALL SUCCESS | +-------------+ 1 row in set (10 min 32.17 sec) -
Convertissez la base de données en mode DRDS
db_drdsen une base de données en mode AUTOdb_auto. Cette opération convertit le schéma des tables et copie les données.CREATE DATABASE db_auto as db_drds mode=auto;Le résultat suivant est renvoyé :
+-------------+ | RESULT | +-------------+ | ALL SUCCESS | +-------------+ 1 row in set (10 min 37.30 sec) -
Convertissez et copiez uniquement la table
tb1de la base de données en mode DRDSdb_drdsvers la base de données en mode AUTOdb_auto_exist.CREATE DATABASE IF NOT EXISTS db_auto_exist as db_drds include=tb1;Le résultat suivant est renvoyé :
+-------------+ | RESULT | +-------------+ | ALL SUCCESS | +-------------+ 1 row in set (8 min 12.05 sec) -
Prévisualisez le schéma des tables
tb1ettb2de la base de données source DRDSdb_drdsainsi que le schéma résultant en mode AUTO, sans effectuer de conversion réelle.CREATE DATABASE db_auto like db_drds dry_run=true include=tb1,tb2;Le résultat suivant est renvoyé :
+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | 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) -
Copiez uniquement les données de la base de données source DRDS vers la base de données cible AUTO sans convertir le schéma des tables. Vous devez créer au préalable la base de données cible AUTO et ses tables. Les schémas de tables de la base de données cible doivent être identiques à ceux de la base de données source.
CREATE DATABASE db_auto as db_drds create_tables=false;Le résultat suivant est renvoyé :
+-------------+ | RESULT | +-------------+ | ALL SUCCESS | +-------------+ 1 row in set (5 min 47.75 sec)
Consulter la progression et les résultats de la conversion
PolarDB-X met à votre disposition la vue INFORMATION_SCHEMA.CREATE_DATABASE, qui vous permet de vérifier l'avancement et le résultat de la tâche de conversion. Par exemple, exécutez l'instruction SQL suivante pour suivre la progression d'une tâche dont la base de données AUTO cible est db_auto.
SELECT * FROM INFORMATION_SCHEMA.CREATE_DATABASE where TARGET_SCHEMA = 'db_auto';\G
Le système renvoie le résultat suivant :
*************************** 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)
Vous pouvez également utiliser la commande show full ddl pour consulter la progression.
Pour certaines tâches de conversion longues, si la connexion est interrompue et que vous ne pouvez pas voir le résultat (la tâche de conversion continue de s'exécuter normalement après la perte de connexion), utilisez show ddl result pour afficher le résultat de la conversion. Vous pouvez aussi consulter des résultats plus détaillés dans INFORMATION_SCHEMA.CREATE_DATABASE.
Conversion time
La durée de la conversion dépend principalement du processus de copie des données entre la base de données DRDS source et la base de données AUTO cible. Dans un environnement de test avec une instance dédiée PolarDB-X (CPU 8 cœurs, 64 Go de mémoire, 4 nœuds de calcul et 4 nœuds de stockage), une base de données DRDS a été créée sur la base d'un test Sysbench. La base de données contenait 4 tables, chacune comportant 50 millions de lignes, soit un total d'environ 44 Go de données. La conversion a duré 10 minutes et 37 secondes.
La durée réelle de la conversion dépend de facteurs tels que les spécifications de votre instance et la taille de la base de données. Pour obtenir une estimation plus précise, nous vous recommandons d'effectuer un test à blanc pendant les heures creuses ou dans un environnement de test. Vous pouvez définir le paramètre lock sur false pour ce test.
Table schema conversion rules
En comprenant les règles de conversion automatique des bases de données en mode DRDS vers le mode AUTO par PolarDB-X, vous pouvez évaluer si les bases de données et les tables converties par PolarDB-X répondent à vos besoins métier et procéder aux ajustements nécessaires.
Tables simples et tables broadcast
Les tables simples et les tables broadcast en mode DRDS sont respectivement converties en tables simples et tables broadcast en mode AUTO.
Tables avec sharding de base de données et de table
-
Tableau de correspondance des fonctions.
Type de fonction DRDS
Fonction de sharding DRDS
Fonction de partitionnement 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))
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))
-
Sharding de base de données sans sharding de table.
# Table in DRDS mode create table tb1 ( id int, name varchar(20) ) dbpartition by uni_hash(id); # Mapped table in AUTO mode create table tb1 ( id int, name varchar(20) ) partition by key(id);RemarqueComme indiqué dans le tableau de correspondance des fonctions :
La fonction de sharding de base de données est convertie en fonction de partitionnement.
Le schéma de la table est converti en une table partitionnée de niveau 1 en mode AUTO.
-
Sharding de table sans sharding de base de données.
# Table in DRDS mode create table tb3 ( id int, dt date ) tbpartition by week(dt) tbpartitions 4; # Mapped table in AUTO mode 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 );RemarqueComme indiqué dans le tableau de correspondance des fonctions :
La fonction de sharding de table est convertie en sa fonction de partitionnement correspondante.
Le schéma de la table est converti en une table partitionnée de niveau 1 en mode AUTO.
-
Sharding de base de données et de table avec des règles identiques.
# Table in 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; # Mapped table in AUTO mode 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;RemarqueComme indiqué dans le tableau de correspondance des fonctions :
La fonction de sharding de base de données est convertie en sa fonction de partitionnement correspondante.
Le nombre de partitions est égal au produit du nombre de shards de base de données et du nombre de shards de table.
Le schéma de la table est converti en une table partitionnée de niveau 1 en mode AUTO.
-
Sharding de base de données et de table avec des règles différentes.
# Table in 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; # Mapped table in AUTO mode 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;RemarqueComme indiqué dans le tableau de correspondance des fonctions:
La fonction de sharding de base de données est convertie en la fonction de partitionnement de niveau 1 correspondante, et le nombre de partitions de niveau 1 est égal au nombre de shards de base de données.
La fonction de sharding de table est convertie en la fonction de partitionnement de niveau 2 correspondante, et le nombre de partitions de niveau 2 est égal au nombre de shards de table.
Le schéma de la table est converti en une table partitionnée de niveau 2 en mode AUTO.
Sequence conversion rules
En mode DRDS, les séquences group sequence, time-based sequence et simple sequence sont toutes converties vers le type New Sequence en mode AUTO, qui offre de meilleures performances globales. Pour plus d'informations, consultez la rubrique Séquence.
Précautions
La base de données AUTO cible doit avoir les mêmes attributs
CHARSETetCOLLATEque la base de données DRDS source. Par conséquent, vous ne pouvez pas spécifier manuellementCHARSETouCOLLATEdans l'instructioncreate database like/as.La base de données AUTO cible et ses tables n'héritent pas de l'attribut
localityde la base de données DRDS source et de ses tables. Pour plus d'informations surlocality, consultez la rubrique Spécifier les emplacements de stockage à l'aide de LOCALITY.