greenplum迁移到mysql_GreenplumDB 迁移报错解决

GreenplumDB 迁移报错

https://www.cndba.cn/Marvinn/article/3191

2018.12.06晚,帮助客户迁移GreenplumDB,由于不了解之前的环境如何,所以不采用GP自带的gp_dump、gp_restore并行备份以及恢复,而采用pg_dump postgres备份方式备份,pg_restore恢复,但是还是出现了报错,以下是迁移报错解决:

https://www.cndba.cn/Marvinn/article/3191

数据全部在某个schema下,所以-n 参数指定schema,目标端环境、数据库、用户、schema已提前创建好….https://www.cndba.cn/Marvinn/article/3191

$ pg_dump marvin -h 172.16.10.21 -U marvin -p 5432 -W -Fc -n marvin -b --gp-syntax >>marvin.dump

Password:

pg_dump: query to obtain distribution policy of table "food_type" returned no data

报错如上:主要因为Greenplum的元数据错误也会影响到数据备份过程,在使用pg_dump进行数据结构备份时,会由于分布策略的缺失导致备份失败,本文介绍此错误的解决办法,参考博客链接:https://blog.csdn.net/cloudguru/article/details/45718535,但是该解决方案只能少数表重建。并按照GP语法带有分布键才可以,而我通过以下SQL查询,

pg_dump是个讨厌的家伙,它一遇到错误就停止,解决了它才会继续向下,如果再遇到错误再停止,为了避免此类型的错误继续出现,可使用如下命令查询ns1中没有分布键值的表,此输出中可能包含视图,挑选需要处理的用户表按照上面的步骤进行处理:

psql databasename -c "select oid,relnamespace from pg_class where relname='table1';"

databasename=# select relname from pg_class where relnamespace=5678 and oid not in (select localoid from gp_distribution_policy);

发现数据库中所有表都缺乏分布键策略,可能跟之前管理创建表时未指定分布键导致的,所以手动重建所有表不现实,所以发现另外一种解决方案,就是pg_dump时不适用gp-syntax语法,这样导出的就是postgres语法,后续在导入gp是采用随机分布策略,它自动分布,一般以第一个字段为分布键,这样会造成源库与目标端分布键不一致,并且主键无法建立,详细看后续.

参数--gp-syntax 默认是持有的,使用下面的命令备份即可:

$ pg_dump unidbc -h 10.17.4.81 -U admin -p 5432 -W -Fc -n zygx -b --no-gp-syntax >>marvin.dump

恢复命令

https://www.cndba.cn/Marvinn/article/3191https://www.cndba.cn/Marvinn/article/3191

$ pg_restore -d marvin -h 172.16.10.21 -U marvin -p 5432 -W -Fc -n marvin marvin.dump

或者

$ pg_restore -d marvin -h 172.16.10.21 -U marvin -p 5432 -W -Fc marvin1.dump

恢复过程报错

pg_restore: [archiver (db)] Error from TOC entry 2100; 1259 46034 TABLE zjfda2017062601t02 admin

pg_restore: [archiver (db)] could not execute query: ERROR: role "admin" does not exist

Command was: ALTER TABLE zygx.zjfda2017062601t02 OWNER TO admin;

pg_restore: [archiver (db)] Error from TOC entry 2101; 1259 46062 TABLE zjfda2017081801t01 admin

pg_restore: [archiver (db)] could not execute query: ERROR: role "admin" does not exist

Command was: ALTER TABLE zygx.zjfda2017081801t01 OWNER TO admin;

pg_restore: [archiver (db)] Error from TOC entry 2102; 1259 46090 TABL

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值