MySQL的备份工具——MySQL企业版备份

2024年 3月 4日 74.9k 0

在上一篇MySQL备份中我们提到MySQL的备份工具包括用于逻辑备份的SQL语句、将SQL语句与操作系统的命令结合的物理备份工具(例如,“LOCK TABLE”)、MySQL企业版备份(物理备份)、“mysqldump”,及第三方工具。本文将详细介绍MySQL企业版备份工具。

MySQL企业版备份工具是一款支持多平台的热备份工具,通过命令行调用“mysqlbackup”执行操作,针对InnoDB表进行优化,并支持MySQL的其他存储引擎。MySQL企业版具有如下功能:

  • 增量备份

  • 差异备份

  • 单一文件备份

  • 流形式发送到其他存储或服务器

  • 备份至磁带

  • 备份至云

  • 备份加密

  • 备份压缩

  • 部分备份

  • 可传输表空间

对于InnoDB存储引擎,MySQL企业版备份能够执行热备份,(备份可以在应用程序连接时运行)备份不会阻挡数据库的正常操作。对于其他的存储引擎,MySQL企业版执行温备份,应用程序可以对数据库进行只读操作。

备份InnoDB时,MySQL企业版备份将备份InnoDB的原生文件,包括:

  • ibdata*:共享表空间文件,包含系统表空间及部分用户表的数据。

  • mysql.ibd:mysql表空间文件,包含数据路径。

  • .ibd:独立表空间文件和通用表空间文件。

  • undo_*:Undo日志表空间文件。

  • ib_logfile*:从“ib_logfile*”文件抽取的备份文件名为“ibbackup_logfile”,包括备份期间发生更改产生的Redo日志信息。

备份非InnoDB时,需要MySQL中包含至少一个innoDB表,默认情况下,MySQL企业版将备份MySQL服务器数据路径下的全部文件,如果用户指定了“--only-known-file-types”选项,备份将仅包含MySQL相关的文件。

使用例——完整备份

