日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

將DRDS模式數據庫轉換為AUTO模式數據庫

本文介紹了如何將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是如何進行轉換的,

取值如下:

  • 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_tablesPolarDB-X將自動為您轉換表結構并在目標AUTO庫下創建數據表。默認值為true;

  • false:關閉create_tables,關閉參數要求您必須預先創建好目標AUTO庫,并在AUTO庫下創建出所有和源DRDS庫對應的表。

    說明
    • 如果認為PolarDB-X自動轉換的表不夠貼近您的應用場景,您可以選擇關閉create_tables參數,自行創建目標AUTO庫及表。目標AUTO庫下的表必須和源DRDS庫下的表擁有完全一致的表名和列定義,您可以自定義分區方式。

    • create_tables選項關閉時,create database as語句將只進行源DRDS庫到目標AUTO庫的數據復制,不創建目標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)

查看轉換進度及結果

PolarDB-X提供了查看DRDS庫轉AUTO庫任務的視圖INFORMATION_SCHEMA.CREATE_DATABASE,可以通過該視圖查看轉換過程的進度及結果。例如您可以通過如下SQL查看目標AUTO庫為db_auto的轉換任務的進度。

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

返回信息如下:

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

PolarDB-X支持使用show full ddl查看進度。

對于一些轉換過程非常耗時的任務,如果連接斷開導致無法看到回顯結果(連接斷開后轉換任務仍會正常執行),可以使用show ddl result查看轉換結果。當然,您也可以通過INFORMATION_SCHEMA.CREATE_DATABASE查看更為詳細的結果。

轉換耗時說明

轉換耗時主要由源DRDS庫與目標AUTO庫間的數據復制過程導致。在PolarDB-X獨享規格,8核64 GB,4個計算節點,4個存儲節點的環境下,參照Sysbench測試創建DRDS庫,數據量為4張表,每張表5000萬行,共約44 GB數據,轉換耗時10min37s。

說明

具體轉換耗時與您的實例規格、數據庫大小等因素有關,如需了解更準確的轉換時間,建議您在業務低峰期或測試環境進行演練,演練時可關閉lock參數。

表結構轉換規則

通過了解PolarDB-X自動轉換DRDS模式庫為AUTO模式庫的轉換規則,您可以評估PolarDB-X自動轉換的庫和表是否滿足您的業務需求,從而做出更貼近業務需求的調整。

單表和廣播表

DRDS模式下的單表和廣播表,將分別轉換為AUTO模式下的單表和廣播表。

分庫分表的表

  • 函數映射關系表。

    DRDS拆分函數類型

    DRDS模式下的拆分函數

    AUTO模式下的分區函數

    哈希類型

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

    日期類型

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

  • 分庫不分表。

    # drds模式下的表
    create table tb1 (
    	id int,
      name varchar(20)
    ) dbpartition by uni_hash(id);
    
    # 映射為auto模式的表
    create table tb1 (
      id int,
      name varchar(20)
    ) partition by key(id);
    說明

    函數映射關系表可知:

    • 分庫拆分函數將轉換為分區函數。

    • 表結構將轉換為AUTO模式的一級分區表。

  • 不分庫只分表。

    # drds模式下的表
    create table tb3 (
      id int,
      dt date
    ) tbpartition by week(dt) tbpartitions 4;
    
    # 映射為auto模式的表
    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
    );
    說明

    函數映射關系表可知:

    • 分表拆分函數將轉換為對應的分區函數。

    • 表結構將轉換為AUTO模式的一級分區表。

  • 分庫且分表(分庫拆分規則和分表拆分規則相同)。

    # drds模式下的表
    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; 
    
    # 映射為auto模式的表
    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;
    
    說明

    函數映射關系表可知:

    • 分庫拆分函數將轉換為對應的分區函數。

    • 分區數量等于分庫數量和分表數量的乘積。

    • 表結構將轉換為AUTO模式的一級分區表。

  • 分庫且分表(分庫拆分規則和分表拆分規則不相同)。

    # drds模式下的表
    create table tb5 (
      buyer_id varchar(20),
      order_id varchar(20)
    ) dbpartition by hash(buyer_id) tbpartition by hash(order_id) tbpartitions 4; 
    
    # 映射為auto模式的表
    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;
    
    說明

    函數映射關系表可知

    • 分庫拆分函數將轉換為對應的一級分區函數,且一級分區數量等于分庫數量。

    • 分表拆分函數將轉換為對應的二級分區函數,且二級分區數量等于分表數量。

    • 表結構將轉換為AUTO模式的二級分區表。

Sequence轉換規則

DRDS模式下的group sequencetime-based sequencesimple sequence將被全部轉換為AUTO模式下綜合性能更好的New Sequence。詳情請參見Sequence

注意事項

  • 因為轉換后的AUTO模式庫和轉換前的DRDS模式庫的CHARSET屬性和COLLATE屬性需要保持一致,所以不允許在create database like/as語句中手動指定CHARSETCOLLATE

  • 轉換后的AUTO模式庫和表不會繼承DRDS模式庫和表的locality屬性。關于locality,請參見通過LOCALITY指定存儲位置