一、常用 MySQL 备份方法
MySQL 备份按 备份内容 可分为「物理备份」(直接复制数据文件)和「逻辑备份」(导出 SQL 语句);按 备份时机 可分为「全量备份」(完整数据)和「增量备份」(新增 / 变更数据)。
1. 逻辑备份:mysqldump(官方工具)
mysqldump 是 MySQL 自带的逻辑备份工具,通过导出 SQL 语句(CREATE TABLE、INSERT 等)实现备份,支持全量备份,需配合二进制日志实现增量备份。核心特点
- 优点:跨平台(Windows/Linux 通用)、备份文件为文本格式(可直接编辑)、支持单库 / 单表 / 全库备份。
- 缺点:备份 / 还原速度慢(需解析 SQL)、占用磁盘空间较大(文本格式)、不适合超大型数据库(如 100GB+)。
常用操作命令
| 备份场景 | 命令示例 | |
|---|---|---|
| 全库备份(含所有数据库) | mysqldump -u root -p --all-databases > all_db_backup_202405.sql |
|
单库备份(如 test_db) |
mysqldump -u root -p test_db > test_db_backup_202405.sql |
|
单表备份(如 test_table) |
mysqldump -u root -p test_db test_table > test_table_backup_202405.sql |
|
排除表备份(排除 t1/t2) |
mysqldump -u root -p test_db --ignore-table=test_db.t1 --ignore-table=test_db.t2 > test_db_no_t1t2.sql |
|
| 带压缩备份(节省空间) | `mysqldump -u root -p test_db | gzip > test_db_backup_202405.sql.gz` |
关键参数说明
-u:指定 MySQL 用户名(如root)。-p:提示输入密码(若直接写密码,需用-p123456,但存在安全风险,不推荐)。--all-databases:备份所有数据库(含系统库mysql)。--single-transaction:InnoDB 表备份时开启事务,保证数据一致性(不锁表);MyISAM 表需用--lock-tables锁表。
2. 物理备份:MySQL Enterprise Backup(MEB,企业版)
MEB 是 MySQL 企业版提供的物理备份工具,直接复制 InnoDB/MyISAM 的数据文件(如
.ibd、.frm),支持全量备份和增量备份,备份效率远高于 mysqldump。核心特点
- 优点:备份 / 还原速度快(直接操作文件)、支持增量备份(节省空间)、支持压缩备份、恢复后无需执行 SQL 解析。
- 缺点:仅企业版可用(需付费)、备份文件为二进制格式(不可编辑)、跨版本兼容性需注意(如 5.7 备份不可直接恢复到 8.0)。
常用操作命令
| 备份场景 | 命令示例 |
|---|---|
| 全量备份 | mysqlbackup -u root -p --backup-dir=/data/backup/full backup |
| 增量备份(基于全量) | mysqlbackup -u root -p --backup-dir=/data/backup/incremental --incremental-base=dir:/data/backup/full backup |
| 压缩备份 | mysqlbackup -u root -p --backup-dir=/data/backup/compressed --compress backup |
3. 物理备份:Percona XtraBackup(开源免费)
Percona XtraBackup(简称 PXB)是开源社区最常用的物理备份工具,支持 InnoDB 引擎的 热备份(备份时不锁表,不影响业务),免费且功能接近 MEB,是中小团队的首选。
核心特点
- 优点:开源免费、支持热备份(InnoDB)、备份 / 还原速度快、支持全量 / 增量 / 差异备份、跨版本兼容较好。
- 缺点:不支持 MyISAM 热备份(MyISAM 需锁表)、操作稍复杂(需手动准备备份文件)。
常用操作命令
| 备份场景 | 命令示例 |
|---|---|
| 全量备份 | xtrabackup --user=root --password=123456 --backup --target-dir=/data/backup/full |
| 增量备份(基于全量) | xtrabackup --user=root --password=123456 --backup --target-dir=/data/backup/incremental --incremental-basedir=/data/backup/full |
| 准备备份(恢复前需执行) | xtrabackup --prepare --target-dir=/data/backup/full(全量备份准备)xtrabackup --prepare --apply-log-only --target-dir=/data/backup/full --incremental-dir=/data/backup/incremental(增量备份合并到全量) |
4. 二进制日志(Binary Log):增量备份
二进制日志记录了 MySQL 所有 数据变更操作(INSERT/UPDATE/DELETE 等),本身不是全量备份工具,但可配合全量备份实现「全量 + 增量」备份,减少备份间隔和数据丢失风险。
核心特点
- 优点:增量备份体积小、可实现「时间点恢复」(如恢复到某一具体时间的数据)。
- 缺点:需先开启二进制日志、恢复时需按顺序应用日志、日志文件需定期清理(避免占满磁盘)。
关键操作步骤
-
开启二进制日志:修改 MySQL 配置文件
my.cnf(Linux)或my.ini(Windows),添加以下配置:log-bin=/var/lib/mysql/mysql-bin # 日志文件路径(需确保目录存在且可写) server-id=1 # 必须配置(主从复制/日志备份均需) expire_logs_days=7 # 日志自动过期时间(7天,避免磁盘溢出)重启 MySQL 生效:systemctl restart mysqld(Linux) -
查看二进制日志:
- 查看当前日志:
show master status; - 查看所有日志:
show binary logs;
- 查看当前日志:
-
导出指定时间段的日志(用于增量恢复):
mysqlbinlog --start-datetime="2024-05-01 00:00:00" --stop-datetime="2024-05-01 23:59:59" /var/lib/mysql/mysql-bin.000001 > incremental_20240501.sql
5. 其他备份方式
- 冷备份:停止 MySQL 服务后,直接复制数据目录(如
/var/lib/mysql)。优点是简单,缺点是服务中断,适合非生产环境或维护窗口。 - LVM 快照备份:通过 Linux LVM 逻辑卷的快照功能,快速生成数据卷副本(需先将 MySQL 数据目录挂载为 LVM 卷)。优点是备份速度极快,缺点是需 LVM 环境支持。
二、常用 MySQL 还原方法
还原需与备份方法对应(逻辑备份用 SQL 导入,物理备份用文件复制),以下分场景介绍。
1. 逻辑备份还原(对应 mysqldump 备份)
逻辑备份的还原本质是「执行备份的 SQL 文件」,常用工具为
mysql 客户端或 MySQL 图形化工具(如 Navicat)。常用操作命令
| 还原场景 | 命令示例 |
|---|---|
| 还原全库 / 单库 | mysql -u root -p < all_db_backup_202405.sql(全库)mysql -u root -p test_db < test_db_backup_202405.sql(单库,需先创建 test_db) |
| 还原压缩备份(先解压) | gzip -d test_db_backup_202405.sql.gz && mysql -u root -p test_db < test_db_backup_202405.sql |
| 还原单表(需先删除旧表) | mysql -u root -p test_db < test_table_backup_202405.sql(若表已存在,需先执行 DROP TABLE test_table;) |
注意事项
- 还原前需确保目标数据库存在(如还原
test_db需先执行CREATE DATABASE IF NOT EXISTS test_db;)。 - 还原大文件时,建议关闭 MySQL 的二进制日志(避免日志膨胀),还原后再开启:
SET SQL_LOG_BIN=0; # 关闭日志 -- 执行还原命令 SET SQL_LOG_BIN=1; # 开启日志
2. 物理备份还原(对应 PXB/MEB 备份)
物理备份的还原是「将备份的文件复制到 MySQL 数据目录」,需先停止 MySQL 服务,确保数据目录为空。
Percona XtraBackup 还原步骤(示例)
- 停止 MySQL 服务:
systemctl stop mysqld - 清空数据目录(确保备份有效,谨慎操作!):
rm -rf /var/lib/mysql/* # 数据目录路径需与 MySQL 配置一致 - 复制备份文件到数据目录:
xtrabackup --copy-back --target-dir=/data/backup/full # 全量备份还原 - 修改数据目录权限(MySQL 需读写权限):
chown -R mysql:mysql /var/lib/mysql - 启动 MySQL 服务:
systemctl start mysqld
3. 二进制日志还原(时间点恢复)
当全量备份后数据发生变更,可通过二进制日志恢复「全量备份之后到故障前」的数据,实现「时间点恢复」。
操作步骤(示例)
- 先还原全量备份(如用 mysqldump 或 PXB 还原到 2024-05-01 00:00 的全量数据)。
- 导出故障前的二进制日志(假设故障发生在 2024-05-01 14:30,全量备份后日志文件为
mysql-bin.000001):mysqlbinlog --start-datetime="2024-05-01 00:00:01" --stop-datetime="2024-05-01 14:30:00" /var/lib/mysql/mysql-bin.000001 > incremental_recover.sql - 执行增量日志还原:
mysql -u root -p < incremental_recover.sql
三、备份方法对比与选择建议
| 备份方法 | 类型 | 速度 | 成本 | 适用场景 |
|---|---|---|---|---|
| mysqldump | 逻辑备份 | 慢 | 免费 | 小型数据库(<10GB)、需编辑备份文件场景 |
| Percona XtraBackup | 物理备份 | 快 | 免费 | 中大型数据库(InnoDB 引擎)、生产环境热备份 |
| MySQL Enterprise Backup | 物理备份 | 快 | 付费 | 企业级数据库、需官方支持的场景 |
| 二进制日志 | 增量备份 | 快 | 免费 | 配合全量备份实现时间点恢复 |
四、备份与还原的最佳实践
- 定期全量 + 增量备份:全量备份(如每天凌晨)+ 增量备份(如每小时),平衡备份速度和数据安全性。
- 备份文件校验:备份后执行
md5sum校验文件完整性,避免备份损坏。 - 定期恢复测试:每月至少一次模拟恢复(如恢复到测试环境),确保备份可用。
- 备份文件异地存储:将备份文件复制到异地服务器或云存储(如 AWS S3),避免本地磁盘损坏导致数据丢失。
- 日志管理:二进制日志定期清理(如保留 7 天),避免占用过多磁盘空间。