GBase 8a表级全量和增量备份还原功能测试gcrcman.py

本文介绍GBase 8a数据库集群自带的备份还原工具gcrcman的使用,尝试备份还原一个表。

参考 https://www.gbase8.cn/1679

gcrcman 备份还原

环境

2节点集群,8.6.2Build43版本

[gbase@862b43 gcluster_0_0]$ gcadmin
CLUSTER STATE:  ACTIVE
CLUSTER MODE:   NORMAL

=================================================================
|             GBASE COORDINATOR CLUSTER INFORMATION             |
=================================================================
|   NodeName   |     IpAddress     |gcware |gcluster |DataState |
-----------------------------------------------------------------
| coordinator1 |    10.0.2.107     | OPEN  |  OPEN   |    0     |
-----------------------------------------------------------------
| coordinator2 |    10.0.2.106     | OPEN  |  OPEN   |    0     |
-----------------------------------------------------------------
=============================================================
|              GBASE DATA CLUSTER INFORMATION               |
=============================================================
|NodeName |     IpAddress     |gnode |syncserver |DataState |
-------------------------------------------------------------
|  node1  |    10.0.2.107     | OPEN |   OPEN    |    0     |
-------------------------------------------------------------
|  node2  |    10.0.2.106     | OPEN |   OPEN    |    0     |

表和数据

1个testdb.t1表,有4行数据。

gbase> select count(*) from t1;
+----------+
| count(*) |
+----------+
|        4 |
+----------+
1 row in set (Elapsed: 00:00:00.04)

gcrcman命令介绍

GBase 8a MPP Cluster 提供专用的备份恢复工具(gcrcman),用户使用它
可以方便地对整个集群中的数据进行集群的备份和恢复。集群的备份、恢复工
具随集群的安装自动安装,该工具被安装在/opt/gcluster/server/bin 目录
下。
一次全量备份开启一个新的周期。一次增量备份则续写最后一个备份周期,
使其增加一个备份点。
备份恢复工具会对磁盘空间进行检查,如果存放备份数据的磁盘空间不足,
会报告错误信息。

参数

[gbase@localhost ~]$ gcrcman.py --help
SYNOPSIS
    gcrcman.py [options] <-d|--path BACKUP_PATH>

OPTIONS:
    -h,--help
            Print this help
    -V,--version
            Print version
    -d BACKUP_PATH,--path=BACKUP_PATH
            Specify backup path, it must be absolute path
    -e COMMAND,--execute=COMMAND
            Specify backup or recover command
    -P HOST_PASSWD,--ospassword=HOST_PASSWD
            Specify operation system user gbase's password
    -p DATABASE_PASSWD,--dbpassword=DATABASE_PASSWD
            Specify database user gbase's password
    -r PARALLEL_
