【4】MySQL数据库-备份

说明

首先对 MySQL 数据库常见的术语进行简要概述、并介绍一些常用的备份工具。

  1. 物理备份:这是一种备份数据库文件的方式,通常涉及复制数据库文件到另一个存储位置。它不依赖于数据库的逻辑结构,因此可以用于不同的数据库版本或平台。

  2. 逻辑备份:与物理备份不同,逻辑备份涉及导出数据库中的数据和对象结构,通常以SQL语句的形式。这使得备份可以跨不同的数据库系统迁移。

  3. 在线备份又称为 热备份):在数据库正常运行时进行的备份,不会影响数据库的正常使用。这对于24/7运行的业务至关重要。

  4. 离线备份又称为 冷备份):在数据库关闭或处于维护模式时进行的备份。这通常用于确保备份的完整性,但会暂停数据库服务。

  5. 增量备份:只备份自上次备份以来发生变化的数据,这可以节省时间和存储空间。

  6. 全量备份:备份数据库中的所有数据,无论是否有变化。

  7. 差异备份:备份自上次全量备份以来发生变化的数据。

  8. 热备份又称为 在线备份):在数据库正常运行且数据处于一致状态时进行的备份。

  9. 冷备份又称为 离线备份):在数据库关闭时进行的备份。

物理备份 | 逻辑备份

物理备份 (Physical Backup)

物理备份是对数据库文件的直接复制。这些文件包括数据文件、日志文件、配置文件等。物理备份通常用于快速恢复和迁移数据库,因为它们直接复制了数据库文件系统的状态。

优点:

  1. 速度快:直接复制文件,不需要将数据转换成其他格式。
  2. 恢复迅速:恢复时只需将备份文件复制回原来的位置。
  3. 一致性好:在正确配置的情况下,可以获得一致的快照。

缺点:

  1. 平台依赖:物理备份通常依赖于操作系统和文件系统。
  2. 灵活性差:无法轻易地选择性恢复某些表或记录。

示例:
使用 XtraBackup 工具进行物理备份和恢复。

  1. 安装 XtraBackup

    sudo apt-get install percona-xtrabackup-80
    
  2. 进行备份

    xtrabackup --backup --target-dir=/path/to/backup/dir --user=root --password=root_password
    
  3. 准备备份

    xtrabackup --prepare --target-dir=/path/to/backup/dir
    
  4. 恢复备份

    xtrabackup --copy-back --target-dir=/path/to/backup/dir
    sudo chown -R mysql:mysql /var/lib/mysql
    sudo systemctl start mysql
    

逻辑备份 (Logical Backup)

逻辑备份是将数据库中的数据以逻辑结构的方式导出,比如导出成 SQL 语句。常用的工具有 mysqldumpmysqlpump

优点:

  1. 跨平台性好:逻辑备份生成的 SQL 文件可以在不同的 MySQL 版本和平台上恢复。
  2. 灵活性高:可以选择性地备份和恢复某些数据库、表或记录。

缺点:

  1. 速度慢:导出和导入过程相对较慢,尤其是数据量大的情况下。
  2. 性能影响:在备份过程中可能会影响数据库性能。

示例:
使用 mysqldump 工具进行逻辑备份和恢复。

  1. 进行备份

    mysqldump -u root -p database_name > /path/to/backup/database_name.sql
    
  2. 恢复备份

    mysql -u root -p database_name < /path/to/backup/database_name.sql
    

具体场景的应用

  • 物理备份:适用于大型数据库,要求快速备份和恢复的场景,例如金融系统和电商平台。
  • 逻辑备份:适用于小型数据库、开发测试环境或需要部分数据恢复的场景,例如应用开发和数据迁移。

总结

  • 物理备份:直接复制数据库文件,速度快,恢复迅速,但平台依赖性强,灵活性差。
  • 逻辑备份:以 SQL 语句形式导出数据,跨平台性好,灵活性高,但速度慢,可能影响数据库性能。

选择哪种备份方式取决于具体的应用场景和需求。大型生产环境通常会结合使用两种备份方式,以确保数据安全和高效恢复。

全量备份 | 增量备份

在 MySQL 中,根据备份的数据量和内容,备份可以分为全量备份(Full Backup)和增量备份(Incremental Backup)。以下是对这两种备份方式的详细说明及示例:

全量备份 (Full Backup)

全量备份是对整个数据库的所有数据进行完整备份。每次执行全量备份时,都会备份数据库中所有的数据和结构。

优点:

  1. 恢复简单:恢复时只需要使用最新的全量备份即可恢复所有数据。
  2. 一致性高:每次备份都是数据库的完整快照。

缺点:

  1. 占用空间大:每次备份都需要大量存储空间。
  2. 时间长:备份和恢复过程可能需要较长时间,特别是对于大规模数据库。

示例:
使用 mysqldump 进行全量备份:

  1. 全量备份
    mysqldump -u root -p --all-databases > /path/to/backup/all_databases.sql
    

