Todos os produtos
Search
Central de documentação

PolarDB:Convert a DRDS mode database to an AUTO mode database

Última atualização: Aug 20, 2026

Este tópico descreve como converter um banco de dados do modo DRDS para o modo AUTO.

Informações básicas

O PolarDB-X permite converter um banco de dados do modo DRDS para o modo AUTO usando as instruções CREATE DATABASE LIKE ou CREATE DATABASE AS. Para obter mais informações sobre bancos de dados no modo AUTO e no modo DRDS, consulte {{XREF_0}}. Para maior clareza, este tópico refere-se ao banco de dados original no modo DRDS como banco de dados DRDS de origem e ao novo banco de dados no modo AUTO como banco de dados AUTO de destino.

  • A instrução create database like converte apenas o esquema das tabelas no banco de dados DRDS de origem, sem copiar os dados.

  • A instrução create database as converte o esquema das tabelas e copia os dados das tabelas correspondentes.

Pré-requisitos

A versão da instância deve ser 5.4.16-16717637 ou posterior. Para saber como verificar a versão da instância, consulte {{XREF_1}}.

Precauções

  • O processo de conversão aplica um bloqueio de leitura no banco de dados DRDS de origem. Isso torna o banco somente leitura e bloqueia todas as instruções DML e DDL até que a conversão seja concluída. Portanto, avalie cuidadosamente o possível impacto em seus negócios.

  • Para evitar falhas na conversão, não execute nenhuma instrução DML ou DDL no banco de dados DRDS de origem ou no banco de dados AUTO de destino durante o processo.

  • A conversão não exclui nem substitui o banco de dados DRDS de origem. Em vez disso, ela cria um novo banco de dados AUTO de destino a partir do banco de dados DRDS de origem. O acesso ao banco de dados DRDS de origem permanece disponível após a conversão.

  • Para evitar falhas por falta de espaço de armazenamento, verifique se há espaço suficiente disponível antes de iniciar.

Sintaxe

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

Parâmetros

Parâmetro

Descrição

auto_database_name

Nome do novo banco de dados AUTO de destino.

drds_database_name

Nome do banco de dados DRDS de origem. Este banco de dados já deve existir e estar no modo DRDS.

mode

Modo do novo banco de dados. Defina este parâmetro como auto.

dry_run

O parâmetro dry_run fornece uma prévia de como o PolarDB-X converte o esquema das tabelas de um banco de dados DRDS de origem para o modo AUTO. Consulte também {{XREF_2}} para entender como o PolarDB-X executa a conversão.

Valores válidos:

  • true: Ativa o parâmetro dry_run.

  • false: Desativa o parâmetro dry_run. Este é o valor padrão.

Nota
  • O parâmetro dry_run apenas exibe uma prévia da conversão do esquema de tabelas do modo DRDS para o modo AUTO. Ele não cria esquemas de tabelas nem copia dados.

  • Ativar o parâmetro dry_run não afeta o banco de dados DRDS de origem. Por exemplo, ele não se tornará somente leitura.

lock

O parâmetro lock controla se um bloqueio de leitura será aplicado ao banco de dados DRDS de origem durante a conversão. Um bloqueio de leitura torna o banco de dados DRDS de origem somente leitura e bloqueia todas as operações DML e DDL.

Valores válidos:

  • true: Aplica um lock de leitura no banco de dados DRDS de origem. Este é o valor padrão.

  • false: Desativa o lock.

    Importante

    Se você desativar este parâmetro, os dados poderão ficar inconsistentes entre o banco de dados DRDS de origem e o banco de dados AUTO de destino.

create_tables

O parâmetro create_tables controla se os esquemas de tabela correspondentes serão criados no banco de dados AUTO de destino durante a conversão.

