本节主要从gp数据备份和恢复角度深入学习gp数据库。定期执行备份能确保在数据损坏或者系统失效发生时能恢复数据或者重建Greenplum数据库系统。用户还可以使用备份从一个Greenplum数据库系统迁移数据到另一个。
目录:
基本概念:
mkfifo | 命名管道也被称为FIFO文件,它是一种特殊类型的文件,它在文件系统中以文件名的形式存在,但是它的行为却和之前所讲的没有名字的管道(匿名管道)类似。 |
Master的备份文件包含用于创建数据库模式的SQL命令。Segment的数据转储文件包含将数据装载到表中的SQL语句。
[gpadmin@gp-master ~]$ gpcrondump -x komablog
20191225:14:58:56:022194 gpcrondump:gp-master:gpadmin-[INFO]:-Starting gpcrondump with args: -x komablog
20191225:14:58:56:022194 gpcrondump:gp-master:gpadmin-[INFO]:----------------------------------------------------
20191225:14:58:56:022194 gpcrondump:gp-master:gpadmin-[INFO]:-Master Greenplum Instance dump parameters
20191225:14:58:56:022194 gpcrondump:gp-master:gpadmin-[INFO]:----------------------------------------------------
20191225:14:58:56:022194 gpcrondump:gp-master:gpadmin-[INFO]:-Dump type = Full database
20191225:14:58:56:022194 gpcrondump:gp-master:gpadmin-[INFO]:-Database to be dumped = komablog
20191225:14:58:56:022194 gpcrondump:gp-master:gpadmin-[INFO]:-Master port = 5432
20191225:14:58:56:022194 gpcrondump:gp-master:gpadmin-[INFO]:-Master data directory = /data/master/gpseg-1
20191225:14:58:56:022194 gpcrondump:gp-master:gpadmin-[INFO]:-Run post dump program = Off
20191225:14:58:56:022194 gpcrondump:gp-master:gpadmin-[INFO]:-Rollback dumps = Off
20191225:14:58:56:022194 gpcrondump:gp-master:gpadmin-[INFO]:-Dump file compression = On
默认备份目录在数据目录下:
[gpadmin@gp-master db_dumps]$ pwd
/data/master/gpseg-1/db_dumps
[gpadmin@gp-master db_dumps]$ ls
20191225
[gpadmin@gp-master db_dumps]$ ll 20191225/
total 32
-rw------- 1 gpadmin gpadmin 114 Dec 25 14:59 gp_cdatabase_-1_1_20191225145856
-rw------- 1 gpadmin gpadmin 1180 Dec 25 14:59 gp_dump_-1_1_20191225145856.gz
-rw------- 1 gpadmin gpadmin 366 Dec 25 14:59 gp_dump_-1_1_20191225145856_post_data.gz
-rw-rw-r-- 1 gpadmin gpadmin 1 Dec 25 14:59 gp_dump_20191225145856_ao_state_file
-rw-rw-r-- 1 gpadmin gpadmin 1 Dec 25 14:59 gp_dump_20191225145856_co_state_file
-rw-rw-r-- 1 gpadmin gpadmin 1 Dec 25 14:59 gp_dump_20191225145856_last_operation
-rw-rw-r-- 1 gpadmin gpadmin 1022 Dec 25 14:59 gp_dump_20191225145856.rpt
-rw------- 1 gpadmin gpadmin 2541 Dec 25 14:59 gp_dump_status_-1_1_20191225145856
gpcrondump常用选项:
-t schema.tablename – 指定一个要包括在备份中的表。可以多次使用-t选项。
--table-file=filename – 指定一个文件,其中含有要包括在备份中的表的列表。
-T schema.tablename – 指定一个要从备份中排除的表。可以多次使用-T选项。
--exclude-table-file=filename – 指定一个文件,其中含有要从备份中排除的表的列表。
-s schema_name – 在备份中包括所有以指定方案名限定的表。可以多次使用-s选项。
--schema-file=filename – 指定一个文件,其中含有要包括在备份中的方案列表。
-S schema_name – 在备份中排除指定方案名限定的表。可以多次使用-S选项。
--exclude-schema-file=filename – 指定一个文件,其中含有要从备份中排除的方案列表。
改变Greenplum数据库的Segment配置会让增量备份无效。在更改了Segment配置后必须先创建和一个完全备份,才能接着创建增量备份。
操作实例:
gpcrondump -x mytest -u /backupdir
gpcrondump -x mytest -u /backupdir --incremental
gpdbrestore -t 20170114051246 -u /backupdir
直接I/O允许用户绕过缓存,这样应用会直接写到存储设备。这种方式可以节约CPU消耗并且消除一次数据拷贝操作。
操作系统级别的IO优化。
[gpadmin@gp-master ~]$ gpconfig -c gp_backup_directIO -v on
查看是否被启用
gpconfig -s gp_backup_directIO
查看当前数据块大小:
[gpadmin@gp-master ~]$ gpconfig -s gp_backup_directIO_read_chunk_mb
Values on all segments are consistent
GUC : gp_backup_directIO_read_chunk_mb
Master value: 20
Segment value: 20
修改数据块为10MB:
$ gpconfig -c gp_backup_directIO_read_chunk_mb -v 10
如果Segment主机没有足够的本地磁盘空间来备份到文件,用户可以使用命名管道备份到非本地存储,例如在网络上另一台主机上的存储或者一种备份装置。
实例演示:
[gpadmin@gp-master ~]$ gpcrondump -x komablog -K 20150519160000 --list-backup-files -u /data/testdir
20191226:10:23:58:014862 gpcrondump:gp-master:gpadmin-[INFO]:-Starting gpcrondump with args: -x komablog -K 20150519160000 --list-backup-files -u /data/testdir
20191226:10:23:59:014862 gpcrondump:gp-master:gpadmin-[INFO]:-Added the list of pipe names to the file: /data/testdir/db_dumps/20150519/gp_dump_20150519160000_pipes
20191226:10:23:59:014862 gpcrondump:gp-master:gpadmin-[INFO]:-Added the list of file names to the file: /data/testdir/db_dumps/20150519/gp_dump_20150519160000_regular_files
20191226:10:23:59:014862 gpcrondump:gp-master:gpadmin-[INFO]:-Successfully listed the names of backup files and pipes
[gpadmin@gp-master data]$ tree testdir/
testdir/
`-- db_dumps
`-- 20150519
|-- gp_dump_20150519160000_pipes
`-- gp_dump_20150519160000_regular_files
2 directories, 2 files
[gpadmin@gp-master 20150519]$ cat gp_dump_20150519160000_pipes
gp-node1:/data/testdir/db_dumps/20150519/gp_dump_0_2_20150519160000.gz
gp-node2:/data/testdir/db_dumps/20150519/gp_dump_1_3_20150519160000.gz
gp-master:/data/testdir/db_dumps/20150519/gp_dump_-1_1_20150519160000.gz
gp-master:/data/testdir/db_dumps/20150519/gp_dump_-1_1_20150519160000_post_data.gz
[gpadmin@gp-master 20150519]$ gpssh -h gp-node1
=> mkfifo /backups/db_dumps/20150519/gp_dump_0_2_20150519160000.gz
[gp-node1] mkfifo: cannot create fifo ‘/backups/db_dumps/20150519/gp_dump_0_2_20150519160000.gz’: No such file or directory
=> mkfifo /data/testdir/db_dumps/20150519/gp_dump_0_2_20150519160000.gz
[gp-node1] mkfifo: cannot create fifo ‘/data/testdir/db_dumps/20150519/gp_dump_0_2_20150519160000.gz’: File exists
=> mkfifo /data/testdir/db_dumps/20150519/gp_dump_0_2_20150519160000.gz
[gp-node1]
=> cat /data/testdir/db_dumps/20150519/gp_dump_0_2_20150519160000.g|nc -l 21000
nc gp-node1 21000 > gp_dump_0_2_20150519160000.gz
gpcrondump -x komablog -K 20150519160000 -u /testdir
gpdbrestore -x komablog -t 20150519160000 -u /testdir
工具gpdbrestore
-t timestamp – 恢复带有指定时间戳的备份。
-b YYYYYMMDD – 恢复Segment数据目录的db_dumps子目录中指定日期的转储文件。
-s database_name – 恢复指定数据库在Segment数据目录中能找到的最后一组转储文件。
-R hostname:path – 恢复位于一台远程主机上指定目录中的备份集。
$ gpdbrestore -t 20151013195916 --list-backup
$ gpdbrestore -s grants --redirect grants_snapshot
1>确保远程主机可访问
$ ping archive_host
2>确保gpadmin账户可用
$ ssh gpadmin@archive_host
3>确保可以回ping的master主机
$ ping mdw
4>确保需要恢复的数据库已建好
$ createdb database_name
5>master上运行恢复命令
$ gpdbrestore -R archive_host:/gpdb/backups/archive/20120714 -e dbname
-e 忽略已经被创建的数据库
不同系统配置数据库的恢复
包括Master的转储文件(gp_dump_-1_1_timestamp、gp_dump_-1_1_timestamp_post_data)以及每个Segment实例一个的转储文件(例如gp_dump_0_2_timestamp、gp_dump_1_3_timestamp、gp_dump_2_4_timestamp等等)
$ createdb database_name
$ psql database_name -f /gpdb/backups/gp_dump_-1_1_20160714
$ psql database_name -f /gpdb/backups/gp_dump_0_2_20160714
$ psql database_name -f /gpdb/backups/gp_dump_1_3_20160714
$ psql database_name -f /gpdb/backups/gp_dump_2_4_20160714
$ psql database_name -f /gpdb/backups/gp_dump_3_5_2016071
$ psql database_name -f /gpdb/backups/gp_dump_0_5_20160714_post_data
gunzip -c path_to_master_dump_directory/gp_dump_-1_1_timestamp.gz | egrep "SET search_path|SELECT pg_catalog.setval"
> schema_path_and_seq_next_val
gunzip -c /data/gpdb/master/gpseg-1/db_dumps/20150112/gp_dump_-1_1_20150112140316.gz
| egrep "SET search_path|SELECT pg_catalog.setval" > schema_path_and_seq_next_val
psql test_restore -f schema_path_and_seq_next_val
未完待续;
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。