使用 XtraBackup 进行全量物理备份:

  1. 全量物理备份
    xtrabackup --backup --target-dir=/path/to/backup/full --user=root --password=root_password
    

增量备份 (Incremental Backup)

增量备份是指从上一次备份(无论是全量备份还是增量备份)之后发生变化的数据进行备份。它只备份自上次备份以来修改或新增的数据。

优点:

  1. 节省空间:只备份变化的数据,节省存储空间。
  2. 速度快:备份和恢复的时间较短,因为数据量较小。

缺点:

  1. 恢复复杂:恢复时需要依次应用最后一个全量备份和所有后续的增量备份。
  2. 一致性风险:如果某个增量备份损坏,可能影响整个备份链的恢复。

示例:
使用 XtraBackup 进行增量物理备份:

  1. 第一次全量备份

    xtrabackup --backup --target-dir=/path/to/backup/full --user=root --password=root_password
    
  2. 第一次增量备份

    xtrabackup --backup --target-dir=/path/to/backup/inc1 --incremental-basedir=/path/to/backup/full --user=root --password=root_password
    
  3. 第二次增量备份

    xtrabackup --backup --target-dir=/path/to/backup/inc2 --incremental-basedir=/path/to/backup/inc1 --user=root --password=root_password
    

具体场景的应用

  • 全量备份:适用于数据量较小、备份窗口充足的场景,或作为周期性备份的一部分,例如每周一次全量备份。
  • 增量备份:适用于数据量较大、需要频繁备份的场景,以节省存储空间和备份时间,例如每天一次增量备份。

结合使用

实际应用中,通常会结合使用全量备份和增量备份。例如,每周进行一次全量备份,然后每天进行一次增量备份。这种策略可以在节省存储空间的同时,确保数据的安全和恢复的有效性。

恢复示例

  1. 恢复全量备份

    xtrabackup --prepare --target-dir=/path/to/backup/full
    xtrabackup --copy-back --target-dir=/path/to/backup/full
    sudo chown -R mysql:mysql /var/lib/mysql
    sudo systemctl start mysql
    
  2. 应用第一次增量备份

    xtrabackup --prepare --target-dir=/path/to/backup/full --incremental-dir=/path/to/backup/inc1
    
  3. 应用第二次增量备份

    xtrabackup --prepare --target-dir=/path/to/backup/full --incremental-dir=/path/to/backup/inc2
    
  4. 恢复准备好的数据

    xtrabackup --copy-back --target-dir=/path/to/backup/full
    sudo chown -R mysql:mysql /var/lib/mysql
    sudo systemctl start mysql
    

总结

  • 全量备份:备份整个数据库,简单但占用空间大,适用于周期性备份。
  • 增量备份:备份变化的数据,节省空间但恢复复杂,适用于频繁备份需求。

选择合适的备份策略,可以根据具体业务需求和系统环境,确保数据的安全性和可恢复性。

离线备份 | 增量备份

在 MySQL 中,备份操作可以分为离线备份(Offline Backup)和在线备份(Online Backup)。这两种备份方式主要区别在于是否需要停止数据库服务。以下是对离线备份和在线备份的详细说明及示例:

离线备份 (Offline Backup)

离线备份是在数据库停止服务的情况下进行的备份(也叫做冷备)。此时,数据库不会接受任何连接和操作,确保备份的一致性。

优点:

  1. 数据一致性:由于数据库停止运行,备份过程中不会有数据修改,确保数据一致性。
  2. 操作简单:无需处理并发访问问题。

缺点:

  1. 服务中断:数据库在备份期间不可用,可能会影响业务连续性。
  2. 时间限制:备份时间较长时,可能会导致较长的停机时间。

示例:

  1. 停止 MySQL 服务

    sudo systemctl stop mysql
    
  2. 进行物理备份

    cp -r /var/lib/mysql /path/to/backup/dir
    
  3. 启动 MySQL 服务

    sudo systemctl start mysql
    

在线备份 (Online Backup)

在线备份是在数据库正常运行的情况下进行的备份(也叫做热备)。数据库继续接受读写操作,用户不会感受到服务中断。

优点:

  1. 无服务中断:数据库在备份期间仍然可用,不影响业务连续性。
  2. 高可用性:适用于需要 24/7 连续运行的系统。

缺点:

  1. 数据一致性挑战:备份过程中可能会有数据修改,需要使用一致性快照或其他机制来确保数据一致性。
  2. 性能影响:备份操作可能会占用系统资源,影响数据库性能。

示例:
使用 mysqldump 进行在线逻辑备份:

  1. 在线逻辑备份
    mysqldump -u root -p --single-transaction database_name > /path/to/backup/database_name.sql
    
    --single-transaction 选项可以确保在 InnoDB 表上的一致性备份。

使用 XtraBackup 进行在线物理备份:

  1. 进行在线物理备份
    xtrabackup --backup --target-dir=/path/to/backup/dir --user=root --password=root_password
    

