feat: 添加系统级管理专属页面权限

This commit is contained in:
2025-02-26 22:56:15 +08:00
parent 1dd9f7db43
commit b59dba18f0
8 changed files with 206 additions and 9 deletions

View File

@@ -5,9 +5,13 @@
# @File : database.py
# @Software : PyCharm
# @Comment : 本程序
import asyncio
import logging
import subprocess
import sys
from datetime import datetime
from logging.handlers import RotatingFileHandler
from pathlib import Path
from tortoise import Tortoise
@@ -136,3 +140,41 @@ async def configure_tortoise_logging(enable_logging: bool = True, log_level: int
else:
# 如果禁用日志,设置日志级别为 WARNING 以抑制大部分输出
tortoise_logger.setLevel(logging.WARNING)
async def backup_database():
"""
备份数据库
"""
logger.info("开始备份数据库")
# 配置数据库连接信息
backup_dir = Path().cwd() / "sql" # 备份文件存储的目录
# 如果 migrations 目录不存在,则创建
backup_dir.mkdir(parents=True, exist_ok=True)
# 生成备份文件名,格式为 dbYYYYMMDDHHMMSS.sql
timestamp = datetime.now().strftime('%Y%m%d%H%M%S')
backup_filename = f"db{timestamp}.sql"
backup_filepath = backup_dir / backup_filename # 使用 Path 对象组合路径
# 构造 mysqldump 命令
command = [
"mysqldump",
"-u", DataBaseConfig.db_username,
f"-p{DataBaseConfig.db_password}", # 直接传递密码
DataBaseConfig.db_database,
"--result-file=" + str(backup_filepath) # 指定备份文件路径
]
# 使用 asyncio.to_thread 来在线程中执行阻塞操作
await asyncio.to_thread(run_mysqldump, command)
def run_mysqldump(command):
"""在阻塞线程中执行 mysqldump 命令"""
try:
subprocess.run(command, check=True)
logger.info(f"数据库备份已完成,文件保存为 {command[-1]}")
except subprocess.CalledProcessError as e:
logger.error(f"备份失败,错误: {e}")