Mysql数据库备份与恢复

一、备份概述

1.1 为什么需要备份

数据是企业的核心资产,数据库备份的重要性不言而喻。常见的数据丢失原因包括:

风险类型 描述
硬件故障 磁盘损坏、服务器宕机
软件错误 Bug导致数据损坏、误操作
人为错误 误删数据、错误更新
安全事件 黑客攻击、勒索软件
自然灾害 火灾、水灾、断电

1.2 备份类型对比

类型 说明 优点 缺点
物理备份 直接复制数据库文件 速度快、恢复简单 跨平台性差、占用空间大
逻辑备份 导出SQL语句 可读性强、跨平台 备份/恢复速度慢
全量备份 备份所有数据 恢复简单完整 占用空间大、耗时长
增量备份 备份自上次备份后的变化 节省空间和时间 恢复复杂
差异备份 备份自上次全量备份后的变化 介于全量和增量之间 恢复较复杂
热备份 在线备份,不锁表 不影响业务 需要事务支持
冷备份 停机备份 一致性好 影响业务

1.3 备份策略设计原则

python

复制代码
备份策略原则 = [
    "RPO(恢复点目标):可容忍的数据丢失量",
    "RTO(恢复时间目标):可容忍的恢复时间",
    "3-2-1原则:至少3份备份,2种介质,1份异地",
    "定期测试恢复:备份的有效性必须验证",
    "备份加密:保护敏感数据",
    "备份保留周期:根据合规要求设定"
]

二、逻辑备份与恢复

2.1 mysqldump基础用法

bash

复制代码
# 基本语法
mysqldump -u [用户名] -p [选项] [数据库名] > 备份文件.sql

# 备份单个数据库
mysqldump -u root -p school > school_backup.sql

# 备份多个数据库
mysqldump -u root -p --databases school blog > multiple_db.sql

# 备份所有数据库
mysqldump -u root -p --all-databases > all_db.sql

# 只备份表结构,不备份数据
mysqldump -u root -p --no-data school > school_structure.sql

# 只备份数据,不备份表结构
mysqldump -u root -p --no-create-info school > school_data.sql

# 备份指定表
mysqldump -u root -p school students teachers > school_tables.sql

2.2 mysqldump常用选项

bash

复制代码
# 常用选项详解

# 1. 事务一致性(InnoDB推荐)
mysqldump -u root -p --single-transaction school > backup.sql

# 2. 锁定所有表(MyISAM推荐)
mysqldump -u root -p --lock-all-tables school > backup.sql

# 3. 备份存储过程和函数
mysqldump -u root -p --routines school > backup.sql

# 4. 备份触发器
mysqldump -u root -p --triggers school > backup.sql

# 5. 备份事件
mysqldump -u root -p --events school > backup.sql

# 6. 添加DROP语句
mysqldump -u root -p --add-drop-database school > backup.sql

# 7. 完整备份(包含所有对象)
mysqldump -u root -p \
    --single-transaction \
    --routines \
    --triggers \
    --events \
    --add-drop-database \
    --databases school > full_backup.sql

# 8. 压缩备份
mysqldump -u root -p school | gzip > school_backup.sql.gz

# 9. 带条件的备份
mysqldump -u root -p school students \
    --where="age > 18" > adult_students.sql

# 10. 排除某些表
mysqldump -u root -p school \
    --ignore-table=school.logs \
    --ignore-table=school.temp > backup.sql
相关推荐
Nturmoils3 小时前
订单列表慢查询,先看 WHERE、ORDER BY 和 LIMIT
数据库
渣波7 小时前
拒绝 SQL 焦虑!手把手带你用 NestJS + Prisma + DTO 写出“防弹”级后端代码
javascript·数据库·后端
Jim6001 天前
【吃透 MySQL InnoDB连载】第 1 章・解密线上数据库高频故障
mysql
GreatSQL1 天前
gt-checksum v4.0.0 新功能解读系列文章(4):SSL 加密连接——数据校验传输安全再升级
mysql
倔强的石头_1 天前
KingbaseES 新版MySQL 兼容版体验:旧版迁移 + 功能实测
数据库
倔强的石头_4 天前
《Kingbase护城河》——数据库存储空间全景探测与精细化瘦身实战
数据库
云技纵横4 天前
唯一索引 INSERT 死锁实战:5 秒复现交叉插入的 S 锁循环等待
sql·mysql
沉默王二4 天前
面试官:RAG 不用向量数据库,用 MySQL 硬扛?我:100 万向量不是很轻松?
mysql·面试·ai编程
冬奇Lab5 天前
每日一个开源项目(第134篇):Zvec - 阿里开源的嵌入式向量数据库,向量搜索界的 SQLite
数据库·人工智能·llm