备份处理和锁

    这些步骤描述了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现在会运行该脚本。

    上级主题: 备份和恢复数据库