暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

将DRDS模式数据库转换为AUTO模式数据库1

酷数据库 2023-11-23
185

本文介绍了如何将DRDS模式的数据库转换为AUTO模式数据库。

背景信息

PolarDB-X支持通过create database like/as语句,将DRDS模式数据库转换为AUTO模式数据库。AUTO模式数据库与DRDS模式数据库的介绍,请参见AUTO模式数据库与DRDS模式数据库。(为方便表述,下文将待转换的DRDS模式数据库称为源DRDS库,转换后得到的AUTO模式数据库称为目标AUTO库)

  • create database like语句仅转换源DRDS库中的表的结构,不会复制数据。
  • create database as语句支持转换源DRDS库中表的结构,且复制对应表的数据。

前提条件

实例版本需在5.4.16-16717637及以上。查看实例版本的方法请参见查看实例版本

注意事项

  • 转换过程将会对源DRDS库加读锁,使其变成只读状态,只读状态下源DRDS库的所有DML、DDL语句都将被禁止,直至转换过程完成。因此请您谨慎评估转换过程对业务的影响。
  • 为避免转换失败,请不要在转换过程中对源DRDS库或目标AUTO库执行任何DML、DDL语句。
  • 转换过程不会删除或覆盖源DRDS库,而是参照源DRDS库建立一个新的目标AUTO库。转换结束后,您仍然可以访问源DRDS库。
  • 为避免存储空间容量不足导致转换失败,转换前请检查剩余空间容量。

语法


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...]
参数说明
参数名称参数说明
auto_database_name新创建数据库的名称,即目标AUTO库的名称。
drds_database_name源DRDS库的名称,该库必须是已经存在的DRDS模式的数据库。
mode新创建的数据库的模式选项,参数固定取值auto。
dry_rundry_run参数支持查看源DRDS库中的表结构以及其在AUTO模式下的结构。您也可以查看转换规则说明了解PolarDB-X是如何进行转换的,

取值如下:

  • true:开启dry_run参数;
  • false:关闭dry_run参数,默认值为false。

说明

  • dry_run参数仅用于展示DRDS模式下的表结构如何转换为AUTO模式的表结构。不会创建任何表结构,也不会复制表数据。
  • 开启dry_run参数,不会对源DRDS库产生任何影响(例如导致源DRDS库变为只读状态)。
lock

lock参数用于控制在转换过程中,是否对源DRDS库加读锁。加读锁将使得源DRDS库变为只读状态,源DRDS库上的DML、DDL操作都将被禁止。

取值如下:

  • true:开启lock,对源drds库加读锁,默认值为true;
  • false:关闭lock

    重要

    如果关闭此参数将导致源DRDS库和目标AUTO库间的数据不一致。

create_tables

create_tables参数用于控制在转换过程中是否在目标AUTO库下创建对应的表结构。

取值如下:

  • true:开启create_tables,PolarDB-X将自动为您转换表结构并在目标AUTO库下创建数据表。默认值为true;
  • false:关闭create_tables,关闭参数要求您必须预先创建好目标AUTO库,并在AUTO库下创建出所有和源DRDS库对应的表。

    说明

    • 如果认为PolarDB-X自动转换的表不够贴近您的应用场景,您可以选择关闭create_tables参数,自行创建目标AUTO库及表。目标AUTO库下的表必须和源DRDS库下的表拥有完全一致的表名和列定义,您可以自定义分区方式。
    • create_tables选项关闭时,create database as语句将只进行源DRDS库到目标AUTO库的数据复制,不创建目标AUTO库及表。
includeinclude参数表示转换源DRDS库中的部分表,当使用include时,只有include参数指定的表会被转换。
excludeexclude参数表示排除源DRDS库中的部分表,当使用exclude时,exclude参数指定的表将不会被转换。

示例

  • 将DRDS模式的数据库db_drds转换为AUTO模式数据库db_auto,仅转换表结构,不复制数据。


    CREATE DATABASE db_auto like db_drds mode=auto;

    返回信息如下:


    +-------------+
    | RESULT      |
    +-------------+
    | ALL SUCCESS |
    +-------------+
    1 row in set (10 min 32.17 sec)
  • 将DRDS模式的数据库db_drds转换为AUTO模式数据库db_auto,转换表结构且复制数据。


    CREATE DATABASE db_auto as db_drds mode=auto;

    返回信息如下:


    +-------------+
    | RESULT      |
    +-------------+
    | ALL SUCCESS |
    +-------------+
    1 row in set (10 min 37.30 sec)
  • 将DRDS模式数据库db_drds下的数据表tb1迁移至已存在的目标AUTO库中,转换表结构且复制数据。


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

    返回信息如下:


    +-------------+
    | RESULT      |
    +-------------+
    | ALL SUCCESS |
    +-------------+
    1 row in set (8 min 12.05 sec)
  • 不做转换,仅查看源DRDS库db_drds的表tb1,tb2的表结构以及它们在AUTO模式下的表结构。


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

    返回信息如下:


    +-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | 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)
  • 仅将源DRDS库的数据复制到目标AUTO库,不进行表结构转换。(您需要预先创建好目标AUTO库及对应的表,目标AUTO库下的数据表的定义必须与源DRDS库下对应的表完全一致)


    CREATE DATABASE db_auto as db_drds create_tables=false;

    返回信息如下:


    +-------------+
    | RESULT      |
    +-------------+
    | ALL SUCCESS |
    +-------------+
    1 row in set (5 min 47.75 sec)
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论