MySQL数据库备份与还原的方案及具体命令行操作

 更新时间:2026年07月02日 09:20:05   作者:问道飞鱼  
众所周知备份与还原是数据库管理中不可或缺的部分,这篇文章主要介绍了MySQL数据库备份与还原的方案及具体命令行操作的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下

MySQL 数据库备份与还原详细解读

MySQL 数据库备份与还原是保障数据安全的核心操作,需根据数据库规模、性能要求、恢复时效选择合适方案。本文从备份类型、推荐方案、具体命令行、备份策略注意事项全面解析,覆盖逻辑备份、物理备份及点-in-time恢复(PITR)。

一、备份类型与核心工具

MySQL 备份分为 逻辑备份物理备份,核心区别如下:

类型原理优点缺点适用场景
逻辑备份将数据导出为 SQL 语句或文本格式跨版本兼容、可读性强、支持部分备份备份/恢复速度慢(尤其大数据量)、锁表风险小型数据库(<100GB)、跨环境迁移
物理备份直接复制数据文件(如 InnoDB 表空间)备份/恢复速度快、支持增量备份、低锁表依赖存储引擎、跨版本兼容性差、不可读大型数据库(>100GB)、高性能恢复需求

核心备份工具

  • 逻辑备份mysqldump(官方)、mysqlpump(官方多线程)、mydumper(第三方多线程)。
  • 物理备份Percona XtraBackup(开源,支持热备)、MySQL Enterprise Backup(官方收费)。
  • 二进制日志(Binlog):记录所有数据变更,用于点-in-time恢复(PITR)。

二、推荐备份方案

根据数据库规模和需求选择方案:

方案 1:小型数据库(<100GB)—— 逻辑备份(mysqldump)

优势:简单易用、跨版本兼容、支持单库/单表备份,适合开发环境或小型生产库。

工具mysqldump(MySQL 自带,无需额外安装)。

方案 2:中型数据库(100GB~1TB)—— 多线程逻辑备份(mydumper)

优势:多线程并行备份,速度远超 mysqldump,支持分块导出、压缩,适合中等规模数据库。

工具mydumper(需手动安装,基于 glib 开发)。

方案 3:大型数据库(>1TB)—— 物理热备(Percona XtraBackup)

优势:支持 InnoDB 热备(不锁表)、增量备份、压缩,恢复速度快,适合生产环境核心库。

工具Percona XtraBackup(开源,Percona 公司开发)。

方案 4:关键业务(高可用需求)—— 全量+增量+Binlog 组合

优势:通过“全量备份+增量备份+Binlog”实现任意时间点恢复(PITR),满足 RTO(恢复时间目标)和 RPO(恢复点目标)要求。

三、具体命令行操作

场景 1:逻辑备份(mysqldump)

mysqldump 是 MySQL 官方逻辑备份工具,语法:

mysqldump [选项] 数据库名 [表名...] > 备份文件.sql

1. 备份单个数据库(含结构和数据)

# 备份 db_name 数据库到 backup_db.sql
mysqldump -u 用户名 -p 密码 db_name > backup_db.sql

# 示例(输入密码时隐藏明文)
mysqldump -u root -p db_test > /backup/db_test_$(date +%Y%m%d).sql
# 执行后输入密码:Enter password: ******

2. 备份多个数据库

# 备份 db1、db2 到 multi_db.sql
mysqldump -u root -p --databases db1 db2 > multi_db.sql

3. 备份所有数据库(含系统库)

# 备份所有库(包括 mysql、information_schema 等)
mysqldump -u root -p --all-databases > all_databases.sql

4. 备份单表

# 备份 db_name 库的 table_name 表
mysqldump -u root -p db_name table_name > table_name.sql

5. 带条件的备份(如按时间过滤数据)

# 备份 orders 表中 2023 年的数据(需表有 create_time 字段)
mysqldump -u root -p db_name orders --where="create_time >= '2023-01-01'" > orders_2023.sql

6. 压缩备份(节省空间)

结合 gzip 压缩备份文件(推荐):

mysqldump -u root -p db_name | gzip > db_name.sql.gz

7. 关键选项说明

选项作用
--single-transaction对 InnoDB 表使用事务快照备份(不锁表,适合生产环境)
--routines备份存储过程和函数
--triggers备份触发器
--events备份事件调度器
--hex-blob二进制数据(如 BLOB)以十六进制格式导出(避免乱码)
--skip-lock-tables不锁表(MyISAM 表可能不一致,慎用)

场景 2:逻辑备份(mydumper,多线程)

mydumper 是第三方多线程逻辑备份工具,速度比 mysqldump 快 5~10 倍,支持分块导出和压缩。

