Skip to content

GP备份与恢复

备份GP的模式 gpbackup

创建备份目录

bash
$ mkdir /path/to/backup_directory

用gpbackup命令并指定只备份public模式的数据。可以通过--include-schema参数来实现这一点

bash
$ gpbackup --dbname=your_database_name --backup-dir=/path/to/backup_directory --include-schema=schema_name
# 例如
$ gpbackup --dbname=your_database_name --backup-dir=/data/gpbackup --include-schema=public

恢复GP的模式 gpbackup

使用gprestore命令并指定要恢复的数据库和备份文件的存储位置。由于只想恢复指定模式的数据,并且新集群的节点数与旧集群可能不同,gprestore会根据新集群的配置自动调整数据分布。

bash
$ gprestore --dbname=new_database_name --backup-dir=/path/to/backup_files --schema=schema_name
# 例如
$ gprestore --dbname=new_database_name --backup-dir=/data/gpbackup/backup_files --schema=public

备份模式下的表

确定要备份的表

sql
SELECT tablename FROM pg_tables WHERE schemaname = 'schema_name';

使用pg_dump备份表

对于每个要备份的表,使用pg_dump命令来备份。pg_dump是PostgreSQL(Greenplum基于PostgreSQL)提供的非并行备份工具,适用于备份小型表或元数据。如果只备份部分表,使用pg_dump可能更为方便

bash
$ pg_dump -h hostname -p port -U username -d database -t public.table_name -F c -b -v -f /path/to/backup/table_name.dump
bash
-h hostname:数据库服务器的主机名
-p port:数据库服务器的端口号
-U username:数据库用户名
-d database:要连接的数据库名称
-t public.table_name:要备份的表,包括模式名(public)和表名
-F c:指定输出格式为自定义格式(compressed)
-b:包括大对象(如BLOB)在备份中
-v:启用详细模式,显示更多信息
-f /path/to/backup/table_name.dump:指定备份文件的存储位置和文件名

恢复模式下的表

对于每个要恢复的表,使用pg_restore命令来恢复。pg_restore是pg_dump的配套工具,用于从备份文件中恢复数据。

bash
pg_restore -h hostname -p port -U username -d database -C -t public.table_name -v /path/to/backup/table_name.dump
bash
-h hostname、-p port、-U username、-d database:与pg_dump命令中的参数相同,指定数据库服务器的连接信息
-n 指定模式,如果不指定则默认使用 public,也就是备份文件里包含了多个模式,通过此选项进行选择
-C:在恢复之前先创建数据库(如果数据库不存在)。注意,由于您已经在新集群上创建了数据库,因此这个参数可能不是必需的。如果数据库已经存在,可以省略此参数。
-t public.table_name:指定要恢复的表,包括模式名(public)和表名。注:public.table_name是指旧集群的中对应表的位置
-v:启用详细模式,显示更多信息。
/path/to/backup/table_name.dump:指定备份文件的存储位置和文件名。