前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL的备份工具——MySQL企业版备份

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

作者头像
MySQLSE
发布2024-03-12 08:55:25
1370
发布2024-03-12 08:55:25
举报

在上一篇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”。

代码语言:javascript
复制
mysqlbackup --user=username --password --port=portnumber --backup_dir=backup-directory command

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

使用例——单一文件备份

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

代码语言:javascript
复制
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. 备份结束,释放表和实例。

增量备份

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

代码语言:javascript
复制
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,用于此次的增量备份。

差异备份

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

代码语言:javascript
复制
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”命令用于校验备份的完整性,检查每个数据叶的校验和。

校验备份文件:

代码语言:javascript
复制
mysqlbackup --backup-image=image-file validate

校验备份文件夹

代码语言:javascript
复制
mysqlbackup --backup-dir=backup-directory validate

恢复过程

  1. 关闭MySQL服务器
  2. 删除服务器数据路径下的全部文件
  3. 运行“mysqlbackup”从完整备份中恢复文件
  4. 恢复增量或差异备份的数据(如果适用)
  5. 应用备份文件后产生的二进制日志
  6. 启动MySQL服务器

恢复命令

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

代码语言:javascript
复制
mysqlbackup --backup-dir=backup-dir copy-backup

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

代码语言:javascript
复制
mysqlbackup --backup-dir=temp-backup-dir --backup-image=image-file copy-back-and-apply-log

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

代码语言:javascript
复制
mysqlbackup --incremental-backup-dir=incr-backup-dir --incremental copy-back-and-apply-log
代码语言:javascript
复制
mysqlbackup --backup-dir=temp-backup-dir --backup-image=image-file --incremental copy-backup-and-apply-log

更新操作

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

代码语言:javascript
复制
mysqlbackup --backup-dir=backup-dir apply-log

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

代码语言:javascript
复制
mysqlbackup --incremental-backup-dir=incr-backup-dir --backup-dir=backup-dir apply-incremental-backup

单一文件操作

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

代码语言:javascript
复制
mysqlbackup --backup_dir=backup-dir --backup-image=image-file backup-dir-to-image

列出单一文件的内容:

代码语言:javascript
复制
mysqlbackup --backup-image=image-file list-image

从单一文件中抽取文件:

代码语言:javascript
复制
mysqlbackup --backup-image=image-file --src-entry=file-to-extract --dst-entry=file-to-extract extract

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-03-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 MySQL解决方案工程师 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档