Tous les produits
Search
Centre de documentation

PolarDB:Convertir une base de données en mode DRDS vers une base de données en mode AUTO

Dernière mise à jour :Aug 20, 2026

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 like convertit 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 as convertit 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 auto.

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 :

  • true : Active le paramètre dry_run.

  • false : Désactive le paramètre dry_run. Il s'agit de la valeur par défaut.

Remarque
  • Le paramètre dry_run permet uniquement de prévisualiser la conversion du schéma des tables du mode DRDS vers le mode AUTO. Il ne crée aucun schéma de table et ne copie aucune donnée.

  • L'activation du paramètre dry_run n'affecte pas la base de données source DRDS. Par exemple, celle-ci ne devient pas accessible en lecture seule.

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 :

  • true : Applique un lock de lecture sur la base de données source DRDS. Il s'agit de la valeur par défaut.

  • false : Désactive le lock.

    Important

    Si vous désactivez ce paramètre, des incohérences de données peuvent apparaître entre la base de données source DRDS et la base de données cible AUTO.

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 :

  • true : Lorsque le paramètre create_tables est activé, PolarDB-X convertit automatiquement le schéma des tables et crée les tables de données dans la base de données cible AUTO. Il s'agit de la valeur par défaut.

  • false : Lorsque le paramètre create_tables est désactivé, vous devez créer au préalable la base de données cible AUTO ainsi que toutes les tables correspondant aux tables de la base de données source DRDS.

    Remarque
    • Si les tables converties automatiquement par PolarDB-X ne conviennent pas à votre scénario d'application, vous pouvez désactiver le paramètre create_tables et créer manuellement la base de données cible AUTO et ses tables. Les tables de la base de données cible AUTO doivent avoir exactement les mêmes noms de table et définitions de colonnes que celles de la base de données source DRDS. Vous pouvez personnaliser le mode de partitionnement.

    • Lorsque l'option create_tables est désactivée, l'instruction create database as se contente de copier les données de la base de données source DRDS vers la base de données cible AUTO. Elle ne crée ni la base de données cible AUTO ni ses tables.

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_drds en une base de données en mode AUTO db_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_drds en une base de données en mode AUTO db_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 tb1 de la base de données en mode DRDS db_drds vers la base de données en mode AUTO db_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 tb1 et tb2 de la base de données source DRDS db_drds ainsi 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.

Remarque

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

    Comme 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
    );
    Remarque

    Comme 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;
    
    Remarque

    Comme 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;
    
    Remarque

    Comme 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 CHARSET et COLLATE que la base de données DRDS source. Par conséquent, vous ne pouvez pas spécifier manuellement CHARSET ou COLLATE dans l'instruction create database like/as.

  • La base de données AUTO cible et ses tables n'héritent pas de l'attribut locality de la base de données DRDS source et de ses tables. Pour plus d'informations sur locality, consultez la rubrique Spécifier les emplacements de stockage à l'aide de LOCALITY.