GPDB43 Administrator Guide--第八章 使用gptransfer迁移数据

第八章 使用gptransfer迁移数据

使用gptransfer工具在database之间传送数据;gptransfer迁移工具可以传送greenplum数据库元数据和数据到另一个数据库。可以通过工具传输整个数据库内容,也可以只传输几个选定的表数据。传输数据的源数据库与目标数据库可以是在同一个cluster(segment instance),也可以是在不同的cluster(segment instance)。可以跨所有segment并行传输数据,通过gpfdist加载工具还能提高传输速度;

gptransfer要求传输源与目的都必须是现有的cluster,而且网络可访问,ssh等效访问;全数据库传输包括数据库schema、表数据、索引、视图、角色、用户定义函数、资源队列等。配置文件,如postgres.conf,pg_hba.conf等需要管理员手动传输。用gppkg在数据库上安装了扩展,如MADlib和程序语言扩展,在目标数据库上也必须要安装;

一、前提条件

?该gptransfer效用只能用于Greenplum数据库,包括EMC DCA。 Pivotal HAWQ不支持作为源或目标。

?源和目标的Greenplum集群必须都是4.2或更高版本。

?至少有一个Greenplum实例必须在其分布gptransfer工具。该实用程序包括在Greenplum的数据库版本4.2.8.1及更高和4.3.2.0及更高。如果源或目标都不包括gptransfer,你必须升级其中一个cluster到能使用gptransfer的版本。

?该gptransfer实用程序可以从源或目标数据库的集群上运行。

?目的cluster的segment数量必须大于或等于源cluster主机的数量。在目标的segment数量可能比源中的segment数量少,则数据传输将以较慢的速度。

?在两个集群段主机必须与对方的网络连接。

?在这两个集群的每台主机必须能够与证书验证连接到所有其他主机SSH。您可以使用gpssh_exkeys工具来在两个集群的主机之间交换公钥。

二、gptransfer过程

    1.在源数据库创建可写外部表

    2.在目标数据库创建可读外部表

    3.在源cluster上创建命名管道、gpfdist进程

    4.在源数据库执行select into 到可写外部表,导出数据;

    5.在目标数据库执行select into 从可读外部表插入数据;

    6.验证数据,通过比较行数与MD5哈希值;

    7.清理外部表,命名管道,gpfdist进程;

 

三、快模式与慢模式

快模式:


慢模式:


 

四、批量与子批量大小

gptransfer执行的并行程度是由两个命令行选项来确定的:--batch-size和--sub-batch-size。--batch-size选项指定每批传输的表数量。默认指是2,这意味着,每次传输两个表。最小批量大小为1,最大值为10。--sub-batch-size参数指定开始传输表操作时并行子过程的最大数目。默认值是25,最大为50。--batch-size和--sub-batch-size的乘积就是并行的数量。

如果设置为默认值,例如,gptransfer可以执行50个并发任务。每个线程是一个Python程序并消耗内存,所以设置这些值过高,会导致一个Python内存错误。出于这个原因,批量大小应适应您的环境。

 

五、准备gptransfer主机

gptransfer要求源和目标的所有主机的ssh等效;另外,gptransfer要求一个主机映射文件,在选项--source-map-file=host_map_file中指定,格式如下:

host1_name,host1_ip_addr

host2_name,host2_ipaddr

...

六、限制

·         gptransfer只传输用户的数据库,postgres、template0、template1等系统数据库不能传输;配置文件需要管理员手动传输;插件要单独安装;

·         目标cluster segment至少要与源cluster segment 一样多;如果少的话则传输较慢;

·         传输小表或者空表会出乎意料的慢。因为,固定的开销是不能避免的,如设置外部表,并行进程建立通讯连接等;因此小表可以采用其他方法传输数据;

七、全模式与表模式

全模式(full mode),全数据库传输包括数据库schema、表数据、索引、视图、角色、用户定义函数、资源队列等。数据库不能在目标cluster上已经存在,如果存在则,报错如下:[ERROR]:- gptransfer: error: --full option specified but tables exist on destination  system

表模式(table mode),传输数据包括表定义,索引,表数据;目标cluster上对应数据库必须存储;如果对应表也存在的话,则报错:

[INFO]:-Validating transfer table set...

[CRITICAL]:- gptransfer failed. (Reason='Table database.schema.table exists in  database database .') exiting...

gptransfer选项,-t指定表,-f指表的定列表文件,格式如:database.schema.table,--skip-existing、--truncate、--drop选项处理存在的表;

Object

Full Mode

Table Mode

Data

Yes

Yes

Indexes

Yes

Yes

Roles

Yes

No

Functions

Yes

No

Resource Queues

Yes

No

postgres.conf

No

No

pg_hba.conf

No

No

gppkg

No

No

八、locking

-x选项打开表锁。排它锁直到表数据copy和验证完成;

九、验证

gptransfer --validate=type。类型有两种:一是count、二是md5

十、失败传输

传输失败的日志文件格式是-f选项要求的日志,因此,可以通过gptransfer -f重新开始传输;

例子:

[WARNING]:-Some tables failed to transfer. A list of these tables

[WARNING]:-has been written to the file failed_transfer_tables_20140808_101813.txt

[WARNING]:-This file can be used with the -f option to continue

十一、最佳实践

1.小心设置并行,不要超过主机内存

2.传输数据库时,先使用gptransfer --full 和--schema-only选项,然后,再运行gptransfer --schema-only选项,同时增加--truncate或drop;

3.小心选择gpfdist和外部表的分隔符

4.如果有许多空表需要传输,建议考虑DDL脚本实现,不要使用gptransfer;

5.如果传输的表有索引,传输之前最好 drop掉。因为,在目标数据库上加载数据同时还要维护索引,影响传输速度;

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/16976507/viewspace-1806831/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/16976507/viewspace-1806831/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值