1. 安装 mydumper

  • Ubuntu/Debian
    sudo apt install mydumper
    
  • CentOS/RHEL
    sudo yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
    sudo percona-release enable-only tools release
    sudo yum install mydumper
    

2. 备份单个数据库

# 多线程备份 db_name(-t 线程数,-c 压缩,-o 输出目录)
mydumper -u root -p 密码 -h localhost -P 3306 \
  -t 4 -c -o /backup/mydumper/db_name \
  -B db_name  # -B 指定数据库名

3. 备份所有数据库

mydumper -u root -p 密码 -t 4 -c -o /backup/mydumper/all_databases -a  # -a 备份所有库

场景 3:物理备份(Percona XtraBackup)

Percona XtraBackup 支持 InnoDB 热备(不锁表)、增量备份,适合大型数据库。

1. 安装 Percona XtraBackup

  • Ubuntu/Debian
    wget https://repo.percona.com/apt/percona-release_latest.$(lsb_release -sc)_all.deb
    sudo dpkg -i percona-release_latest.*.deb
    sudo apt update
    sudo apt install percona-xtrabackup-24  # MySQL 5.7/8.0 对应版本
    

2. 全量备份

# 备份所有 InnoDB 表到 /backup/xtrabackup/full
xtrabackup --backup \
  --user=root --password=密码 \
  --target-dir=/backup/xtrabackup/full/$(date +%Y%m%d)

3. 增量备份(基于全量备份)

# 基于全量备份做增量备份(需指定上次备份目录)
xtrabackup --backup \
  --user=root --password=密码 \
  --target-dir=/backup/xtrabackup/incr/$(date +%Y%m%d) \
  --incremental-basedir=/backup/xtrabackup/full/20231001

4. 准备备份(恢复前必须步骤)

备份文件需通过 --prepare 命令整理后才能恢复:

# 全量备份准备(--apply-log)
xtrabackup --prepare --target-dir=/backup/xtrabackup/full/20231001

# 增量备份准备(合并到全量备份)
xtrabackup --prepare \
  --target-dir=/backup/xtrabackup/full/20231001 \
  --incremental-dir=/backup/xtrabackup/incr/20231002

场景 4:还原数据库

1. 逻辑备份还原(mysqldump 生成的 SQL 文件)

使用 mysql 命令导入 SQL 文件:

# 还原单个数据库(需先创建空库)
mysql -u root -p -e "CREATE DATABASE IF NOT EXISTS db_name;"
mysql -u root -p db_name < backup_db.sql

# 还原所有数据库(直接导入 all_databases.sql)
mysql -u root -p < all_databases.sql

2. mydumper 备份还原

使用 myloadermydumper 配套工具)还原:

myloader -u root -p 密码 -h localhost -P 3306 \
  -t 4 -d /backup/mydumper/db_name  # -d 指定备份目录