<think>我们正在讨论GBase 8a数据库的分区功能。根据引用内容,分区可以提升查询性能,因为查询时只扫描相关分区,而不需要扫描整个。但是,分区也会带来维护成本,比如DDL操作的压力会增大(引用1)。引用2通过具体数据展示了分区在查询更新操作上的性能优势。引用3则展示了LINEAR HASH分区的数据分布情况。 关于分区的使用方法,GBase 8a支持多种分区类型,包括范围分区(RANGE)、列分区(LIST)、哈希分区(HASH)线性哈希分区(LINEAR HASH)。下面将分别介绍这些分区类型的使用方法。 1. **范围分区(RANGE)**:按照某个连续范围的值进行分区,例如按日期分区。 2. **列分区(LIST)**:按照某个离散值列进行分区,例如按地区代码分区。 3. **哈希分区(HASH)**:根据用户定义的达式(通常是某一列)的哈希值来分布数据。 4. **线性哈希分区(LINEAR HASH)**:与HASH类似,但使用线性二次幂算法,使得在增加或删除分区时能更高效地重新分布数据。 下面我们通过示例来说明如何创建使用分区。 ### 创建范围分区(RANGE) 假设我们有一个销售记录,按照销售日期进行范围分区: ```sql CREATE TABLE sales ( id INT, product VARCHAR(50), sale_date DATE, amount DECIMAL(10,2) ) PARTITION BY RANGE (YEAR(sale_date)) ( PARTITION p0 VALUES LESS THAN (2010), PARTITION p1 VALUES LESS THAN (2020), PARTITION p2 VALUES LESS THAN MAXVALUE ); ``` 这个将数据按照年份分区:2010年以前的数据在p0分区,2010-2019年的数据在p1分区,2020年及以后的数据在p2分区。 ### 创建列分区(LIST) 假设我们有一个地区销售,按照地区代码进行列分区: ```sql CREATE TABLE sales_region ( id INT, region_code INT, sale_date DATE, amount DECIMAL(10,2) ) PARTITION BY LIST (region_code) ( PARTITION p_east VALUES IN (1,2,3), PARTITION p_west VALUES IN (4,5,6), PARTITION p_other VALUES IN (DEFAULT) ); ``` ### 创建哈希分区(HASH) 假设我们按照用户ID进行哈希分区,分成4个分区: ```sql CREATE TABLE user_log ( user_id INT, log_time DATETIME, action VARCHAR(20) ) PARTITION BY HASH(user_id) PARTITIONS 4; ``` ### 创建线性哈希分区(LINEAR HASH) 线性哈希分区使用类似的方法,但使用不同的算法: ```sql CREATE TABLE user_log_linear ( user_id INT, log_time DATETIME, action VARCHAR(20) ) PARTITION BY LINEAR HASH(user_id) PARTITIONS 4; ``` ### 分区的管理 - **添加分区**(仅适用于RANGELIST分区): ```sql ALTER TABLE sales ADD PARTITION (PARTITION p3 VALUES LESS THAN (2030)); ``` - **删除分区**: ```sql ALTER TABLE sales DROP PARTITION p0; ``` 注意:删除分区会同时删除该分区内的所有数据。 - **合并分区**(HASHLINEAR HASH分区不支持直接删除分区,但可以通过合并分区减少分区数量): ```sql ALTER TABLE user_log COALESCE PARTITION 2; -- 将分区数量减少2个 ``` ### 查询分区数据 可以查询特定分区的数据,例如: ```sql SELECT * FROM sales PARTITION (p1); ``` ### 注意事项 1. 分区键的选择:分区键应该是经常用于查询条件的列,这样查询才能利用分区剪枝(partition pruning)提高性能。 2. 分区数量:过多的分区会导致元数据管理开销增大,DDL操作变慢(引用1)。需要根据数据量硬件资源合理设置。 3. 维护成本:分区在数据维护(如删除历史数据)时可能更方便,但分区的DDL操作(如添加列、修改列类型)会涉及所有分区,操作时间较长。 ### 性能优势 引用2中的测试明,当查询条件能够限定在少数分区时,查询性能会有显著提升。例如,跨单个分区的查询时间仅为普通的十分之一。 ### 总结 GBase 8a的分区功能通过将大分割成小分区,可以显著提高查询效率,尤其是当查询只涉及部分分区时。但同时,分区也增加了维护的复杂性。因此,在决定使用分区时,需要根据实际业务需求权衡利弊。 §§相关问题§§ 1. GBase 8a中如何选择合适的分区类型(RANGE、LIST、HASH、LINEAR HASH)? 2. 分区GBase 8a中如何管理(如添加、删除、合并分区)? 3. 分区在哪些场景下性能提升最明显? 4. 分区GBase 8a的smart index如何协同工作?</think>### GBase 8a 分区功能详解 #### 一、分区的核心价值 1. **性能优化** 分区通过**数据分块存储**实现查询加速: - 当查询条件匹配分区键时,数据库**仅扫描相关分区**而非全 - 引用案例:跨单分区查询耗时仅需普通的1/10(16秒 vs 158秒)[^2] - 支持智能数据过滤(Smart Index),0.1秒内识别需扫描的数据块[^1] 2. **管理便捷性** - 按分区快速删除历史数据(如`ALTER TABLE ... DROP PARTITION`) - 分区数据维护(备份/恢复) #### 二、分区类型与语法 GBase 8a支持四种分区方式: | 分区类型 | 适用场景 | 示例语法 | |----------------|-----------------------------------|--------------------------------------------------------------------------| | **RANGE分区** | 连续范围(日期/数值) | `PARTITION BY RANGE(YEAR(sale_date)) (PARTITION p2023 VALUES LESS THAN (2024))` | | **LIST分区** | 离散值(地区/状态码) | `PARTITION BY LIST(region) (PARTITION p_east VALUES IN (1,2,3))` | | **HASH分区** | 均匀分布数据 | `PARTITION BY HASH(employee_id) PARTITIONS 4` | | **LINEAR HASH**| 大数据量动态扩容 | `PARTITION BY LINEAR HASH(order_id) PARTITIONS 10` | > 注:LINEAR HASH采用二次幂算法,扩容时仅需迁移部分数据[^3] #### 三、操作指南(关键命令) ```sql -- 创建分区(RANGE示例) CREATE TABLE sales ( order_id INT, sale_date DATE, amount DECIMAL(10,2) ) PARTITION BY RANGE (YEAR(sale_date)) ( PARTITION p2020 VALUES LESS THAN (2021), PARTITION p2021 VALUES LESS THAN (2022), PARTITION p_max VALUES LESS THAN MAXVALUE ); -- 查询特定分区 SELECT * FROM sales PARTITION (p2021); -- 动态添加分区(RANGE/LIST适用) ALTER TABLE sales ADD PARTITION ( PARTITION p2022 VALUES LESS THAN (2023) ); -- 删除分区(同步删除数据) ALTER TABLE sales DROP PARTITION p2020; ``` #### 四、使用注意事项 1. **性能权衡** - ✔️ **优势**:条件查询性能提升5-10倍[^2] - ❌ **代价**:DDL操作耗时随分区数量线性增长(如`ALTER TABLE`需操作所有分区)[^1] 2. **设计建议** - 分区键选择**高筛选率字段**(如时间戳、地域ID) - 单分区数建议控制在**100个以内** - 避免频繁更新的字段作为分区键 3. **与Smart Index协同** - 分区仍可结合Smart Index获得**双重过滤优化** - 优先利用分区剪枝,再通过索引定位数据块[^1] #### 五、典型应用场景 1. **时间序列数据** ```sql -- 按日分区日志 PARTITION BY RANGE(TO_DAYS(log_time)) (...) ``` 2. **地理分区数据** ```sql -- 按省份分区的销售数据 PARTITION BY LIST(province_code) (...) ``` 3. **大规模数据归档** 通过`DROP PARTITION`秒删除历史分区 > **决策建议**:当单数据量超**10亿行**或查询性能显著下降时启用分区,否则优先依赖Smart Index[^1] ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值