具体场景的应用

  • 离线备份:适用于可以安排停机时间的系统,数据一致性要求高且停机对业务影响较小的场景。
  • 在线备份:适用于需要高可用性、业务连续性强的系统,无法容忍长时间停机的场景。

结合使用

在实际应用中,企业可能会结合使用离线备份和在线备份。离线备份可以在业务低峰期进行,确保数据完全一致;在线备份则可以在业务高峰期或正常运行期间进行,确保业务不中断。

总结

  • 离线备份:数据库停止服务后进行备份,确保数据一致性但会中断服务。
  • 在线备份:数据库正常运行中进行备份,保证业务连续性但可能需要处理数据一致性问题。

根据具体的业务需求和系统特性,选择合适的备份方式,以确保数据安全和业务连续性。

常见工具

物理备份

  1. XtraBackup:Percona 公司开源的备份工具。适用于 MySQL 和 Percona Server。
  2. MySQL Enterprise Backup:MySQL企业级备份工具,常用于 MySQL 企业版。
  3. 克隆插件:在 MySQL 8.0.17 中引入的克隆插件(Clone Plugin)是一个强大的新功能,旨在简化数据库克隆操作,特别是在 MySQL 组复制(Group Replication)环境中添加新节点时。克隆插件使得在不依赖外部备份工具的情况下,快速且简便地创建从库或新节点成为可能。

这三款工具的实现原理基本相同,都是先在备份的过程中拷贝物理文件和redo log,恢复时间利用 InnoDB Crash Recovery(崩溃恢复)将物理文件恢复到备份结束时的一致性状态。

备份过程

  • 拷贝物理文件:在备份过程中,这些工具会拷贝数据库的物理文件,包括数据文件(.ibd 文件)、表空间文件(.ibd 文件)和相关的元数据文件。这一过程可以在数据库运行期间进行,因为它们会使用 InnoDB 的在线备份能力。
  • 捕获 redo log:为了确保备份过程中的数据一致性,这些工具会捕获 redo log(重做日志)。redo log 记录了在备份期间数据库的所有写操作,这些日志文件可以在恢复过程中用于重放未完成的事务。
  • 快照一致性:通过使用 InnoDB 的一致性快照技术(例如多版本并发控制,MVCC),这些工具确保在备份过程中捕获的数据库状态是一个一致的快照,即使在数据库仍然处理事务的情况下。

恢复过程

  • 恢复物理文件:恢复时,首先将备份的物理文件复制回目标服务器。这包括数据文件和表空间文件。
  • 物理文件拷贝:备份和恢复都基于物理文件的拷贝,这种方法通常比逻辑备份更快,因为它避免了将数据导出和导入的开销。
  • redo log 捕获与应用:通过捕获和应用 redo log,这些工具确保了备份和恢复过程中的数据一致性,即使在备份期间有活跃的事务。

逻辑备份

  1. mysqldump:MySQL 安装包自带的备份工具、单线程备份。
  2. mydumper:开源工具,可实现单表 chunk 级别的并行备份。
  3. mysqldump:MySQL 5.7 引入的备份工具,可实现表级别的并行备份。
  4. MySQL shell Dump & Load:MySQL官方新推出的多线程逻辑备份工具,可实现单表 chunk 级别的并行备份。
  5. select ... into outfile:SQL命令,可将表记录直接导出到文件中。

相关推荐

  1. 4MySQL数据库-备份

    2024-06-06 02:52:06       26 阅读
  2. mysql数据库备份命令

    2024-06-06 02:52:06       55 阅读
  3. mysql数据库备份恢复

    2024-06-06 02:52:06       37 阅读
  4. MySQL数据库-备份

    2024-06-06 02:52:06       37 阅读
  5. 定时备份mysql数据库

    2024-06-06 02:52:06       35 阅读
  6. MySQL数据备份

    2024-06-06 02:52:06       65 阅读
  7. MySQL数据备份

    2024-06-06 02:52:06       50 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-06 02:52:06       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-06 02:52:06       101 阅读
  3. 在Django里面运行非项目文件

    2024-06-06 02:52:06       82 阅读
  4. Python语言-面向对象

    2024-06-06 02:52:06       91 阅读

热门阅读

  1. Oracle大表在线重新分区

    2024-06-06 02:52:06       30 阅读
  2. linux各个日志的含义 以及使用方法

    2024-06-06 02:52:06       36 阅读
  3. 服务器硬件基础知识

    2024-06-06 02:52:06       31 阅读
  4. Linux文件系统杂记

    2024-06-06 02:52:06       26 阅读
  5. ORACLE RAC的一些基本理论知识

    2024-06-06 02:52:06       20 阅读
  6. oracle sys无法远程访问问题解决

    2024-06-06 02:52:06       28 阅读
  7. 程序员应该有什么职业素养?【模板】

    2024-06-06 02:52:06       24 阅读
  8. 查询DQL

    查询DQL

    2024-06-06 02:52:06      23 阅读