Valores válidos:

  • true: Com create_tables ativado, o PolarDB-X converte automaticamente o esquema das tabelas e cria as tabelas de dados no banco de dados AUTO de destino. Este é o valor padrão.

  • false: Com create_tables desativado, crie previamente o banco de dados AUTO de destino e todas as tabelas correspondentes às tabelas do banco de dados DRDS de origem.

    Nota
    • Caso as tabelas convertidas automaticamente pelo PolarDB-X não atendam ao seu cenário de aplicação, desative o parâmetro create_tables e crie manualmente o banco de dados e as tabelas de destino. As tabelas no banco de dados AUTO de destino devem ter exatamente os mesmos nomes e definições de colunas que as tabelas no banco de dados DRDS de origem. É possível personalizar o modo de particionamento.

    • Quando a opção create_tables está desativada, a instrução create database as apenas copia os dados do banco de dados DRDS de origem para o banco de dados AUTO de destino. Ela não cria o banco de dados AUTO de destino nem suas tabelas.

include

O parâmetro include especifica quais tabelas do banco de dados DRDS de origem serão convertidas. Ao definir include, apenas as tabelas listadas nesse parâmetro passam pela conversão.

exclude

O parâmetro exclude indica quais tabelas não devem participar da conversão. Se você definir exclude, as tabelas especificadas nesse parâmetro serão ignoradas.

Exemplos

  • Converter o banco de dados db_drds do modo DRDS para o banco de dados db_auto no modo AUTO. Esta operação converte apenas o esquema das tabelas e não copia dados.

    CREATE DATABASE db_auto like db_drds mode=auto;

    A seguinte saída é retornada:

    +-------------+
    | RESULT      |
    +-------------+
    | ALL SUCCESS |
    +-------------+
    1 row in set (10 min 32.17 sec)
  • Converter o banco de dados db_drds do modo DRDS para o banco de dados db_auto no modo AUTO. Esta operação converte o esquema das tabelas e copia os dados.

    CREATE DATABASE db_auto as db_drds mode=auto;

    A seguinte saída é retornada:

    +-------------+
    | RESULT      |
    +-------------+
    | ALL SUCCESS |
    +-------------+
    1 row in set (10 min 37.30 sec)
  • Converter e copiar apenas a tabela tb1 do banco de dados db_drds no modo DRDS para o banco de dados db_auto_exist no modo AUTO.

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

    A seguinte saída é retornada:

    +-------------+
    | RESULT      |
    +-------------+
    | ALL SUCCESS |
    +-------------+
    1 row in set (8 min 12.05 sec)
  • Visualizar previamente o esquema das tabelas tb1 e tb2 no banco de dados DRDS de origem db_drds e o esquema resultante no modo AUTO, sem executar a conversão real.

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

    A seguinte saída é retornada:

    +-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | 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)
  • Copiar apenas os dados do banco de dados DRDS de origem para o banco de dados AUTO de destino, sem converter o esquema das tabelas. Crie previamente o banco de dados AUTO de destino e suas tabelas. Os esquemas das tabelas no banco de dados de destino devem ser idênticos aos do banco de dados de origem.

    CREATE DATABASE db_auto as db_drds create_tables=false;

    A seguinte saída é retornada:

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

Visualizar o progresso e os resultados da conversão

PolarDB-X oferece a view INFORMATION_SCHEMA.CREATE_DATABASE, que permite verificar o progresso e os resultados da tarefa de conversão. Por exemplo, execute a seguinte instrução SQL para acompanhar o andamento de uma tarefa cujo banco de dados AUTO de destino é db_auto.

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

A seguinte saída é retornada:

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

Use também o comando show full ddl para verificar o progresso.

Em tarefas de conversão mais demoradas, caso a conexão seja perdida e você não consiga visualizar o resultado (a tarefa continua executando normalmente mesmo após a perda de conexão), utilize show ddl result para consultar o resultado da conversão. Também é possível obter detalhes adicionais através de INFORMATION_SCHEMA.CREATE_DATABASE.

Conversion time

