之前在轻量云进行快照备份都是手工处理的,一般是升级系统或者版本发布的时候进行备份。但是这个备份机制有个比较麻烦的问题在于快照并不是非常及时。例如用户上传的头像文件,这些是存在服务器上的,手工备份就有点麻烦。
前几天看到杜郎的《腾讯云轻量应用服务器初体验》里面提到了自动备份脚本,体验了一下,能用,但是备份策略有点过于简单。轻量云一共可以创建两个快照,但是至于保留策略,提供了两种,一个是保留旧的,一个是保留新的。
代码的处理逻辑也很简单粗暴:
# 删除之前较早一个备份,就是列表里的第二个,状态需要正常才能删除 SnapshotState = (get_rest['SnapshotSet'][Instanceidx]['SnapshotState']) if SnapshotState == 'NORMAL': SnapshotId = (get_rest['SnapshotSet'][Instanceidx]['SnapshotId']) DeleteSnapshots_re = DeleteSnapshots(SecretId, SecretKey, SnapshotId, region) if DeleteSnapshots_re != False: # 删除之前一个后,再进行备份 print('已经删除完成快照ID为{0}的快照,现在准备开始备份实例'.format(SnapshotId)) CreateInstanceSnapshot(SecretId, SecretKey, region, InstanceIds)
这个参数Instanceidx 本质上其实是个数组索引,所以要么删除第一个,要么删除第二个。如果我想长期保留一个快照该怎么办?答案是,没办法。哈哈哈。
先来说下这个东西怎么配置吧。
1.新建函数服务,选择从头开始,输入函数你改成,运行环境选 python 2.7
2. 事件函数,选择本地上传zip 包,文件下载地址:https://github.com/obaby/TencentLighthouseAutoSnapshot/blob/main/Lighthouse-Auto-Snapshot.zip
3.配置所需参数除了图上的,还需要添加KeepPolicy 1 或者 2
参数说明:
:param SecretId: str 腾讯云账号SecretId :param SecretKey: str 腾讯云账号SecretKey 从这个地址创建或者查看:https://console.cloud.tencent.com/cam/capi
Regions_InstanceIds 为区域:实例 id 拼接,通过冒号拼接 实例地域 "ap-beijing", "ap-chengdu", "ap-guangzhou", "ap-hongkong", "ap-nanjing", "ap-shanghai", "ap-singapore", "ap-tokyo", "eu-moscow", "na-siliconvalley" eg: ap-shanghai:guimiquan 将 guimiquan 替换为你的轻量云实例 id,实例与所在区域需要一致
:param Instanceidx: int 0:删除最新的保留最早的备份,这样可以有一个固定备份,1:删除最早 :param KeepPolicy: int 快照保留策略 1:默认删除逻辑 根据上述删除策略进行快照删除 2:保留特定扩展名的快照(如果快照名称包含 keep 或者 保留 将不会删除该快照),如果都包含按照上述删除策略删除快照
4. 触发器,每天零点,或者自定义
5.测试
6. 备份效果
为了满足自己的要求,增加了一项功能,也就是添加了一个KeepPolicy参数,如果快照名称包含 keep 或者 保留 两个说明,那么会删除其他的快照,如果所有的快照都包含这个标记,那么会根据删除策略删除较久或者较新的快照。在这个机制下就可以自己定义要长期保留的快照了。
代码实现(未做优化,简单粗暴型):
def main(SecretId, SecretKey, region, InstanceIds, Instanceidx=1, KeepPolicy=2): """ GOGO :param SecretId: str 腾讯云账号SecretId :param SecretKey: str 腾讯云账号SecretKey :param region: str 实例地域 :param InstanceIds: str 实例ID param Instanceidx: int 0:删除最新的保留最早的备份,这样可以有一个固定备份,1:删除最早 """ get_rest = get_info(SecretId, SecretKey, region, InstanceIds) if get_rest != False: TotalCount = get_rest['TotalCount'] # 快照数 if TotalCount < 2: # 直接备份 CreateInstanceSnapshot(SecretId, SecretKey, region, InstanceIds) elif TotalCount == 2: if KeepPolicy ==1: # 删除之前较早一个备份,就是列表里的第二个,状态需要正常才能删除 SnapshotState = (get_rest['SnapshotSet'][Instanceidx]['SnapshotState']) if SnapshotState == 'NORMAL': SnapshotId = (get_rest['SnapshotSet'][Instanceidx]['SnapshotId']) DeleteSnapshots_re = DeleteSnapshots(SecretId, SecretKey, SnapshotId, region) if DeleteSnapshots_re != False: # 删除之前一个后,再进行备份 print('已经删除完成快照ID为{0}的快照,现在准备开始备份实例'.format(SnapshotId)) CreateInstanceSnapshot(SecretId, SecretKey, region, InstanceIds) else: # 使用其他保留策略 备份名称中包含 keep 或者 保留 字样的快照保留 如果都保留,按照 0 1 策略删除 snapshots = get_rest['SnapshotSet'] snapshot_id = None for s in snapshots: if 'keep' in s['SnapshotName'] or u'保留' in s['SnapshotName']: continue else: snapshot_id = s['SnapshotId'] if snapshot_id is not None: print('准备删除快照ID为{0}的快照'.format(snapshot_id)) DeleteSnapshots_re = DeleteSnapshots(SecretId, SecretKey, snapshot_id, region) if DeleteSnapshots_re != False: # 删除之前一个后,再进行备份 print('已经删除完成快照ID为{0}的快照,现在准备开始备份实例'.format(snapshot_id)) CreateInstanceSnapshot(SecretId, SecretKey, region, InstanceIds) else: print('多个快照都被设置为长期保存,根据删除策略进行快照删除') SnapshotState = (get_rest['SnapshotSet'][Instanceidx]['SnapshotState']) if SnapshotState == 'NORMAL': SnapshotId = (get_rest['SnapshotSet'][Instanceidx]['SnapshotId']) DeleteSnapshots_re = DeleteSnapshots(SecretId, SecretKey, SnapshotId, region) if DeleteSnapshots_re != False: # 删除之前一个后,再进行备份 print('已经删除完成快照ID为{0}的快照,现在准备开始备份实例'.format(SnapshotId)) CreateInstanceSnapshot(SecretId, SecretKey, region, InstanceIds) else: print('当前快照数量存在问题,请登录腾讯云后台检查并删除多余的快照后操作') time.sleep(5) exit()
项目开源地址:
https://github.com/obaby/TencentLighthouseAutoSnapshot
22 comments
只用过阿里云的轻云服务器,快照备份从来没用过,只会宝塔保存数据
没用过宝塔,只用过快照~~
快照更科学直接~~不过现在似乎要收费了,阿里云的
阿里的一直是收费的 不过好在价格还ok 主要是存储费用
就是棒
有技术就是不一样,我都是用宝塔或者1Panel备份,磁盘和第三方同时备份存储。
简单改改,满足自己的需求。嘎嘎
不错不错,这个可以借鉴一下
备份一直用shell命令批处理,本地服务器就这点好,速度快!
宝塔的插件比较多,嵌入对接主流的存储,更适合新手,就像我这种,看不懂太深的文章,只能仔细观赏每张图。
没用过面板,还是各种命令行以及工具更合适
系统的备份都可以代码自动化做的么,我一般是手动点创建快照的
这个就是用来干这个的。
看到了,是个开源的方案,厂商都开放了一些接口了呀,进步了
是的,基于开源代码改了一下
灵妹妹勤耕不辍
瞎折腾而已
别提备份了😭我不是刚换了域名和服务器吗?我只备份了主站的源码跟数据库,最近又搞了台电脑,我之前的博客有各种解决问题,现在之前服务器到期了,想要数据又不想续费😔
续一周
最低也是一个月
如果有必要就再续点,没必要就自己再折腾。
还是搬历史数据更方便吧