页面加载中
博客快捷键
按住 Shift 键查看可用快捷键
ShiftK
开启/关闭快捷键功能
ShiftA
打开/关闭中控台
ShiftD
深色/浅色显示模式
ShiftS
站内搜索
ShiftR
随机访问
ShiftH
返回首页
ShiftL
友链页面
ShiftP
关于本站
ShiftI
原版/本站右键菜单
松开 Shift 键或点击外部区域关闭
互动
最近评论
暂无评论
标签
寻找感兴趣的领域
暂无标签
    0
    文章
    0
    标签
    8
    分类
    10
    评论
    128
    功能
    深色模式
    标签
    JavaScript12TypeScript8React15Next.js6Vue10Node.js7CSS5前端20
    互动
    最近评论
    暂无评论
    标签
    寻找感兴趣的领域
    暂无标签
      0
      文章
      0
      标签
      8
      分类
      10
      评论
      128
      功能
      深色模式
      标签
      JavaScript12TypeScript8React15Next.js6Vue10Node.js7CSS5前端20
      随便逛逛
      博客分类
      文章标签
      复制地址
      深色模式
      AnHeYuAnHeYu
      Search⌘K
      博客
        暂无其他文档

        备份与恢复 & 数据库安全

        March 23, 20246 分钟 阅读1 次阅读

        一、知识点

        1. 备份与恢复的基本概念

        备份是指将数据库中的数据复制到其他存储介质上,以防止数据丢失。恢复是指在数据丢失或损坏后,利用备份将数据库还原到某个一致的状态。

        2. 备份类型

        备份类型

        说明

        优点

        缺点

        全量备份

        备份整个数据库的所有数据

        恢复简单,完整性高

        占用存储大,备份时间长

        增量备份

        仅备份自上次备份(全量或增量)以来发生变化的数据

        节省存储空间,备份速度快

        恢复时需要依次应用所有增量,过程复杂

        差异备份

        备份自上次全量备份以来所有变化的数据

        恢复时只需全量+最后一次差异

        随时间累积,备份大小增大

        事务日志备份

        备份事务日志(记录所有修改操作)

        支持时间点恢复(PITR),粒度细

        日志量可能很大

        3. 恢复模式

        • 简单恢复模式:仅支持全量备份和差异备份,事务日志自动截断,不能进行日志备份或时间点恢复。

        • 完整恢复模式:支持全量、差异、日志备份,可恢复到任意时间点(需日志连续)。

        • 大容量日志恢复模式:介于两者之间,减少日志空间占用。

        4. 常见恢复技术

        • 基于备份的恢复:从全量备份还原,再应用差异/日志备份。

        • 基于日志的恢复:通过重做(REDO)和撤销(UNDO)操作来恢复未提交或已提交的事务。

        • 检查点(Checkpoint):将内存中的脏页写入磁盘,并在日志中记录,缩短崩溃恢复时间。

        5. 高可用与容灾

        • 主从复制:一主多从,可读写分离,故障时可手动切换。

        • 集群:多个节点共同提供服务,自动故障转移(如 MySQL Group Replication, Galera)。

        • 异地灾备:在不同地理位置部署副本,应对区域性灾难。

        6. 数据库安全基础

        • 身份认证:验证用户身份(密码、证书、多因素等)。

        • 权限管理:使用 GRANT / REVOKE 控制用户对数据库对象的访问权限(SELECT, INSERT, UPDATE, DELETE, DDL等)。

        • 加密:传输加密(SSL/TLS)、静态加密(TDE,透明数据加密)。

        • 审计:记录用户操作日志,用于安全审计和追溯。

        • SQL注入防护:使用参数化查询、预编译语句、输入验证。


        二、具体事例

        事例1:备份策略设计

        某在线交易系统要求:最多丢失30分钟的数据,并且可以恢复到任意时间点。建议策略:

        • 每周日凌晨进行全量备份。

        • 每天凌晨进行差异备份。

        • 每30分钟进行一次事务日志备份。

        恢复步骤:

        1. 还原最近一次全量备份。

        2. 还原最后一次差异备份(如有)。

        3. 依次还原自差异备份之后的所有日志备份。

        4. 恢复到故障发生前的时间点(或最后可用日志)。

        事例2:基于日志的时间点恢复(MySQL示例)

        sql

        -- 查看二进制日志列表SHOW BINARY LOGS;-- 恢复到指定时间点mysqlbinlog --stop-datetime="2024-05-01 10:00:00" binlog.000001 | mysql -u root -p

        事例3:权限管理示例

        sql

        -- 创建用户CREATE USER 'app_user'@'192.168.1.%' IDENTIFIED BY 'strong_password';-- 授予对 orders 表的查询、插入权限GRANT SELECT, INSERT ON db.orders TO 'app_user'@'192.168.1.%';-- 撤销插入权限REVOKE INSERT ON db.orders FROM 'app_user'@'192.168.1.%';-- 查看权限SHOW GRANTS FOR 'app_user'@'192.168.1.%';

        事例4:SQL注入防护(Java PreparedStatement)

        java

        // 危险写法:直接拼接用户输入String sql = "SELECT FROM users WHERE name = '" + userName + "'";// 安全写法:参数化查询String sql = "SELECT FROM users WHERE name = ?";PreparedStatement ps = conn.prepareStatement(sql);ps.setString(1, userName);ResultSet rs = ps.executeQuery();


        最后更新于 May 7, 2026
        On this page
        暂无目录