常用的MySQL备份/还原 的方法

一、常用 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 等),本身不是全量备份工具,但可配合全量备份实现「全量 + 增量」备份,减少备份间隔和数据丢失风险。

核心特点

  • 优点:增量备份体积小、可实现「时间点恢复」(如恢复到某一具体时间的数据)。
  • 缺点:需先开启二进制日志、恢复时需按顺序应用日志、日志文件需定期清理(避免占满磁盘)。

关键操作步骤

  1. 开启二进制日志:修改 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)
  2. 查看二进制日志
    • 查看当前日志:show master status;
    • 查看所有日志:show binary logs;
  3. 导出指定时间段的日志(用于增量恢复):
    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 还原步骤(示例)

  1. 停止 MySQL 服务
    systemctl stop mysqld
    
  2. 清空数据目录(确保备份有效,谨慎操作!):
    rm -rf /var/lib/mysql/*  # 数据目录路径需与 MySQL 配置一致
    
  3. 复制备份文件到数据目录
    xtrabackup --copy-back --target-dir=/data/backup/full  # 全量备份还原
    
  4. 修改数据目录权限(MySQL 需读写权限):
    chown -R mysql:mysql /var/lib/mysql
  5. 启动 MySQL 服务
    systemctl start mysqld
    

3. 二进制日志还原(时间点恢复)

当全量备份后数据发生变更,可通过二进制日志恢复「全量备份之后到故障前」的数据,实现「时间点恢复」。

操作步骤(示例)

  1. 先还原全量备份(如用 mysqldump 或 PXB 还原到 2024-05-01 00:00 的全量数据)。
  2. 导出故障前的二进制日志(假设故障发生在 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
    
  3. 执行增量日志还原
    mysql -u root -p < incremental_recover.sql

三、备份方法对比与选择建议

备份方法 类型 速度 成本 适用场景
mysqldump 逻辑备份 免费 小型数据库(<10GB)、需编辑备份文件场景
Percona XtraBackup 物理备份 免费 中大型数据库(InnoDB 引擎)、生产环境热备份
MySQL Enterprise Backup 物理备份 付费 企业级数据库、需官方支持的场景
二进制日志 增量备份 免费 配合全量备份实现时间点恢复

四、备份与还原的最佳实践

  1. 定期全量 + 增量备份:全量备份(如每天凌晨)+ 增量备份(如每小时),平衡备份速度和数据安全性。
  2. 备份文件校验:备份后执行 md5sum 校验文件完整性,避免备份损坏。
  3. 定期恢复测试:每月至少一次模拟恢复(如恢复到测试环境),确保备份可用。
  4. 备份文件异地存储:将备份文件复制到异地服务器或云存储(如 AWS S3),避免本地磁盘损坏导致数据丢失。
  5. 日志管理:二进制日志定期清理(如保留 7 天),避免占用过多磁盘空间。
阅读剩余
THE END