Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
fxkjnj opened this issue Jun 13, 2024 · 1 comment
Open

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

fxkjnj opened this issue Jun 13, 2024 · 1 comment
Assignees

Comments

@fxkjnj
Copy link

fxkjnj commented Jun 13, 2024

Contact Details

[email protected]

What is your question?

背景:

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

备份方法:

  • 使用Python API备份,查询CI接口,导出JSON数据
  • 使用mysqldump备份,导出SQL语句

使用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
Copy link

xyzzen commented Jul 3, 2024

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants