Mysql备份

MySQL 备份

一、备份分类

MySQL 备份的类型多种多样,用途与场景也不同。

1. 按备份内容

类型 说明
完全备份 备份整个数据库(表、数据、索引、数据库对象)
部分备份 只备份部分数据或部分表

2. 按备份方式

类型 说明 特点
逻辑备份 导出为 SQL 语句(mysqldump) 兼容性强、可读、体积大、适合中小库
物理备份 直接复制数据文件与日志文件 速度快、体积小,通常需停机或专业工具

3. 按备份状态

类型 数据库状态 特点
热备份 正常运行,可读写 不影响业务,需要工具支持
温备份 允许有限操作,可读、限制写 折中方案
冷备份 停止服务后备份 简单、一致性好,但期间不可用

这里整理了一个简略的知识导图:


二、两种热备份工具

本节主要讲两种热备份方式的备份工具:mysqldump(逻辑备份) 与 XtraBackup(物理备份)。

1. mysqldump 逻辑备份

定义:把数据库的结构和数据导出为 SQL 文本文件(可读)。

因为本质是逐行处理 SQL 文本文件,所以兼容性强、支持跨平台;同时也因此导致备份与恢复比较慢。适用于小型数据库(GB 级以下)。

优点:

  • 文件可读、可编辑
  • 可单表恢复(可以思考一下单表恢复方式)
  • 易传输

缺点:

  • 大库耗时长、恢复慢
  • 占用 CPU / IO 较高
核心功能
  • 备份整个数据库、单个表、多个表,或按条件备份部分数据
  • 支持导出表结构(CREATE 语句)和数据(INSERT 语句)
  • 可一并备份存储过程、函数、触发器、事件等对象
核心参数详解
参数 说明
--single-transaction 事务快照保证一致性,仅对 InnoDB 有效,不锁表
--lock-tables 备份期间锁定所有表;MyISAM 需用此参数保证一致性,但会阻塞写入
--skip-lock-tables 不锁表,适合允许写入的场景,但可能数据不一致
--routines 包含存储过程和函数
--events 包含事件(定时任务)
--triggers 包含触发器
--no-data 仅备份表结构,不备份数据
--no-create-info 仅备份数据,不备份表结构
--databases 备份多个库,导出文件含 CREATE DATABASE
--all-databases 备份所有库
--ignore-table=库.表 忽略指定表,可重复使用
--where="条件" 按条件备份部分数据(对该次备份的所有表生效)
--default-character-set=utf8mb4 指定字符集,避免中文乱码
--source-data=2 以注释形式记录 binlog 位置,便于按时间点恢复
--set-gtid-purged=OFF 避免 GTID 相关信息导致导入报错

常用组合 :--single-transaction --routines --triggers --events --default-character-set=utf8mb4

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

参考示例:

bash 复制代码
# 单个数据库(推荐参数组合)
mysqldump -uroot -p --single-transaction --routines --triggers --events \
  --default-character-set=utf8mb4 mydb > /backup/mydb_full_$(date +%F).sql

# 多个数据库
mysqldump -uroot -p --databases db1 db2 > /backup/dbs_$(date +%F).sql

# 所有数据库
mysqldump -uroot -p --all-databases --single-transaction \
  --routines --triggers --events --default-character-set=utf8mb4 \
  > /backup/all_dbs_$(date +%F).sql

# 单个表
mysqldump -uroot -p mydb table1 > /backup/mydb_table1.sql

# 多个表(带条件,只备份 id < 1000 的数据)
mysqldump -uroot -p --where="id < 1000" mydb table1 table2 > /backup/mydb_tables_partial.sql

# 忽略某张表
mysqldump -uroot -p --ignore-table=mydb.logs mydb > /backup/mydb_no_logs.sql

# 仅备份表结构 / 仅备份数据
mysqldump -uroot -p --no-data mydb        > /backup/mydb_schema.sql
mysqldump -uroot -p --no-create-info mydb > /backup/mydb_data.sql

# 压缩备份,节省空间
mysqldump -uroot -p --single-transaction mydb | gzip > /backup/mydb_full_$(date +%F).sql.gz

# 记录 binlog 位置(便于后续增量恢复)
mysqldump -uroot -p --single-transaction --source-data=2 mydb > /backup/mydb_full.sql
怎么恢复

如果是恢复数据库,没有数据库得先创建数据库 ,因为 SQL 语句里没有建库语句;然后再恢复。恢复的语法只需要把 > 倒过来即可。

bash 复制代码
# 恢复完整数据库(库不存在时先创建)
mysql -uroot -p -e "CREATE DATABASE IF NOT EXISTS mydb DEFAULT CHARACTER SET utf8mb4;"
mysql -uroot -p --default-character-set=utf8mb4 mydb < /backup/mydb_full.sql

# 恢复压缩备份
gunzip < /backup/mydb_full.sql.gz | mysql -uroot -p mydb

# 恢复全部数据库
mysql -uroot -p < /backup/all_dbs.sql

恢复单个表:

bash 复制代码
mysqldump -uroot -p mydb table1 > table1.sql
mysql -uroot -p mydb < table1.sql

那如果只有整库备份文件 ,怎么恢复单表呢?直接从全量备份文件里用 sed 截取单表语句即可:

bash 复制代码
sed -n '/^-- Table structure for table `table1`/,/^-- Table structure for table/p' mydb_full.sql > table1.sql
mysql -uroot -p mydb < table1.sql

但需要注意:截取法依赖备份文件的标准格式,表名和反引号要写对;条件允许时优先用单独备份的方式。

验证备份是否可用

备份好后我们还需要验证备份是否可用,这样备份才算闭环。

bash 复制代码
# 文件大小是否正常
ls -lh /backup/mydb_full_2026-09-12.sql

# 统计建表语句数量
grep -c "CREATE TABLE" /backup/mydb_full_2026-09-12.sql

# 恢复到测试库验证(最可靠)
mysql -uroot -p -e "CREATE DATABASE mydb_verify;"
mysql -uroot -p mydb_verify < /backup/mydb_full_2026-09-12.sql
mysql -uroot -p -e "USE mydb_verify; SHOW TABLES;"

2. XtraBackup(物理备份)

先出到这,下次一定补

相关推荐
Escalating_xu7 小时前
【Linux 网络编程】手写序列化与反序列化:从 x op y 到能校验的文本协议
linux·运维·网络
润滑卫士7 小时前
油液多参数融合故障诊断:数据级融合与决策级融合方法
运维
不脱发的程序猿8 小时前
纳指ETF量化策略
数据库·人工智能·1024程序员节
李纲明8 小时前
WordPress 后台登录马上被踢回登录页:Cookie 域、HTTPS、盐值和页面缓存怎么查
运维·缓存·https·php·wordpress·cookie
todoitbo8 小时前
在 Ubuntu ARM64 上运行 Q1 V3.0 MuJoCo 模型:加载、步进和单执行器响应
linux·运维·ubuntu·ai·机器人·仿真教程·启元
程序员塔塔喵9 小时前
【MySQL篇|第一篇】索引失效的情况
数据库·mysql·索引失效
AR-26710-9 小时前
Linux Day26——传输层与三次握手
linux·运维
北京青蓝智慧马老师9 小时前
比外部黑客更难防的,是那个有权限的自己人(3 个脱敏复盘)
大数据·数据库·人工智能
笃行3509 小时前
拆一台数据集成产品:KFS 的骨架、肌肉和神经
数据库
4SAPI9 小时前
搭建 AI 数据分析工具大模型 API 选型指南
数据库·人工智能·架构·php·1024程序员节