O tempo de conversão depende principalmente do processo de cópia de dados entre o banco de dados DRDS de origem e o banco de dados AUTO de destino. Em um ambiente de testes com uma instância dedicada do PolarDB-X (CPU de 8 núcleos, 64 GB de memória, 4 nós de computação e 4 nós de armazenamento), criou-se um banco de dados DRDS baseado em {{XREF_3}}. Esse banco continha 4 tabelas, cada uma com 50 milhões de linhas, totalizando aproximadamente 44 GB de dados. A conversão levou 10 minutos e 37 segundos.

Nota

O tempo real de conversão varia conforme fatores como as especificações da instância e o tamanho do banco de dados. Para obter uma estimativa mais precisa, recomendamos realizar um teste em horários de baixa demanda ou em um ambiente dedicado. Defina o parâmetro lock como false durante o teste.

Table schema conversion rules

Ao compreender as regras usadas pelo PolarDB-X para converter automaticamente bancos de dados do modo DRDS para o modo AUTO, você consegue avaliar se os bancos e tabelas resultantes convertidos pelo PolarDB-X atendem aos requisitos do seu negócio e fazer os ajustes necessários.

Tabelas únicas e tabelas de broadcast

Tabelas únicas e tabelas de broadcast no modo DRDS são convertidas, respectivamente, para tabelas únicas e tabelas de broadcast no modo AUTO.

Tabelas com sharding de banco de dados e de tabela

  • Tabela de mapeamento de funções.

    Tipo de função DRDS

    Função de sharding DRDS

    Função de particionamento 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))

    Data

    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 banco de dados sem sharding de tabela.

    # 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);
    Nota

    Conforme ilustrado em {{XREF_4}}:

    • A função de sharding de banco de dados é convertida em uma função de particionamento.

    • O esquema da tabela transforma-se em uma tabela particionada de nível 1 no modo AUTO.

  • Sharding de tabela sem sharding de banco de dados.

    # 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
    );
    Nota

    Conforme ilustrado em {{XREF_5}}:

    • A função de sharding de tabela é convertida para sua função de particionamento correspondente.

    • O esquema da tabela transforma-se em uma tabela particionada de nível 1 no modo AUTO.

  • Sharding de banco de dados e de tabela com regras idênticas.

    # 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;
    
    Nota

    Conforme ilustrado em {{XREF_6}}:

    • A função de sharding de banco de dados é convertida para sua função de particionamento correspondente.

    • O número de partições equivale ao produto entre a quantidade de shards de banco de dados e a quantidade de shards de tabela.

    • O esquema da tabela transforma-se em uma tabela particionada de nível 1 no modo AUTO.

  • Sharding de banco de dados e de tabela com regras diferentes.

    # 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;
    
    Nota

    Conforme ilustrado em {{XREF_7}}:

    • A função de sharding de banco de dados converte-se na função de particionamento de nível 1 correspondente, e o número de partições de nível 1 iguala-se à quantidade de shards de banco de dados.

    • A função de sharding de tabela converte-se na função de particionamento de nível 2 correspondente, e o número de partições de nível 2 iguala-se à quantidade de shards de tabela.

    • O esquema da tabela transforma-se em uma tabela particionada de nível 2 no modo AUTO.

Sequence conversion rules

No modo DRDS, group sequence, time-based sequence e simple sequence são todos convertidos para o tipo New Sequence no modo AUTO, que oferece melhor desempenho geral. Para mais informações, consulte {{XREF_8}}.

Precauções

  • O banco de dados AUTO de destino deve possuir os mesmos atributos CHARSET e COLLATE do banco de dados DRDS de origem. Por isso, não é permitido especificar manualmente CHARSET ou COLLATE na instrução create database like/as.

  • O banco de dados AUTO de destino e suas tabelas não herdam o atributo locality do banco de dados DRDS de origem e de suas tabelas. Para mais detalhes sobre locality, consulte {{XREF_9}}.