51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

飞书监控自动备份

前言 {#前言}

考虑到各种不同的因素,容易丢失一些重要的东西,所以我一直寻求一种好一点的方法去备份数据库 和 服务器里面的文件,但是最后发现都过于麻烦, 主要是我懒

这里我的方案是 用python每天凌晨12点自动备份到腾讯COS,并且发送通知到飞书,提醒备份成功!

基础的飞书接入我就不多说了,具体请看文末参考内容

备份数据库 {#备份数据库}

|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | import os from qcloud_cos import CosConfig from qcloud_cos import CosS3Client from qcloud_cos.cos_threadpool import SimpleThreadPool import sys import logging import time import base64 import hashlib import schedule from datetime import datetime import hmac import requests import subprocess def gen_sign ( timestamp, secret ): string_to_sign = '{}\n{}' . format (timestamp, secret) hmac_code = hmac.new(string_to_sign.encode( "utf-8" ), digestmod=hashlib.sha256).digest() sign = base64.b64encode(hmac_code).decode( 'utf-8' ) return sign def send_message ( message ): current_time = datetime.now() formatted_time = current_time.strftime( "%Y-%m-%d %H:%M:%S" ) timestamp = int (time.time()) sign = gen_sign(timestamp, "密钥" ) data = { "timestamp" : timestamp, "sign" : sign, "msg_type" : "post" , "content" : { "post" : { "zh_cn" : { "title" : "数据库备份通知📢" , "content" : [ [ { "tag" : "text" , "text" : "备份结果:" + message + "\n" }, { "tag" : "text" , "text" : "备份时间:" + formatted_time } ] ] } } } } headers = { 'Content-Type' : 'application/json' } res = requests.post( "webhook" , json=data, headers=headers) def backup (): backup_command = "mysqldump -u root --password='root' umami > /test/data/umami.sql" ans = subprocess.call(backup_command, shell= True ) if ans == 0 : logging.basicConfig(level=logging.INFO, stream=sys.stdout) secret_id = '腾讯密钥' secret_key = '腾讯密钥' region = 'cos地区' token = None config = CosConfig(Region=region, SecretId=secret_id, SecretKey=secret_key, Token=token) client = CosS3Client(config) uploadDir = '上传的文件目录' bucket = 'cos桶昵称' g = os.walk(uploadDir) # 创建上传的线程池 pool = SimpleThreadPool() for path, dir_list, file_list in g: for file_name in file_list: srcKey = os.path.join(path, file_name) cosObjectKey = "test/" + file_name pool.add_task(client.upload_file, bucket, cosObjectKey, srcKey) pool.wait_completion() result = pool.get_result() send_message( "备份成功!" ) if not result[ 'success_all' ]: send_message( "备份失败!" ) else : send_message( "备份失败!" ) def job (): print ( "Job started at" , datetime.now()) backup() schedule.every().day.at( "00:00" ).do(job) if __name__ == '__main__' : while True : schedule.run_pending() time.sleep( 1 ) |

修改代码 {#修改代码}

  • sign = gen_sign(timestamp, "密钥") 这里的密钥就是飞书机器人的密钥 具体操作查看参考中的 飞书高效监控CDN状态
  • res = requests.post("webhook", json=data, headers=headers) 这里的webhook也是飞书机器人里面获取 具体操作查看参考中的 飞书高效监控CDN状态
  • backup_command = "mysqldump -u root --password='root' umami > /test/data/umami.sql" 这里需要修改的是你需要生成数据库文件的命令:mysqldump -u 用户名 --password='密码' 数据库名 > 存放的路径
  • secret_id 和 secret_key 为腾讯密钥 获取查看参考
  • region:COS存储地区 获取查看参考
  • uploadDir:本地文件需要上传的路径
  • bucket:COS存储桶的昵称
  • cosObjectKey:上传存储桶存放的位置

备份评论文件 {#备份评论文件}

|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | import os from qcloud_cos import CosConfig from qcloud_cos import CosS3Client from qcloud_cos.cos_threadpool import SimpleThreadPool import sys import logging import time import base64 import hashlib import schedule from datetime import datetime import hmac import requests def gen_sign ( timestamp, secret ): string_to_sign = '{}\n{}' . format (timestamp, secret) hmac_code = hmac.new(string_to_sign.encode( "utf-8" ), digestmod=hashlib.sha256).digest() sign = base64.b64encode(hmac_code).decode( 'utf-8' ) return sign def send_message ( message ): current_time = datetime.now() formatted_time = current_time.strftime( "%Y-%m-%d %H:%M:%S" ) timestamp = int (time.time()) sign = gen_sign(timestamp, "飞书密钥" ) data = { "timestamp" : timestamp, "sign" : sign, "msg_type" : "post" , "content" : { "post" : { "zh_cn" : { "title" : "评论备份通知📢" , "content" : [ [ { "tag" : "text" , "text" : "备份结果:" + message + "\n" }, { "tag" : "text" , "text" : "备份时间:" + formatted_time } ] ] } } } } headers = { 'Content-Type' : 'application/json' } res = requests.post( "webhook" , json=data, headers=headers) def backup (): logging.basicConfig(level=logging.INFO, stream=sys.stdout) secret_id = '腾讯密钥' secret_key = '腾讯密钥' region = 'cos地区' token = None config = CosConfig(Region=region, SecretId=secret_id, SecretKey=secret_key, Token=token) client = CosS3Client(config) uploadDir = '本地上传的路径' bucket = 'COS桶昵称' g = os.walk(uploadDir) pool = SimpleThreadPool() for path, dir_list, file_list in g: for file_name in file_list: srcKey = os.path.join(path, file_name) cosObjectKey = "test/" + file_name pool.add_task(client.upload_file, bucket, cosObjectKey, srcKey) pool.wait_completion() result = pool.get_result() send_message( "备份成功!" ) if not result[ 'success_all' ]: send_message( "备份失败!" ) def job (): print ( "Job started at" , datetime.now()) backup() schedule.every().day.at( "00:00" ).do(job) if __name__ == '__main__' : while True : schedule.run_pending() time.sleep( 1 ) |

修改代码 {#修改代码-2}

  • sign = gen_sign(timestamp, "密钥") 这里的密钥就是飞书机器人的密钥 具体操作查看参考中的 飞书高效监控CDN状态
  • res = requests.post("webhook", json=data, headers=headers) 这里的webhook也是飞书机器人里面获取 具体操作查看参考中的 飞书高效监控CDN状态
  • secret_id 和 secret_key 为腾讯密钥 获取查看参考
  • region:COS存储地区 获取查看参考
  • uploadDir:本地文件需要上传的路径
  • bucket:COS存储桶的昵称
  • cosObjectKey:上传存储桶存放的位置

效果 {#效果}

2da6d307-fecc-45b9-b8e7-7a9cff8cc650

01883dbb-fe9f-4646-bef1-355c58c1543e

建议 {#建议}

这里我是使用了两个机器人通知, ++可以改成使用一个机器人通知,然后把两个代码进行合并++ ,因为代码都差不多,没必要去分开来部署啥的,我是因为两个项目写的时间相差太远,所以直接用两个了。

参考 {#参考}

腾讯密钥获取

COS地区简称

腾讯云COS开发文档

飞书高效监控CDN状态

赞(0)
未经允许不得转载:工具盒子 » 飞书监控自动备份