注意,必须在MySQL服务器的主机上启动“mysqlbackup”。

    mysqlbackup --user=username --password --port=portnumber --backup_dir=backup-directory command

    “--backup_dir”选项指定存储备份文件的路径。“command”命令包括“backup”执行备份的初始部分,“backup-and-apply-log”执行备份的初始部分及第二部分,第二部分包括备份期间更改的数据内容。

    使用例——单一文件备份

    使用“backup-to-image”命令可以将备份写入一个单一文件,单一文件易于管理,并能够流式传送至其他服务器、磁带,云等。

      mysqlbackup -uuser -ppassword --backup_dir=temp-backup-dir --backup-image=image-file backup-to-image

      “--backup-image”选项指定用于存储备份的文件路径和名称。“--backup_dir”选项指定一个临时文件夹用于存储备份的元数据。

      备份过程

      1. “mysqlbackup”开启一个MySQL服务器的连接。

      2. “mysqlbackup”执行一个InnoDB在线备份。(该步骤不会干扰正常的数据库处理)

      3. 当“mysqlbackup”执行接近完成时,它将执行“LOCK INSTANCE FOR BACKUP”语句。该语句将阻挡DDL,但不会阻挡DML。

      4. 执行“FLUSH TABLES tbl_name, ...WITH READ LOCK”锁定非InnoDB表进行备份

      5. 备份结束,释放表和实例。

      增量备份

      增量备份仅备份从上一次备份结束后产生变化的数据,上一次备份可以是完整备份,也可以是一次增量备份。可以大幅提高备份速度,降低存储要求。例如:

        mysqlbackup --user=username --password --port=portnumber --incremental --incremental-base=history:last_backup --backup_dir=incr-backup-directory backup

        • “--incremental”选项表示执行一个增量备份。

        • “--incremental-base”选项用于指定上一次备份,并将上一次备份用于这次的增量备份。

        • “--incremental-base=history:last_backup”选项将使“mysqlbackup”查询上次记录在“bakupu_history”表中的“end_lsn”的值。此外,用户也可以指定“dir:directory_path”为“--incremental-base”指定包含上一次备份的路径。

        • “--start-lsn”用于替换“--incremental-base”选项,用户可以指定上一次备份中包含最高的LSN,用于此次的增量备份。

        差异备份

        差异备份属于特殊的增量备份,与增量备份的区别是上一次的备份必须是完整备份。例如:

          mysqlbackup --user=username --password --port-portnumber --incremental --incremental-base=history:last_full_backup --backup_dir=incr-backup-directroy backup

          用户也可以使用“backup-to-image”替换“backup”命令,并指定“--backup-image”选项,备份成为单一文件。

          “validate”操作

          “validate”命令用于校验备份的完整性,检查每个数据叶的校验和。

          校验备份文件:

            mysqlbackup --backup-image=image-file validate

            校验备份文件夹

              mysqlbackup --backup-dir=backup-directory validate

              恢复过程

              1. 关闭MySQL服务器

              2. 删除服务器数据路径下的全部文件

              3. 运行“mysqlbackup”从完整备份中恢复文件

              4. 恢复增量或差异备份的数据(如果适用)

              5. 应用备份文件后产生的二进制日志

              6. 启动MySQL服务器

              恢复命令

              “copy-back”:恢复备份路径(已使用“apply-log”保证一致性)。例如,将“backup-dir”中的文件恢复到服务器的数据路径:

                mysqlbackup --backup-dir=backup-dir copy-backup

                “copy-back-and-apply-log”:恢复单一文件或数据路径,并执行应用日志操作。例如,从“image-file”中恢复到服务器的数据路径,并使用“temp-backup-dir”存储临时文件:

                  mysqlbackup --backup-dir=temp-backup-dir --backup-image=image-file copy-back-and-apply-log

                  当使用“copy-back”命令时,“mysqlbackup”将复制数据文件、日志及其他的备份文件至其原来的位置,在恢复过程中,“mysqlbackup”无法从MySQL服务器查询相关的配置信息,只能通过标准的配置文件获得相关的选项,如果用户希望恢复到不同的服务器上,需要通过“--defaults-file”选项指定一个配置文件进行。
                  恢复增量备份时,首先需要恢复一个正确的基本备份,以用于增量或差异备份,其次使用“--incremental”选项进行恢复操作。例如:

                    mysqlbackup --incremental-backup-dir=incr-backup-dir --incremental copy-back-and-apply-log

                      mysqlbackup --backup-dir=temp-backup-dir --backup-image=image-file --incremental copy-backup-and-apply-log

                      更新操作

                      “mysqlbackup”可以在完整备份时,利用“apply-log”选项进行更新。

                        mysqlbackup --backup-dir=backup-dir apply-log

                        “backup-dir”中的完整备份可以使用“apply-incremental-backup”选项更新为增量备份。

                          mysqlbackup --incremental-backup-dir=incr-backup-dir --backup-dir=backup-dir apply-incremental-backup

                          单一文件操作

                          “mysqlbackup”可以将备份的路径转换为单一文件,例如:

                            mysqlbackup --backup_dir=backup-dir --backup-image=image-file backup-dir-to-image

                            列出单一文件的内容:

                              mysqlbackup --backup-image=image-file list-image

                              从单一文件中抽取文件:

                                mysqlbackup --backup-image=image-file --src-entry=file-to-extract --dst-entry=file-to-extract extract

                                “--src-entry”:指定一个文件或路径用于抽取。

                                “--dst-entry”:指定一个路径用于从单一文件中抽取文件或路径。

                                以上内容是关于MySQL企业版备份的介绍,感谢您关注“MySQL解决方案工程师”!

                                相关文章

                                Oracle如何使用授予和撤销权限的语法和示例
                                Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
                                下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
                                社区版oceanbase安装
                                Oracle 导出CSV工具-sqluldr2
                                ETL数据集成丨快速将MySQL数据迁移至Doris数据库

                                发布评论