Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2875008
  • 博文数量: 200
  • 博客积分: 2413
  • 博客等级: 大尉
  • 技术积分: 3067
  • 用 户 组: 普通用户
  • 注册时间: 2011-04-01 22:07
文章分类

全部博文(200)

文章存档

2018年(2)

2017年(8)

2016年(35)

2015年(14)

2014年(20)

2013年(24)

2012年(53)

2011年(44)

分类: Mysql/postgreSQL

2016-03-04 09:45:38



一、非并行备份及恢复
使用PostgreSQL的pg_dump和pg_dumpall来备份数据,这两种备份工具都不支持并行备份。
所有备份文件都保存到Master节点,而不是segment节点。一般情况不使用pg_dump,它适用于PostgreSQL迁移到Greenplum。

1、pg_dump
可以在本地及远程进行备份,只需要表的读权限即可备份。pg_dump创建的备份是一致的,在pg_dump运行时数据库产生快照,不阻塞数据库的DML操作,但是会阻塞需要排他锁的操作,如alter table等。特别注意的是,pg_dump一次只能备份一个单独的数据库,且不能备份角色和表空间信息(因为这些信息是cluster-wide,而不是在某个数据库中(per-database))。

命令参数

$ pg_dump --help

pg_dump dumps a database as a text file or to other formats.

 

Usage:

  pg_dump [OPTION]... [DBNAME]

 

General options:

  -f, --file=FILENAME      output file name

  -F, --format=c|t|p       output file format (custom, tar, plain text)

  -i, --ignore-version     proceed even when server version mismatches

                           pg_dump version

  -v, --verbose            verbose mode

  -Z, --compress=0-9       compression level for compressed formats

  --help                   show this help, then exit

  --version                output version information, then exit

 

Options controlling the output content:

  -a, --data-only             dump only the data, not the schema

  -b, --blobs                 include large objects in dump

  -c, --clean                 clean (drop) schema prior to create

  -C, --create                include commands to create database in dump

  -d, --inserts            dump data as INSERT, rather than COPY, commands

  -D, --column-inserts     dump data as INSERT commands with column names

  -E, --encoding=ENCODING     dump the data in encoding ENCODING

  -n, --schema=SCHEMA         dump the named schema(s) only

  -N, --exclude-schema=SCHEMA do NOT dump the named schema(s)

  -o, --oids                  include OIDs in dump

  -O, --no-owner              skip restoration of object ownership

                              in plain text format

  -s, --schema-only           dump only the schema, no data

  -S, --superuser=NAME        specify the superuser user name to use in

                              plain text format

  -t, --table=TABLE           dump only matching table(s) (or views or sequences)

  -T, --exclude-table=TABLE   do NOT dump matching table(s) (or views or sequences)

  -x, --no-privileges         do not dump privileges (grant/revoke)

  --disable-dollar-quoting    disable dollar quoting, use SQL standard quoting

  --disable-triggers          disable triggers during data-only restore

  --use-set-session-authorization

                              use SESSION AUTHORIZATION commands instead of

                              ALTER OWNER commands to set ownership

  --gp-syntax                 dump with Greenplum Database syntax (default if gpdb)

  --no-gp-syntax              dump without Greenplum Database syntax (default if postgresql)

 

Connection options:

  -h, --host=HOSTNAME      database server host or socket directory

  -p, --port=PORT          database server port number

  -U, --username=NAME      connect as specified database user

  -W, --password           force password prompt (should happen automatically)

 

If no database name is supplied, then the PGDATABASE environment

variable value is used.

 

Report bugs to .

 



创建备份目录

[root@gp-master ~]# mkdir /gpbackup

[root@gp-master ~]# chown  gpadmin.gpadmin /gpbackup/



<1>表级别备份恢复
#  备份szlsd_db数据库中的member表。 -t表名,-U用户,-W密码 -f输出的备份文件名字

$ pg_dump -t member -Uszlsd -W szlsd_db -f /gpbackup/member.dmp 


# 恢复数据

$ psql szlsd_db -Uszlsd -W



<2>database级别备份恢复
#  备份database,szlsd_db是库名

$ pg_dump szlsd_db -Ugpadmin -W  -f /gpbackup/szlsd_db.dmp   


# 删除szlsd_db数据库
若用户连接数据库,那么无法删除该数据库,否则会报错

szlsd_db=> drop database szlsd_db;

ERROR:  cannot drop the currently open database


这里使用gpadmin用户删除szlsd_db数据库

testDB=# drop database szlsd_db;

DROP DATABASE

testDB=# \c

You are now connected to database "testDB" as user "gpadmin".