3. Percona XtraBackup 物理还原

  1. 停止 MySQL 服务:
    sudo systemctl stop mysql
    
  2. 清空数据目录(默认 /var/lib/mysql):
    sudo rm -rf /var/lib/mysql/*
    
  3. 复制备份文件到数据目录:
    sudo cp -r /backup/xtrabackup/full/20231001/* /var/lib/mysql/
    
  4. 修改权限(MySQL 运行用户,如 mysql:mysql):
    sudo chown -R mysql:mysql /var/lib/mysql
    
  5. 启动 MySQL:
    sudo systemctl start mysql
    

四、备份策略与最佳实践

1. 备份频率

  • 全量备份:每日/每周(根据数据变更频率,核心库每日)。
  • 增量备份:每小时(基于全量备份,减少备份窗口)。
  • Binlog 备份:实时同步 Binlog 文件到远程存储(如 S3、NAS)。

2. 备份文件管理

  • 命名规范:包含日期和类型(如 db_test_20231001_full.sql.gz)。
  • 存储位置:本地+异地(如本地 SSD + 远程对象存储),避免单点故障。
  • 保留周期:全量备份保留 7~30 天,增量备份保留 3~7 天,Binlog 保留 7 天。

3. 验证备份有效性

  • 定期恢复测试:每月随机抽取备份文件恢复到测试环境,验证数据完整性。
  • 检查备份文件大小:异常小的文件可能备份失败(如权限问题)。

4. 加密与压缩

  • 压缩:用 gzipmydumper 内置压缩(节省存储空间)。
  • 加密:用 openssl 加密备份文件(如 mysqldump ... | openssl enc -aes-256-cbc -salt -pass pass:密钥 > backup.sql.enc)。

五、注意事项

  1. 锁表风险

    • mysqldump 默认对 MyISAM 表锁表,InnoDB 表建议加 --single-transaction 选项(事务快照备份,不锁表)。
    • 大表备份时,避免在业务高峰期执行。
  2. 字符集问题
    备份/还原时指定字符集(如 --default-character-set=utf8mb4),避免乱码:

    mysqldump -u root -p --default-character-set=utf8mb4 db_name > backup.sql
    mysql -u root -p --default-character-set=utf8mb4 db_name < backup.sql
    
  3. 权限问题
    备份用户需有 SELECTSHOW VIEWTRIGGERLOCK TABLES(非事务表)权限。

  4. Binlog 开启
    点-in-time恢复需开启 Binlog,在 my.cnf 中配置:

    [mysqld]
    log_bin = /var/log/mysql/mysql-bin.log
    binlog_format = ROW  # 推荐 ROW 格式(记录行变更)
    expire_logs_days = 7  # Binlog 保留 7 天
    

六、总结

  • 小型库:用 mysqldump 逻辑备份(简单、兼容),命令示例:
    mysqldump -u root -p --single-transaction --routines --triggers db_name | gzip > db_name_$(date +%Y%m%d).sql.gz
    
  • 大型库:用 Percona XtraBackup 物理热备(高速、低影响),结合 Binlog 实现 PITR。
  • 关键业务:全量备份(每日)+ 增量备份(每小时)+ Binlog(实时),确保任意时间点可恢复。

通过合理选择工具和策略,可最大化保障 MySQL 数据安全与业务连续性。

到此这篇关于MySQL数据库备份与还原的方案及具体命令行操作的文章就介绍到这了,更多相关MySQL备份与还原内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SQL多个字段拼接组合成新字段的常用方法

    SQL多个字段拼接组合成新字段的常用方法

    在sql语句中,有时候我们可能需要将两个字段的值放在一起显示,因为他们通常是一起出现的,比如客户名称和客户编号,那我们就要将这两个字段拼接成一个字段,本文给大家介绍了几种常见的方法,需要的朋友可以参考下
    2024-02-02
  • MySQL中join语句怎么优化

    MySQL中join语句怎么优化

    本文主要介绍了MySQL中join语句怎么优化,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • MySQL多表查询的实现过程

    MySQL多表查询的实现过程

    文章讲解了SQL多表查询的核心概念,包括笛卡尔积(交叉连接)、等值/非等值连接、自连接、内/外连接分类,强调避免笛卡尔积需添加连接条件,区分列名并使用JOIN/ON语法,同时对比了UNION与UNION ALL的区别,并提及MySQL中满外连接的替代方法
    2025-10-10
  • 比较详细的MySQL字段类型说明

    比较详细的MySQL字段类型说明

    MySQL支持大量的列类型,它可以被分为3类:数字类型、日期和时间类型以及字符串(字符)类型。本节首先给出可用类型的一个概述,并且总结每个列类型的存储需求,然后提供每个类中的类型性质的更详细的描述。概述有意简化,更详细的说明应该考虑到有关特定列类型的附加信息,例如你能为其指定值的允许格式。
    2008-08-08
  • MySQL 视图、函数和存储过程详解

    MySQL 视图、函数和存储过程详解

    视图、函数和存储过程都是 MySQL 中非常重要的数据库对象,它们可以提高数据库的效率和可重用性,使开发人员更加高效地处理数据,这篇文章主要介绍了MySQL 视图、函数和存储过程,需要的朋友可以参考下
    2023-04-04
  • MySQL触发器的使用和优缺点介绍

    MySQL触发器的使用和优缺点介绍

    大家好,本篇文章主要讲的是MySQL触发器的使用和优缺点介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下哦,方便下次浏览
    2021-12-12
  • Navicat连接mysql报错问题

    Navicat连接mysql报错问题

    这篇文章主要介绍了Navicat连接mysql报错问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-09-09
  • 一文带你学会MySQL的select语句

    一文带你学会MySQL的select语句

    在MySQL中可以使用SELECT语句来查询数据,查询数据是指从数据库中根据需求,使用不同的查询方式来获取不同的数据,是使用频率最高、最重要的操作,下面这篇文章主要给大家介绍了关于MySQL中select语句的相关资料,需要的朋友可以参考下
    2022-11-11
  • mysql日志文件之undo log和redo log

    mysql日志文件之undo log和redo log

    MySQL日志记录了MySQL数据库日常操作和错误信息,MySQL有不同类型的日志文件,下面这篇文章主要给大家介绍了关于mysql日志文件之undo log和redo log的相关资料,需要的朋友可以参考下
    2022-04-04
  • MySQL全文检索的实现示例

    MySQL全文检索的实现示例

    全文搜索是一种在文本字段中查找关键词的功能。在MySQL中,我们可以使用全文搜索来提高查询的效率,本文主要介绍了MySQL全文检索的实现示例,具有一定的参考价值,感兴趣的可以了解一下
    2024-04-04

最新评论