veops / cmdb

CMDB: configuration and management of IT resources
https://cmdb.veops.cn
GNU Affero General Public License v3.0
1.36k stars 355 forks source link

[help wanted]: 提供一个cmdb 的备份方法,api和mysqldump #545

Open fxkjnj opened 3 weeks ago

fxkjnj commented 3 weeks ago

Contact Details

974907350@qq.com

What is your question?

背景:

运维部门需要把资产信息维护在CMDB中,除此外还有研发的同学需要使用,为了保障CMDB的可用性,需要对CMDB进行备份。

备份方法:

使用Python API备份

官网参考示例: https://veops.cn/docs/docs/cmdb/cmdb_api#python%E8%B0%83%E7%94%A8%E6%A0%B7%E4%BE%8B

[root@localhost coscli]# vim get-cl.py 

import hashlib
import requests
from urllib.parse import urlparse

# API 的基础 URL
URL = "https://cmdb.srebro.cn/api/v0.1/ci/s"
# 认证的 KEY 和 SECRET
KEY = "xxxxx"
SECRET = "XXXXXXX"

# 根据路径和参数构建 API Key 的函数
def build_api_key(path, params):
    # 排序并连接参数值
    values = "".join([str(params[k]) for k in sorted(params.keys())
                      if params[k] is not None and not k.startswith('_')]) if params else ""
    # 加密前的原始字符串
    _secret = "".join([path, SECRET, values]).encode("utf-8")
    # 使用 sha1 加密生成 _secret 参数
    params["_secret"] = hashlib.sha1(_secret).hexdigest()
    # 添加 API KEY
    params["_key"] = KEY
    return params

# 获取配置项信息的函数
def get_ci(payload):
    # 构建 API key,准备请求参数
    payload = build_api_key(urlparse(URL).path, payload)
    # 发起 GET 请求并获取结果
    response = requests.get(URL, params=payload)
    # 将结果解析为 JSON
    return response.json()

# 特定查询参数
payload = {
    "q": "_type:45,-_type:44,-_type:54,-_type:52,-_type:50,-_type:49,-_type:47,-_type:43,-_type:41,-_type:40,-_type:33,-_type:32",
    "count": "1000000000000"
}

# 调用 get_ci 函数,传入查询参数
result = get_ci(payload)

# 打印获得的 JSON 数据
print(result)

导出的数据格式:

定时任务,定期备份

#每天夜里1点备份CMDB json数据
0 1 * * * /usr/local/bin/python3.8 /home/application/coscli/get-cl.py > /home/application/coscli/bak-json/$(date +%Y%m%d).json

使用mysqldump全库备份

[root@sre full_bak]# vim  back-cmdb_full.sh 

#备份数据,加上存储过程
/home/application/mysql/app/bin/mysqldump --defaults-extra-file=/home/.my.cnf --routines --set-gtid-purged=OFF --databases cmdb > /home/mysql-bak/full_bak/bak-sql/full_`date +"%F"`.sql 2>&1

#删除60天之前的备份
/usr/bin/find /home/mysql-bak/full_bak/bak-sql/ -name "full_*" -ctime +60 | xargs rm -rf

导出的数据格式:

image.png

定时任务,定期备份

#cmdb-bak
0 2 * * * /home/mysql-bak/full_bak/back-cmdb_full.sh

Version

newest

xyzzen commented 4 days ago

你好 备份出来的json怎么恢复