感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的:
① 2000多本Python电子书(主流和经典的书籍应该都有了)
② Python标准库资料(最全中文版)
③ 项目源码(四五十个有趣且经典的练手项目及源码)
④ Python基础入门、爬虫、web开发、大数据分析方面的视频(适合小白学习)
⑤ Python学习路线图(告别不入流的学习)
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
全量备份每次备份都需要复制全部数据库的文件,备份时间和存储空间的开销都比较大。增量备份只备份自上次备份以来的数据改变,可以减少备份的开销。
openGauss增量备份工具为gs_probackup。gs_probackup支持全量备份、增量备份、对备份元数据进行管理、设置备份的留存策略、合并增量备份、删除过期备份,并且可备份外部目录的内容,如脚本文件、配置文件、日志文件、dump文件等。
增量备份需要数据库服务器端的配合,在conf文件中配置参数enable_cbm_tracking = on,启动数据库服务器对脏页数据修改的跟踪。
增量备份的主要逻辑在gs_probackup工具中实现,一些备份原理和前面介绍的全量物理备份相似,下面主要介绍gs_probackup工具的代码实现逻辑。源代码在src\bin\pg_probackup目录下,gs_probackup是一个独立的二进制工具,有自己的主函数,主函数在pg_probackup.cpp文件中。主函数是增量备份处理的一个框架,开始时调用pgBackupInit初始化当前备份的元数据信息,然后调用init_config初始化实例的备份配置信息,解析备份子命令和命令行参数,根据子命令调用子命令的处理函数进行处理。
10.2.1 gs_probackup子命令
gs_probackup支持的功能、子命令和处理函数如下。
(1) 打印gs_probackup版本,代码如下:
gs_probackup -V|--version
gs_probackup version
这个子命令没有处理函数,直接打印显示当前版本号。
(2) 显示gs_probackup命令的帮助信息。如果指定了gs_probackup的子命令,则显示可用于此子命令的参数的详细信息。代码如下:
gs_probackup -?|--help
gs_probackup help [command]
处理函数为help_command和help_pg_probackup。
(3) 初始化备份路径backup-path中的备份目录,该目录将存储备份的内容。如果备份路径backup-path已存在,则backup-path必须为空目录。代码如下:
gs_probackup init -B backup-path [--help]
处理函数为do_init。
(4) 在备份路径backup-path内初始化一个新的备份实例,并生成pg_probackup.conf配置文件,该文件保存了指定数据目录pgdata-path的gs_probackup设置。代码如下:
gs_probackup add-instance -B backup-path -D pgdata-path --instance=instance_name
[-E external-directories-paths]
[remote_options]
[--help]
处理函数为do_add_instance。
(5) 在备份路径backup-path内删除指定实例相关的备份内容,代码如下:
gs_probackup del-instance -B backup-path --instance=instance_name
[--help]
处理函数为do_delete_instance。
(6) 将指定的连接、压缩、日志等相关设置添加到pg_probackup.conf配置文件中,或修改已设置的值,不要手动编辑pg_probackup.conf配置文件。代码如下:
gs_probackup set-config -B backup-path --instance=instance_name
[-D pgdata-path] [-E external-directories-paths] [--restore-command=cmdline] [--archive-timeout=timeout]
[--retention-redundancy=retention-redundancy] [--retention-window=retention-window] [--wal-depth=wal-depth]
[--compress-algorithm=compress-algorithm] [--compress-level=compress-level]
[-d dbname] [-h hostname] [-p port] [-U username]
[logging_options] [remote_options]
[--help]
处理函数为do_set_config。
(7) 将备份相关设置添加到backup.control配置文件中,或修改已设置的值。代码如下:
gs_probackup set-backup -B backup-path --instance=instance_name -i backup-id
[--note=text] [pinning_options]
[--help]
处理函数为do_set_backup。
(8) 显示位于备份目录中的pg_probackup.conf配置文件的内容。可以通过指定–format=json选项,以json格式显示。默认情况下,显示为纯文本格式,代码如下:
gs_probackup show-config -B backup-path --instance=instance_name
[--format=plain|json]
[--help]
处理函数为do_show_config。
(9) 显示备份目录的内容。如果指定了instance_name和backup_id,则显示该备份的详细信息。可以通过指定–format=json选项,以json格式显示。默认情况下,备份目录的内容显示为纯文本格式,代码如下:
gs_probackup show -B backup-path
[--instance=instance_name [-i backup-id]] [--archive] [--format=plain|json]
[--help]
处理函数为do_show。
(10) 创建指定实例的备份,代码如下:
gs_probackup backup -B backup-path --instance=instance_name -b backup-mode
[-D pgdata-path] [-C] [-S slot-name] [--temp-slot] [--backup-pg-log] [-j threads_num] [--progress]
[--no-validate] [--skip-block-validation] [-E external-directories-paths] [--no-sync] [--note=text]
[--archive-timeout=timeout]
[logging_options] [retention_options] [compression_options]
[connection_options] [remote_options] [pinning_options]
[--help]
处理函数为do_backup。
(11) 从备份目录backup-path中的备份副本恢复指定实例。如果指定了恢复目标选项,gs_probackup将查找最近的备份并将其还原到指定的恢复目标。否则,使用最近一次备份,代码如下:
gs_probackup restore -B backup-path --instance=instance_name
[-D pgdata-path] [-i backup_id] [-j threads_num] [--progress] [--force] [--no-sync] [--no-validate] [--skip-block-validation]
[--external-mapping=OLDDIR=NEWDIR] [-T OLDDIR=NEWDIR] [--skip-external-dirs] [-I incremental_mode]
[recovery_options] [remote_options] [logging_options]
[--help]
处理函数为do_restore_or_validate。
(12) 将指定的增量备份与其父完全备份之间的所有增量备份合并到父完全备份。父完全备份将接收所有合并的数据,而已合并的增量备份将作为冗余被删除。代码如下:
gs_probackup merge -B backup-path --instance=instance_name -i backup_id
[-j threads_num] [--progress] [logging_options]
[--help]
处理函数为do_merge。
(13) 删除指定备份,或删除不满足当前保留策略的备份,代码如下:
gs_probackup delete -B backup-path --instance=instance_name
[-i backup-id | --delete-expired | --merge-expired | --status=backup_status]
[--delete-wal] [-j threads_num] [--progress]
[--retention-redundancy=retention-redundancy] [--retention-window=retention-window]
[--wal-depth=wal-depth] [--dry-run]
[logging_options]
[--help]
处理函数为do_delete,do_retention和do_delete_status。
(14) 验证恢复数据库所需的所有文件是否存在且未损坏。如果未指定instance_name,gs_probackup将验证备份目录中的所有可用备份。如果指定instance_name而不指定任何附加选项,gs_probackup将验证此备份实例的所有可用备份。如果指定了instance_name并且指定backup-id或恢复目标相关选项,gs_probackup将检查是否可以使用这些选项恢复数据库。代码如下:
gs_probackup validate -B backup-path
[--instance=instance_name] [-i backup-id]
[-j threads_num] [--progress] [--skip-block-validation]
[--recovery-target-time=time | --recovery-target-xid=xid | --recovery-target-lsn=lsn | --recovery-target-name=target-name]
[--recovery-target-inclusive=boolean] [--recovery-target-timeline=timeline]
[logging_options]
[--help]
处理函数为do_validate_all和do_restore_or_validate。
做了那么多年开发,自学了很多门编程语言,我很明白学习资源对于学一门新语言的重要性,这些年也收藏了不少的Python干货,对我来说这些东西确实已经用不到了,但对于准备自学Python的人来说,或许它就是一个宝藏,可以给你省去很多的时间和精力。
别在网上瞎学了,我最近也做了一些资源的更新,只要你是我的粉丝,这期福利你都可拿走。
我先来介绍一下这些东西怎么用,文末抱走。
(1)Python所有方向的学习路线(新版)
这是我花了几天的时间去把Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
最近我才对这些路线做了一下新的更新,知识体系更全面了。
(2)Python学习视频
包含了Python入门、爬虫、数据分析和web开发的学习视频,总共100多个,虽然没有那么全面,但是对于入门来说是没问题的,学完这些之后,你可以按照我上面的学习路线去网上找其他的知识资源进行进阶。
(3)100多个练手项目
我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了,只是里面的项目比较多,水平也是参差不齐,大家可以挑自己能做的项目去练练。
(4)200多本电子书
这些年我也收藏了很多电子书,大概200多本,有时候带实体书不方便的话,我就会去打开电子书看看,书籍可不一定比视频教程差,尤其是权威的技术书籍。
基本上主流的和经典的都有,这里我就不放图了,版权问题,个人看看是没有问题的。
(5)Python知识点汇总
知识点汇总有点像学习路线,但与学习路线不同的点就在于,知识点汇总更为细致,里面包含了对具体知识点的简单说明,而我们的学习路线则更为抽象和简单,只是为了方便大家只是某个领域你应该学习哪些技术栈。
(6)其他资料
还有其他的一些东西,比如说我自己出的Python入门图文类教程,没有电脑的时候用手机也可以学习知识,学会了理论之后再去敲代码实践验证,还有Python中文版的库资料、MySQL和HTML标签大全等等,这些都是可以送给粉丝们的东西。
这些都不是什么非常值钱的东西,但对于没有资源或者资源不是很好的学习者来说确实很不错,你要是用得到的话都可以直接抱走,关注过我的人都知道,这些都是可以拿到的。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!