分享一个用Python实现的备份MySQL数据库脚本,实现原理是利用Python内置的os库,调用mysql数据库的mysqldump命令对远程数据库或者本地数据库进行备份,并计算出备份的SQL文件大小(单位为kb),同时以备份时间命名备份的SQL文件,并设定只保留最近5天的备份记录,同时调用钉钉群聊机器人接口,对备份后的数据库信息进行消息推送。有需要的运维小伙伴可以拿去修改使用,这个脚本在Linux服务器上使用crontab定时程序每日定时运行,已经运行近1年的时间了,目前没有出现任何问题。
import requests
import json
import os
import datetime
if not os.path.exists('mysqldb_backup'):
os.mkdir('mysqldb_backup')
os.chdir('mysqldb_backup')
today = datetime.date.today()
yesterday = today - datetime.timedelta(days=5)
today_file_name = "/home/******/mysqldb_backup/mysql"+str(today)+".sql"
yesterday_file_name = "/home/******/mysqldb_backup/mysql"+str(yesterday)+".sql"
response_code = os.system("/usr/local/mysql/bin/mysqldump -u 数据库用户名 -p数据库密码 -h 数据库IP 数据库名称 > /home/******/mysqldb_backup/mysql`date +%Y-%m-%d`.sql")
file_size = int(os.path.getsize(today_file_name))/1024
if response_code == 0:
text = "#### Message:\n\n > - MySqlDB Backup Completed!\n\n > - SQL_file_size:"+str(round(file_size,4))+"KB"
if os.path.exists(yesterday_file_name):
os.remove(yesterday_file_name)
else:
text = "#### Message:\n\n > - MySqlDB Backup Error!\n\n > - Please check the server program."
dingding_url = "https://oapi.dingtalk.com/robot/send?access_token=钉钉机器人接口token"
headers = {"Content-Type": "application/json; charset=utf-8"}
post_data = {
"msgtype": "markdown",
"markdown": {
"title":"MySqlDB Backup Message",
"text":text
}
}
requests.post(dingding_url, headers=headers, data=json.dumps(post_data))