单表迁移工具 - mxgate

MatrixGate 4.3 新增迁移模式,可以将 Greenplum5、Greenplum6 和 YMatrix 集群的表数据高速迁移到当前 YMatrix 集群。

1 高速迁移原理

高速迁移使数据绕过 Master 节点,直接从源集群 Segment 上读取,经过 mxgate 转发,发送到目标集群 Segment 上,不存在 Master 单节点瓶颈。
源集群与目标集群 Segment 数量可以不一致。 transfer

2 使用方法

2.1 单表迁移

单表迁移用来迁移全表数据,用法如下:

mxgate --source transfer \
         --src-host 172.31.41.7 \
         --src-port 5432 \
         --src-db postgres \
         --src-user ec2-user \
         --src-password abc \
         --src-schema public \
         --src-table trans_ao \
         --compress "gzip" \
         --port-base 9129 \
         --local-ip 172.31.33.128 \
         --db-database ttt \
         --target public.trans_ao \
         --format text \
         --time-format raw \
         --use-auto-increment=false

其中:

参数名 描述
--source 功能入口,必须指定'transfer'
--src-host 源库master的ip地址
--src-port 源库master的端口号
--src-user 连接源库的用户名(建议使用superuser)
--src-password 连接密码
--src-schema 源表的schema名
--src-table 源表的表名
--compress 源数据库segment主机到本数据的传输方法:
空白字符串“”,代表不压缩,明文传输
gzip:使用gzip压缩,需要源数据库的segment主机上必须安装有gzip这个linux命令
lz4:使用lz4压缩,需要源数据库的segment主机上必须安装有lz4这个linux命令
推荐 lz4 > gzip > 不压缩
--port-base 传输中会占用一批端口,端口的范围为9129~
--local-ip 必须用源库可以连接到本机的IP地址
--db-database 迁移目标表所在的database名
--target 迁移目标表名,可以是 \<schema>.\<table>形式,如果不写schema名默认是public
--format text或csv,仅当迁移的数据里有复杂的字符串(包含换行、引号、分隔符)时,必须CSV。其他情况下text/csv均可时,优先用text模式
--time-format transfer模式下必须是raw
--use-auto-increment 当目标表包括serial类型的自增字段时,mxgate内默认会跳过该类型的字段,加入这个option来关闭mxgate跳过的逻辑

2.2 导出到文件

迁移模式的另一个用法是将数据快速导出到文件:

mxgate --source transfer \
         --src-host 172.31.41.7 \
         --src-port 5432 \
         --src-db postgres \
         --src-user ec2-user \
         --src-schema public \
         --src-table trans_ao_1 \
         --compress "lz4" \
         --port-base 9129 \
         --local-ip 172.31.33.128 \
         --save-to-dir /tmp/receive/ \
         --db-database ttt \
         --transform nil \
         --writer nil \
         --target trans_ao

使用--save-to-dir参数来指定文件存储路径。

注意,即使导出到文件,也需要给出--db-database和--target参数来指定目标库和表,并且目标库和表必须存在

2.3 过滤迁移

过滤迁移可以通过--src-sql参数指定SQL来过滤需要同步的数据,在表到表迁移和表到文件迁移中都可以使用:

mxgate --source transfer \
         --src-host 172.31.41.7 \
         --src-port 5432 \
         --src-db postgres \
         --src-user ec2-user \
         --src-sql "select * from demo where c1 = 'xxxx'" \
         --compress "lz4" \
         --port-base 9129 \
         --local-ip 172.31.33.128 \
         --save-to-dir /tmp/receive/ \
         --db-database ttt \
         --transform nil \
         --writer nil \
         --target trans_ao

有关迁移工具的详细参数请参考 mxgate