Python自定义阿里云RDS备份策略

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:

一、背景

由于越来越多的客户对应数据安全的重视,目前阿里云RDS提供了备份策略,但是备份策略周期为每天的某一个时间,在日常云运维工作中,有客户提出需要每天在不同的时间节点多备份几次,此时web界面就不能满足此类在一天内多次备份的需求,但是想到了在阿里云web控制台通过手动点击创建备份,是可以在点击后触发创建备份的任务,想到可以利用api来实现,同时提交工单咨询了下,果然此类需求是需要api来做,故写了个调用python实例配合linux系统的crond服务来完成。

二、代码

github地址

#!/bin/env python
# -*- coding:utf-8 -*-
# _author:kaliarch

from aliyunsdkcore import client
from aliyunsdkrds.request.v20140815 import CreateBackupRequest
import time
import os
import logging

class rdsOper():
    def __init__(self,logger):
        self.clentoper = client.AcsClient('LTAIhfXlcjyln****','Gwf****4K2ELmt76184o****gRfAso','cn-shanghai')
        self.logger = logger
        self.logger.info("------------------------start exec rds backup API log-------------")
    def backup_instance(self):
        # 设置参数
        request = CreateBackupRequest.CreateBackupRequest()
        request.set_accept_format('json')
        request.add_query_param('DBInstanceId', 'rm-uf6xv3**1x842y61y')

        #如果为单库备份,可以添加DBName
        # request.add_query_param('DBName', 'mydb')

        #BackupMethod为备份方式:Logical:逻辑备份,Physical:物理备份
        request.add_query_param('BackupMethod', 'Physical')
        #BackupType为备份类型: Auto:自动计算是全量备份还是增量备份;FullBackup:全量备份。默认值为Auto。
        request.add_query_param('BackupType', 'Auto')

        response = self.clentoper.do_action_with_exception(request)
        self.logger.info("rdsbackup mission submission successful!")
        self.logger.info(response)
        print(response)


class Rds_Log:
    def __init__(self,filename):
        self.filename = filename
    def createDir(self):
        _LOGDIR = os.path.join(os.path.dirname(__file__), 'rdsbackuplog')
        print(_LOGDIR)
        _TIME = time.strftime('%Y-%m-%d', time.gmtime()) + '-'
        _LOGNAME = _TIME + self.filename
        print(_LOGNAME)
        LOGFILENAME = os.path.join(_LOGDIR, _LOGNAME)
        print(LOGFILENAME)
        if not os.path.exists(_LOGDIR):
            os.mkdir(_LOGDIR)
        return LOGFILENAME

    def createlogger(self,logfilename):
        logger= logging.getLogger()
        logger.setLevel(logging.INFO)
        handler = logging.FileHandler(logfilename)
        handler.setLevel(logging.INFO)
        formater = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
        handler.setFormatter(formater)
        logger.addHandler(handler)
        return logger

if __name__ == "__main__":
    glploger = Rds_Log('rdsbackup.log')
    logfilename = glploger.createDir()
    logger = glploger.createlogger(logfilename)

    app = rdsOper(logger)
    app.backup_instance()

三、配合定时任务

在随便服务器上传代码安装好相关python的sdk后
制作定时任务

查看日志

查看后天有备份任务已经提交完成

举一反三,类似的可以参考阿里云rds的API完成其他需求,如何客户对应rds的备份频率很高的话,可以开通灾备实例,来完成异地的实时备份,如果横向扩展读写操作,可以开通多个只读实例来分摊数据库压力。
https://help.aliyun.com/document_detail/26272.html?spm=5176.doc26228.6.821.Ux0gk1

目前对应数据库的备份,阿里云新上线了DBS参考链接

  • 支持ECS自建数据库的异地备份
  • 支持RDS数据库的异地备份
  • 支持本地IDC自建数据库的异地备份
  • 支持公网数据库的异地备份(还包含部署在AWS、Azure、腾讯云等其他云计算厂商的数据库)

