16日2153-增加备份到数据库功能.md 4.6 KB

增加备份到数据库功能

任务时间: 2025年06月16日 21:53
任务类型: 功能扩展
模块: Cleanup
状态: ✅ 已完成

任务概述

为Cleanup模块增加备份到数据库的功能,创建SQL记录表存储生成的INSERT语句,并将数据库备份设置为默认备份方式。

需求分析

  • 创建一个SQL记录表,将生成的INSERT语句储存在这个表
  • 备份到数据库,为默认备份方式
  • 保持现有的文件备份功能不变
  • 提供数据库备份的管理和查询功能

实施方案

1. 数据库设计

创建新表 kku_cleanup_sql_backups

  • 存储INSERT语句内容
  • 记录备份的表名、记录数量、内容大小
  • 使用SHA256哈希验证内容完整性
  • 关联到现有的备份记录表

2. 枚举扩展

更新 BACKUP_TYPE 枚举:

  • 添加 DATABASE = 1 作为数据库备份类型
  • 原有类型编号顺延:SQL=2, JSON=3, CSV=4
  • 更新相关描述和方法

3. 模型创建

新增 CleanupSqlBackup 模型:

  • 处理SQL备份数据的CRUD操作
  • 提供内容预览、大小格式化等访问器
  • 实现内容哈希验证功能

4. 逻辑层扩展

扩展 BackupLogic 类:

  • 添加 backupTableToDatabase 方法
  • 实现 generateInsertStatements 方法
  • 更新删除备份逻辑,同时删除SQL备份记录

5. 服务层扩展

CleanupService 中添加:

  • getSqlBackups - 获取SQL备份列表
  • getSqlBackupDetail - 获取SQL备份详情
  • getSqlBackupContent - 获取SQL备份内容

技术实现

核心文件修改

  1. app/Module/Cleanup/Models/CleanupSqlBackup.php (新增)

    • SQL备份记录模型
    • 提供内容管理和统计功能
  2. app/Module/Cleanup/Enums/BACKUP_TYPE.php (修改)

    • 添加DATABASE备份类型
    • 更新所有相关方法
  3. app/Module/Cleanup/Logics/BackupLogic.php (修改)

    • 实现数据库备份功能
    • 生成标准INSERT语句
  4. app/Module/Cleanup/Services/CleanupService.php (修改)

    • 添加SQL备份管理方法
  5. app/Module/Cleanup/config/cleanup.php (修改)

    • 将数据库备份设为默认类型

数据库表结构

CREATE TABLE `kku_cleanup_sql_backups` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `backup_id` bigint(20) unsigned NOT NULL,
  `table_name` varchar(100) NOT NULL,
  `sql_content` longtext NOT NULL,
  `records_count` bigint(20) unsigned NOT NULL DEFAULT '0',
  `content_size` bigint(20) unsigned NOT NULL DEFAULT '0',
  `content_hash` varchar(64) DEFAULT NULL,
  `backup_conditions` json DEFAULT NULL,
  `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `idx_backup_id` (`backup_id`),
  KEY `idx_table_name` (`table_name`),
  FOREIGN KEY (`backup_id`) REFERENCES `kku_cleanup_backups` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='SQL备份记录表';

功能特性

数据库备份优势

  1. 查询快速: 直接存储在数据库中,查询和检索非常快速
  2. 无文件管理: 不需要管理文件系统,避免文件丢失问题
  3. 事务安全: 利用数据库事务保证数据一致性
  4. 压缩存储: 数据库自动优化存储,无需额外压缩
  5. 备份可靠: 随数据库一起备份,不会单独丢失

使用示例

// 创建数据库备份(默认方式)
$result = CleanupService::createPlanBackup($planId, [
    'backup_type' => 1, // 数据库备份
]);

// 获取SQL备份列表
$backups = CleanupService::getSqlBackups([
    'table_name' => 'kku_farm_users',
    'min_records' => 100,
]);

// 获取SQL备份内容
$content = CleanupService::getSqlBackupContent($sqlBackupId);

测试验证

创建了测试SQL文件 test_database_backup.sql

  • 包含表创建语句
  • 提供测试数据
  • 包含查询和统计示例

文档更新

  1. 数据备份设计.md: 添加数据库备份实现方案
  2. README.md: 更新备份机制说明和使用示例
  3. 偏好习惯.md: 记录数据库备份为默认方式的偏好

配置变更

  • 默认备份类型从SQL文件改为数据库备份
  • 配置注释更新,明确各备份类型的编号

兼容性

  • 保持现有文件备份功能完全兼容
  • 新增功能不影响现有备份流程
  • 支持混合使用不同备份类型

总结

成功为Cleanup模块增加了数据库备份功能,实现了将INSERT语句直接存储到数据库表中的需求。新功能具有查询快速、管理便捷、安全可靠等优势,已设置为默认备份方式。同时保持了与现有文件备份功能的完全兼容性。