一、核心实现思路 openGauss 的gs_dump工具本身不直接支持 “按 where 条件过滤分区”,但可以精准指定需要备
【摘要】 一、核心实现思路openGauss 的gs_dump工具本身不直接支持 “按 where 条件过滤分区”,但可以精准指定需要备份的分区名称,从而实现只备份 15 个目标分区的需求(这是处理分区表部分备份的官方推荐方式)。前提准备先查询出目标表的所有分区名,确认需要备份的 15 个分区名称: -- 连接数据库后执行,查询分区表的分区信息SELECT relname AS partition_n...
一、核心实现思路
openGauss 的
gs_dump工具本身不直接支持 “按 where 条件过滤分区”,但可以精准指定需要备份的分区名称,从而实现只备份 15 个目标分区的需求(这是处理分区表部分备份的官方推荐方式)。前提准备
先查询出目标表的所有分区名,确认需要备份的 15 个分区名称:
-- 连接数据库后执行,查询分区表的分区信息 SELECT relname AS partition_name FROM pg_class WHERE relparentid = (SELECT oid FROM pg_class WHERE relname = '你的表名') AND relkind = 'p';记录下需要备份的 15 个分区名(格式通常为
表名_分区名,比如order_info_p202501)。二、具体操作命令
第一个办法:单条命令指定多个分区(适合分区数量少的情况)
直接通过
-t参数指定需要备份的分区(分区名需写全称,且用双引号包裹):gs_dump -U 用户名 -d 数据库名 -h 数据库IP -p 端口号 \ -t "你的表名_分区1" -t "你的表名_分区2" ... -t "你的表名_分区15" \ -F c -f 备份文件路径/partial_backup.dmp
参数说明:
-t 分区名:指定要备份的分区(每一个分区都需要一个-t参数);-F c:备份格式为自定义格式(推荐,恢复时更灵活);-f:指定备份文件的保存路径和名称;- 其他参数:
-U(用户名)、-d(数据库名)、-h(IP)、-p(端口)根据你的实际环境填写。
第二个小办法:批量指定分区(适合分区数量多,避免命令过长)
如果 15 个分区手动写太繁琐,可以把分区名写入文本文件,通过脚本批量拼接命令:
- 创建分区名单文件(
partition_list.txt),每行一个分区名:
"你的表名_分区1" "你的表名_分区2" ... "你的表名_分区15"
- 编写 shell 脚本(
backup_partition.sh)自动拼接命令:
#!/bin/bash # 定义基础参数 USER="用户名" DB="数据库名" HOST="数据库IP" PORT="端口号" OUTPUT_FILE="partial_backup.dmp" # 读取分区名单并拼接-t参数 PARTITION_ARGS="" while read line; do PARTITION_ARGS="$PARTITION_ARGS -t $line" done < partition_list.txt # 执行备份命令 gs_dump -U $USER -d $DB -h $HOST -p $PORT $PARTITION_ARGS -F c -f $OUTPUT_FILE
- 执行脚本:
chmod +x backup_partition.sh ./backup_partition.sh
三、关键注意事项
- 分区名格式:必须使用
表名_分区名的全称(比如表名是sales,分区名是p202501,则完整分区名是sales_p202501),且建议用双引号包裹,避免大小写或特殊字符导致识别失败。 - 权限要求:执行 gs_dump 的用户需要有目标表 / 分区的
SELECT权限、USAGE权限(对表所在模式)。 - 恢复说明:备份的分区可以单独恢复,恢复时使用
gs_restore,指定-t 分区名即可:
gs_restore -U 用户名 -d 目标数据库 -h IP -p 端口 -t "你的表名_分区1" 备份文件路径/partial_backup.dmp
COPY或\copy将符合条件的数据导出为 SQL/CSV,再导入恢复(适合仅需备份数据,无需备份表结构的场景):-- 导出单个分区数据到文件 COPY (SELECT * FROM 你的表名 PARTITION (分区名)) TO '/tmp/partition_data1.csv' WITH CSV HEADER; -- 导出多个分区的合并数据(按条件) COPY (SELECT * FROM 你的表名 WHERE 分区条件列 BETWEEN '条件1' AND '条件2') TO '/tmp/filtered_data.csv' WITH CSV HEADER;
总结一下下
- gs_dump 支持通过
-t参数指定具体分区名,实现 300 个分区中仅备份 15 个的需求; - 核心是准确获取分区全称,批量备份可通过脚本简化命令编写;
- 恢复时需对应指定分区名,权限和分区名格式是操作成功的关键。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)