备份处理和锁
这些步骤描述了gpcrondump转储数据库所遵循的过程,包括在锁被放置前、锁持有期间以及锁被移除后会发生什么。
如果指定了多于一个数据库,会按顺序为每一个数据库执行这一过程。
- gpcrondump解析命令行参数并且验证选项和参数是否被正确地指定。
- 如果指定了下列任一过滤器选项,gpcrondump会准备过滤器来决定要备份的表集合。否则,所有的表都会被包括在备份中。
- -s schema_name – 包括由指定方案限定的所有表。
- -S schema_name – 排除由指定方案限定的所有表。
- --schema-file=filename – 将filename中列出的方案限定的所有的表包括在内。
- --exclude-schema-file=filename – 将filename中列出的方案限定的表排除在外。
- -t schema.table_name – 转储指定的表。
- -T schema.table_name – 排除指定的表。
- --table-file=filename – 转储filename中指定的表。
- gpcrondump验证备份目标:
- 验证数据库存在。
- 验证要转储的指定表或方案存在。
- 验证每个Segment的主Segment已启动。
- 验证备份目录存在且对于Master和每个Segment可写。
- 验证有足够的磁盘空间可用于备份每个Segment。注意有多于一个Segment会被备份在同一个磁盘卷上,这种磁盘空间检查不能确保对所有的Segment都有可用的空间。
-
gpcrondump开启一个线程来观察一个锁文件(dump_dir/gp_lockfile_timestamp)出现,它标志着Segment上的并行备份完成。
gpcrondump用一个ACCESS SHARE锁锁住要被备份的表。
- ALTER TABLE
- DROP TABLE
- REINDEX
- TRUNCATE
- VACUUM FULL
为Master和Segment创建和分派线程来执行数据库转储。
- 当这些线程在所有需要的表上得到了所要求的ACCESS SHARED锁后,dump_dir/gp_lockfile_timestamp锁文件会被创建,它标志gpcrondump可以释放pg_class系统表上的EXCLUSIVE锁,这时表还在被备份中。
- gpcrondump对每个主Segment检查状态文件来发现任何需要报告的错误。如果一次转储失败并且指定了-r标志,备份会被回滚。
- 目标表上的ACCESS SHARE锁会被释放。
- 如果备份成功且用-R选项指定了一个转储后脚本,gpcrondump现在会运行该脚本。
上级主题: 备份和恢复数据库