备份整个VC或特定数据库时,为什么必须提供table.list文件?这个文件的内容格式是什么?
需要首先澄清一个关键点:备份整个VC(虚拟集群)或特定数据库时,通常不需要提供 table.list 文件。table.list 文件是专门用于“批量表级备份”场景的。
下面我将详细解释 table.list 文件的用途、格式,并澄清不同备份级别的命令差异。
一、何时需要 table.list 文件?
table.list 文件仅在执行 backup tables 命令进行批量表级备份时是必需的。对于其他级别的备份,命令格式不同,无需此文件。
| 备份级别 | 命令格式(gcrcman工具内)
| 是否需要 table.list | 文档依据 |
|---|---|---|---|
集群级备份
| backup level <0|1> | 不需要 | 支持集群级、库级、表级的全量备份和增量备份
|
| 数据库级备份 | backup database [vcname.]<dbname> level <0|1> | 不需要 | 同上 |
| 单表备份 | backup table [vcname.]<dbname.tabname> level <0|1> | 不需要 | 同上 |
| 批量表备份 | backup tables <file_path> level <0|1> | 必须提供 | 创建/opt/gbase/table.list文件...1全量备份:
|
结论:如果您要备份整个VC,应使用集群级备份命令;要备份某个数据库的所有表,应使用数据库级备份命令。只有当您需要选择性地备份一批来自不同数据库甚至不同VC的表时,才需要使用 backup tables 命令并准备 table.list 文件。
二、为什么批量表备份必须提供 table.list 文件?
这是由 gcrcman 备份工具的设计和批量操作的特性决定的:
- 明确备份范围:与备份整个库或集群不同,批量表备份没有天然的边界(如数据库名)。
table.list文件明确指定了本次备份任务包含的所有表,避免了歧义和误操作。 - 支持跨库、跨VC操作:
table.list中的表名可以来自不同的数据库和不同的虚拟集群(VC)。这是backup database命令无法实现的灵活功能。 - 便于脚本化与自动化:将需要备份的表列表维护在一个文件中,便于版本管理、修改和重复执行,适合运维自动化。
- 保证原子性与一致性:一次
backup tables命令会作为一个完整的备份任务执行,table.list定义了该任务的完整数据集,有助于保障备份数据的时间点一致性。
三、table.list 文件的内容格式
格式非常严格,必须遵循以下规范:
- 每行一个表:文件中的每一行指定一个需要备份的完整表名。
- 完整表名格式:
[vcname.]dbname.tabnamevcname:表所属的虚拟集群名。如果表在默认VC或当前操作的VC中,此项可以省略。dbname:表所属的数据库名。tabname:具体的表名。- 各部分之间用英文句点
.分隔。
示例内容:
# 这是 table.list 文件的内容示例 vc000001.test.t1 vc000001.test.t2 vc000001.test.t3 sales.customer_order # 假设在默认VC中,省略了vcname hr.employee_salary
四、完整操作示例
假设您需要备份 vc1 中 test 库的 t1, t2, t3 这三张表,操作步骤如下:
创建
table.list文件:[gbase@manager-node ~]$ vi /opt/gbase/backup/table.list # 输入以下内容 vc1.test.t1 vc1.test.t2 vc1.test.t3进入备份工具并执行批量备份:
[gbase@manager-node ~]$ gcrcman.py -d /opt/gbase/backup -P gbase -p your_password gcrcman> backup tables /opt/gbase/backup/table.list level 0-d:指定各节点统一的备份目录。backup tables ... level 0:执行全量备份。
五、重要注意事项
文件路径:
table.list文件需要存放在运行gcrcman命令的管理节点上,且该路径对执行用户(如gbase)可读。- 表名验证:如果列表中的表不存在或表名格式错误,备份任务会报错。
- 与恢复对应:使用此文件备份后,恢复时也需要使用对应的备份集,不能直接用此文件进行恢复。恢复命令是
recover tables ...。 生成列表:您可以通过查询系统表
information_schema.tables来生成这个列表,例如:-- 将查询结果导出到文件 SELECT CONCAT(table_vc, '.', table_schema, '.', table_name) FROM information_schema.tables WHERE table_schema IN ('test', 'sales') INTO OUTFILE '/tmp/table.list' FIELDS TERMINATED BY '' LINES TERMINATED BY '\n';
总结:table.list 文件是GBase 8a中执行灵活、跨库的批量表备份的输入清单。它的核心价值在于提供了备份对象的精确控制。对于常规的整库或整集群备份,请使用更简单的 backup database 或 backup level 命令。理解这一点,能帮助您根据实际场景选择最高效的备份策略。
评论
热门帖子
- 12025-12-01浏览数:182104
- 22023-05-09浏览数:24359
- 42023-09-25浏览数:17569
- 52020-05-11浏览数:16610