一,非并行备份(pg_dump)
1) GP依然支持常规的PostgreSQL备份命令pg_dump和pg_dumpall
2) 备份将在Master主机上创建一个包含所有Segment数据的大的备份文件
3) 不适合于全部数据备份,适用于小部分数据的迁移或备份
pg_dump是用于备份数据库的标准PostgreSQL实用程序,在Greenplum数据库中也受支持。它创建一个(非并行)转储文件。对于Greenplum数据库的常规备份,最好使用Greenplum Database备份实用程序gpcrondump以获得最佳性能。
如果要将数据迁移到其他数据库供应商的系统,或者使用具有不同段配置的另一个Greenplum
Database系统(例如,如果要迁移到的系统具有更多或更少的段实例),请使用pg_dump。要还原,必须使用相应的pg_restore实用程序(如果转储文件采用存档格式),或者可以使用客户端程序(如psql)(如果转储文件采用纯文本格式)。
由于pg_dump与常规PostgreSQL兼容,因此可用于将数据迁移到Greenplum数据库。 Greenplum数据库中的pg_dump实用程序与PostgreSQL pg_dump实用程序非常相似,但有以下例外和限制:
如果使用pg_dump备份Greenplum数据库数据库,请记住,对于非常大的数据库,转储操作可能需要很长时间(几个小时)。此外,您必须确保有足够的磁盘空间来创建转储文件。
如果要将数据从一个Greenplum数据库系统迁移到另一个,请使用--gp-syntax命令行选项在CREATE
TABLE语句中包含DISTRIBUTED BY子句。这可确保Greenplum Database表数据在还原时与正确的分发键列一起分发。
即使同时使用数据库,pg_dump也会进行一致的备份。 pg_dump不会阻止访问数据库的其他用户(读者或编写者)。
当与其中一种存档文件格式一起使用并与pg_restore结合使用时,pg_dump提供了灵活的存档和传输机制。
pg_dump可用于备份整个数据库,然后pg_restore可用于检查存档和/或选择要还原数据库的哪些部分。最灵活的输出文件格式是自定义格式(-Fc)。它允许选择和重新排序所有已归档项目,并在默认情况下进行压缩。
tar格式(-Ft)未压缩,加载时无法重新排序数据,但在其他方面非常灵活。它可以使用标准的UNIX工具(如tar)进行操作
参数:
1 [gpadmin@greenplum01 ~]$ pg_dump --help 2 pg_dump dumps a database as a text file or to other formats. 3 4 Usage: 5 pg_dump [OPTION]... [DBNAME] 6 7 General options: 8 -f, --file=FILENAME output file name 9 -F, --format=c|t|p output file format (custom, tar, plain text) 10 -i, --ignore-version proceed even when server version mismatches 11 pg_dump version 12 -v, --verbose verbose mode 13 -Z, --compress=0-9 compression level for compressed formats 14 --help show this help, then exit 15 --version output version information, then exit 16 17 Options controlling the output content: 18 -a, --data-only dump only the data, not the schema 19 -b, --blobs include large objects in dump 20 -c, --clean clean (drop) schema prior to create 21 -C, --create include commands to create database in dump 22 -d, --inserts dump data as INSERT, rather than COPY, commands 23 -D, --column-inserts dump data as INSERT commands with column names 24 -E, --encoding=ENCODING dump the data in encoding ENCODING 25 -n, --schema=SCHEMA dump the named schema(s) only 26 -N, --exclude-schema=SCHEMA do NOT dump the named schema(s) 27 -o, --oids include OIDs in dump 28 -O, --no-owner skip restoration of object ownership 29 in plain text format 30 -s, --schema-only dump only the schema, no data 31 -S, --superuser=NAME specify the superuser user name to use in 32 plain text format 33 -t, --table=TABLE dump only matching table(s) (or views or sequences) 34 -T, --exclude-table=TABLE do NOT dump matching table(s) (or views or sequences) 35 -x, --no-privileges do not dump privileges (grant/revoke) 36 --disable-dollar-quoting disable dollar quoting, use SQL standard quoting 37 --disable-triggers disable triggers during data-only restore 38 --use-set-session-authorization 39 use SESSION AUTHORIZATION commands instead of 40 ALTER OWNER commands to set ownership 41 --gp-syntax dump with Greenplum Database syntax (default if gpdb) 42 --no-gp-syntax dump without Greenplum Database syntax (default if postgresql) 43 --function-oids dump only function(s) of given list of oids 44 --relation-oids dump only relation(s) of given list of oids 45 46 Connection options: 47 -h, --host=HOSTNAME database server host or socket directory 48 -p, --port=PORT database server port number 49 -U, --username=NAME connect as specified database user 50 -W, --password force password prompt (should happen automatically) 51 52 If no database name is supplied, then the PGDATABASE environment 53 variable value is used. 54 55 Report bugs to <bugs@greenplum.org>.
实例:
1. 只导出postgres数据库的数据,不包括模式 -s pg_dump -U gpadmin -f /postgres.sql -s postgres(数据库名) 2. 导出postgres数据库(包括数据) pg_dump -U gpadmin -f /postgres.sql postgres(数据库名) 3. 导出postgres数据库中表test01的数据 create database "test1" with owner="gpadmin" encoding='utf-8';(单引号,双引号不能错) pg_dump -U gpadmin -f /postgres.sql -t test1 postgres(数据库名) 4. 导出postgres数据库中表test1的数据,以insert语句的形式 pg_dump -U gpadmin -f /postgres.sql -t test1 --column-inserts postgres(数据库名) 5. 恢复数据到gpdb数据库 psql -U gpadmin -f /postgres.sql gpdb
二,操作指南
备份1:
[gpadmin@greenplum01 ~]$ pg_dump -U gpadmin -F t -f /gpbackup/back2/gpdb.tar gpdb [gpadmin@greenplum01 ~]$
恢复:
[gpadmin@greenplum01 ~]$ pg_restore -U gpadmin -d gpdb /gpdb.tar [gpadmin@greenplum01 ~]$
备份2:
[gpadmin@greenplum01 ~]$ pg_dump -U gpadmin -F c -f /gpbackup/back2/gpdb.tar gpdb
备份压缩1:
[gpadmin@greenplum01 ~]$ pg_dump -U gpadmin gpdb | gzip > /gpbackup/back2/gpdb.gz [gpadmin@greenplum01 ~]$
恢复
gunzip -c /gpdb.gz | psql -U gpadmin postgres
cat /gpdb.gz | gunzip | psql -U gpadmin postgres
备份切割:
pg_dump -U gpadmin -d gpdb | split -b 100k - gpback/gpb
恢复:
cat /gpback/gpb* | psql -U gpadmin postgres