MySQL数据库迁移到国产数据库Gbase 8s

举报
torchstar 发表于 2022/12/18 20:31:34 2022/12/18
【摘要】 MySQL数据库迁移到国产数据库Gbase 8s

一、迁移过程示意

数据的迁移过程由两部分组成

第一部分是迁移数据库的结构,主要包括数据库对象的迁移;

部分是将数据迁移到目标数据库中。

真正的数据迁移是在第二部分完成的。对于数据的迁移,通常情况下是要暂停应用程序,这样可以保证迁移前后的数据一致性和完整性。使用常规方法,如果数据量很大的话,则需要较长的应用停机时间窗口

对时间窗口要求比较小的应用做迁移可以使用第三方工具(如CDC)来进行增量数据的迁移,这样可以最大限度的减停机时间,甚至可以实现MySQLGBase 8s无缝迁移

数据库结构和初始数据可以使用GMTK(GBaseMigrationToolkit)工具来完成,工具可以按预设置的规划进行数据迁移,但仍需人工确认迁移后的数据库结构合理性。

二、文件格式

数据MySQL导出将格式尽量调整为匹配GBase 8s的导入格式,这样可以最大程度上减小数据在转换过程中的工作量这里以GBase 8s load工具格式为例,说明 一下导入时对文件格式的要求

GBase 8s的load工具是一个常用的文本导入工具,它的字段间默认分隔符是|”管道符。由于|”在文本很少出现的字符,所以推荐在导出时使用|”来作为分隔符。每个字段应由“|”作为结束标识,换行符作为行与行之间的分隔符。每个数据单独存储在一个文件中。

demo

create table customer_log 
  (  id char(14),
    update_date datetime year to second,
    tablename varchar(20),
    update_count float,
updated float  );

customer_log导出/导入格式如下:

20101013114153|2010-10-13 11:41:53|2|53.0|53.0|
20101013114153|2010-10-13 11:41:53|3|0.0|0.0|
20101015094917|2010-10-15 09:49:17|2|15.0|15.0|
20101015094917|2010-10-15 09:49:17|3|0.0|0.0|
20101015094918|2010-10-15 09:49:18|4|1.0|1.0|
20101015102622|2010-10-15 10:26:22|2|2.0|2.0|
20101015102622|2010-10-15 10:26:22|4|0.0|0.0|
20101015111103|2010-10-15 11:11:03|1|1.0|1.0|

三、数据导出

MySQL提取数据库架构后,下一步需要考虑从MySQL中的每个表提取数据。为此,可以使用SELECT语句和mysqldump或OUTFILE选项。无论采用哪种数据提取方法,要在MySQL和GBase 8s之间实现平滑数据移动,必须要考虑以下事项:

1)、MySQL中的卸载数据是文本格式。

2)、为MySQL中的每个表创建一个独立卸载文件(outfile)

3)、卸载文件中的每一行表示MySQL中的一行。

4)、MySQL中的每一列/字段通过一个字符|分隔。

5)、MySQL中的每一行通过“/n”字符或其他有效的行结束符终止。

demo

SELECT * INTO OUTFILE '/tmp/tab1.unl'
FIELDS TERMINATED BY '|'
LINES TERMINATED BY '|\n'
FROM tab1;

可以编写脚本并发执行以上操作来提升数据从MySQL导出的效率

导出的数据GBase 8s导入要求的格式存储在/tmp/tab1.unl

四、数据导入

(1)建立数据库时,无日志模式建立,这样数据在导入时无需记录逻辑日志,导入效率会大幅提高。当数据导入完毕后,使用ontape命令将数据库改为需要的日志模式

例如将某数据库日志模式改为UNBUFF:

ontape -u DATABASE -s -L 0 -t /dev/null

数据量大的迁移中,可以将建立索引、约束脚本单独提取出来,在所有数据成功导入后,再打开PDQ建立

(2)使用load工具进行导入:

load是GBase 8s最基础和最常用的文本数据导入工具,支持多表并发导入,操作简单。

demo

Load from /datam/tab1.unl insert into tab1;

五、外部表导入

使用GBase 8s外部表(external table)进行导入:

对于数据量的表,传统的load导入方式会迁移过程中占用大量的时间窗口,成为迁移效率的瓶颈。针对这个问题,大表的导入,可以采用GBase 8s外部表的方式进行,

创建External table:

语法:

CREATE EXTERNAL TABLE table-name
(       
column-name { datatype [DEFAULT default_opts] | <UDTs> } [
<external-column-defn> ] [,...]
)
USING  (DATAFILES("{DISK | PIPE} : file-path" [,...] )       
[, <table-option> [...] ])
<external-column-defn>: EXTERNAL CHAR( size ) [ NULL 'null-string' [ NOT NULL ] ]
<table-options>:
FORMAT format-type
DEFAULT | DELUXE | EXPRESS
ESCAPE 'escape-character'
DELIMITER 'field-delimiter'
RECORDEND 'record-delimiter'
MAXERRORS num-errors
REJECTFILE 'filename'
NUMROWS num-rows

demo

create external table orders_ext
  ( order_num serial, order_date date, customer_num integer,ship_instruct char(40),
backlog char(1), po_num char(10),ship_date date, ship_weight decimal(8,2),
ship_charge money(6,2), paid_date date ) 
using 
  (
    datafiles  ("DISK:/opt/gbase/test/external_table/orders1.unl",
               "DISK:/opt/gbase/test/external_table/orders2.unl" ),
    format "delimited",
    DELIMITER "|",
    rejectfile "/opt/gbase/test/external_table/orders_rejfile.err",
    maxerrors 100
  );

也可根据已有表结构建立相同结构的外部表

create external table orders_ext SAMEAS orders
using 
  (
       datafiles  ("DISK:/opt/gbse/test/external_table/orders1.unl",
                  "DISK:/opt/gbase/test/external_table/orders2.unl" ),
    format "delimited",
    DELIMITER "|",
    rejectfile "/opt/gbase/test/external_table/orders_rejfile.err",
    maxerrors 100
  );

导入数据

insert into orders select * from orders_ext;

外部表使用技巧:PDQ & 分片表 & Light append

打开PDQ功能,并行处理。

目的表是分片表能进行并行的insert和select。

当导入RAW TABLE时,利用Light append进行快速数据导入。

六、对数据行数进行校验

MySQL数据库表的行数统计

use information_schema;
select table_name,table_rows from tables 
where TABLE_SCHEMA = 'DATABASENAME' order by table_rows desc;

GBase 8s数据库中各表行数统计:

update statistics;
select tabname,nrows from systables where tabid>99 and tabtpye='T' order by 2 desc;
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。