需创建database

testDB=# \c

You are now connected to database "testDB" as user "gpadmin".

testDB=# create database szlsd_db with owner=szlsd  template=template0 ;

CREATE DATABASE


# 数据恢复,--single-transaction表示整个恢复过程是一个事务,要么成功要么回滚。
# 另外,导入的用户必须有superuser权限。恢复成功后,别忘了运行ANALYZE收集统计信息。

$ psql --single-transaction szlsd_db  



<3>schema级别备份恢复
# 备份database中的schema。-n 表示schema。public是所有database中默认的schema。这里要备份szlsd_db中的temp schema。

$ pg_dump szlsd_db -n temp -Uszlsd -W -f /gpbackup/temp.dmp  


# 删除schema

szlsd_db=> drop schema temp cascade;

NOTICE:  drop cascades to table temp.a

DROP SCHEMA


# 恢复schema(无需手动创建schema)

$ psql --single-transaction szlsd_db -Uszlsd -W


确认temp schema已恢复

szlsd_db=> \dn

       List of schemas

        Name        |  Owner  

--------------------+---------

 gp_toolkit         | gpadmin

 information_schema | gpadmin

 pg_aoseg           | gpadmin

 pg_bitmapindex     | gpadmin

 pg_catalog         | gpadmin

 pg_toast           | gpadmin

 public             | gpadmin

 temp               | szlsd

(8 rows)

 



<4>pg_dump其他常用参数

-T, --exclude-table=TABLE   do NOT dump matching table(s) (or views or sequences)

-N, --exclude-schema=SCHEMA do NOT dump the named schema(s)




2、pg_dumpall
上面说了,gp_dump同时只能备份一个数据库。为了解决这个问题,就要使用pg_dumpall工具,它备份每个数据库和角色、表空间定义。
执行pg_dumpall需要超级用户权限。

$ pg_dumpall --help

pg_dumpall extracts a PostgreSQL database cluster into an SQL script file.

 

Usage:

  pg_dumpall [OPTION]...

 

General options:

  -f, --file=FILENAME      output file name

  -i, --ignore-version     proceed even when server version mismatches

                           pg_dumpall version

  --help                   show this help, then exit

  --version                output version information, then exit

 

Options controlling the output content:

  -a, --data-only          dump only the data, not the schema

  -c, --clean              clean (drop) databases before recreating

  -d, --inserts            dump data as INSERT, rather than COPY, commands

  -D, --column-inserts     dump data as INSERT commands with column names

  -f, --filespaces         dump filespace data

  -g, --globals-only       dump only global objects, no databases

  -o, --oids               include OIDs in dump

  -O, --no-owner           skip restoration of object ownership

  -r, --resource-queues    dump resource queue data

  -s, --schema-only        dump only the schema, no data

  -S, --superuser=NAME     specify the superuser user name to use in the dump

  -x, --no-privileges      do not dump privileges (grant/revoke)

  --disable-dollar-quoting

                           disable dollar quoting, use SQL standard quoting

  --disable-triggers       disable triggers during data-only restore

  --use-set-session-authorization

                           use SESSION AUTHORIZATION commands instead of

                           OWNER TO commands

  --gp-syntax              dump with Greenplum Database syntax (default if gpdb)

  --no-gp-syntax           dump without Greenplum Database syntax (default if postgresql)

 

Connection options:

  -h, --host=HOSTNAME      database server host or socket directory

  -l, --database=DBNAME    alternative default database

  -p, --port=PORT          database server port number

  -U, --username=NAME      connect as specified database user

  -w, --no-password        never prompt for password

  -W, --password           force password prompt (should happen automatically)

 

If -f/--file is not used, then the SQL script will be written to the standard

output.

 

Report bugs to .

 


<1>导出所有role和tablespace

$ pg_dumpall  -g >/gpbackup/role_tbs.sql


<2>导出所有database

$ pg_dumpall  >/gpbackup/all.dmp



最后特别说一下,无论是pg_dump还是pg_dumpall,默认备份出的数据都不是SQL格式,而是COPY格式。-d, --inserts参数控制到底是SQL是COPY格式。
下面是我从备份文件中摘出来的一段:

COPY member (id, name, gender, a, b) FROM stdin;

1       tom     m       \N      \N

3       tom3    m       \N      \N

8       lily8   f       \N      \N

2       tom2    m       \N      \N

4       lily    f       \N      \N




转载请注明:
十字螺丝钉
http://blog.chinaunix.net/uid/23284114.html

QQ:463725310
E-MAIL:houora#gmail.com(#请自行替换为@)
阅读(12211) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~