此产品不仅支持众多场景的数据库备份,将其存储在阿里云的OSS,并且可以设置加密存储,上保障了备份数据的安全和可靠性,同时可以设置备份对象精细到表级别并且支持增量备份,同时可以配置备份的生命周期,可随时利用备份数据简单几部就可以进行数据恢复,测试了下,发现很好用,但是目前查看官网没有对应API,对于每天需要超过两次以上的备份发现只能创建多个备份任务。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
1月前
|
缓存 关系型数据库 MySQL
MySQL执行计划选择策略:揭秘查询优化的艺术
【10月更文挑战第15天】 在数据库性能优化中,选择最优的执行计划是提升查询效率的关键。MySQL作为一个强大的关系型数据库管理系统,提供了复杂的查询优化器来生成执行计划。本文将深入探讨如何选择合适的执行计划,以及为什么某些计划更优。
63 2
|
2月前
|
数据可视化 数据处理 Python
如何使用Python实现一个基于均线的交易策略
【10月更文挑战第9天】本文介绍了如何使用Python实现一个基于均线的交易策略。主要步骤包括导入所需库(如`pandas`、`numpy`和`matplotlib`),加载股票或期货的历史数据,计算均线和其他指标,实现交易策略逻辑,以及可视化交易结果。示例代码展示了如何根据均线交叉点进行开仓、止损和止盈操作,并提供了注意事项,如数据来源、交易成本和风险管理。
70 7
|
2月前
|
存储 关系型数据库 数据库
在Python中优雅地打开和操作RDS
在Python中优雅地打开和操作RDS
|
2月前
|
存储 自然语言处理 关系型数据库
MySQL 自定义变量并声明字符编码
MySQL 自定义变量并声明字符编码
101 1
|
16天前
|
存储 JSON API
如何自定义Python环境变量?
如何自定义Python环境变量?
34 3
|
18天前
|
监控 关系型数据库 MySQL
MySQL自增ID耗尽应对策略:技术解决方案全解析
在数据库管理中,MySQL的自增ID(AUTO_INCREMENT)属性为表中的每一行提供了一个唯一的标识符。然而,当自增ID达到其最大值时,如何处理这一情况成为了数据库管理员和开发者必须面对的问题。本文将探讨MySQL自增ID耗尽的原因、影响以及有效的应对策略。
57 3
|
20天前
|
算法 数据处理 开发者
超越传统:Python二分查找的变种策略,让搜索效率再上新台阶!
本文介绍了二分查找及其几种Python实现的变种策略,包括经典二分查找、查找第一个等于给定值的元素、查找最后一个等于给定值的元素以及旋转有序数组的搜索。通过调整搜索条件和边界处理,这些变种策略能够适应更复杂的搜索场景,提升搜索效率和应用灵活性。
30 5
|
19天前
|
监控 关系型数据库 MySQL
Linux环境下MySQL数据库自动定时备份策略
在Linux环境下,MySQL数据库的自动定时备份是确保数据安全和可靠性的重要措施。通过设置定时任务,我们可以每天自动执行数据库备份,从而减少人为错误和提高数据恢复的效率。本文将详细介绍如何在Linux下实现MySQL数据库的自动定时备份。
30 3
|
20天前
|
Python
不容错过!Python中图的精妙表示与高效遍历策略,提升你的编程艺术感
本文介绍了Python中图的表示方法及遍历策略。图可通过邻接表或邻接矩阵表示,前者节省空间适合稀疏图,后者便于检查连接但占用更多空间。文章详细展示了邻接表和邻接矩阵的实现,并讲解了深度优先搜索(DFS)和广度优先搜索(BFS)的遍历方法,帮助读者掌握图的基本操作和应用技巧。
34 4
|
18天前
|
存储 监控 关系型数据库
MySQL自增ID耗尽解决方案:应对策略与实践技巧
在MySQL数据库中,自增ID(AUTO_INCREMENT)是一种特殊的属性,用于自动为新插入的行生成唯一的标识符。然而,当自增ID达到其最大值时,会发生什么?又该如何解决?本文将探讨MySQL自增ID耗尽的问题,并提供一些实用的解决方案。
26 1