本文介绍了如何将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_run | dry_run参数支持查看源DRDS库中的表结构以及其在AUTO模式下的结构。您也可以查看转换规则说明了解PolarDB-X是如何进行转换的, 取值如下:
说明
|
| lock | lock参数用于控制在转换过程中,是否对源DRDS库加读锁。加读锁将使得源DRDS库变为只读状态,源DRDS库上的DML、DDL操作都将被禁止。 取值如下:
|
| create_tables | create_tables参数用于控制在转换过程中是否在目标AUTO库下创建对应的表结构。 取值如下:
|
| include | include参数表示转换源DRDS库中的部分表,当使用include时,只有include参数指定的表会被转换。 |
| exclude | exclude参数表示排除源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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




