欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

mysql 开发进阶篇系列 44 物理备份与恢复( 热备份xtrabackup 工具介绍)

程序员文章站 2024-02-14 23:59:04
一.概述 物理备份和恢复又分为冷备份和热备份。与逻辑备份相比,它最大优点是备份和恢复的速度更快。因为物理备份的原理都是基于文件的cp。 1.1 冷备份 冷备份就是停掉数据库服务。这种物理备份一般很少使用,因为很多应用是不允许长时间停机的。恢复操作大概是:首先停掉mysql服务, 在操作系统级别恢复m ......

一.概述

  物理备份和恢复又分为冷备份和热备份。与逻辑备份相比,它最大优点是备份和恢复的速度更快。因为物理备份的原理都是基于文件的cp。

  1.1 冷备份
    冷备份就是停掉数据库服务。这种物理备份一般很少使用,因为很多应用是不允许长时间停机的。恢复操作大概是:首先停掉mysql服务, 在操作系统级别恢复mysql的数据文件,然后重启mysql服务, 使用mysqlbinlog工具恢复自备份以来的所有binlog。估计这种方法跟sql server的分离附加库类似。由于会停机,冷备份就不在深入。

  1.2 热备份
    对于热备份有很多方法,本质其实就是将要备份的表加读锁,然后再cp数据文件到备份目录。对于热备份有很多第三方工具。使用最为广泛的好像是 xtrabackup 工具,该工具是用来备份mysql数据库的开源工具。
    

二. precona xtrabackup 介绍

  下面翻译来自官方文档 2.4版本,有些地方翻译后不是很懂,在后面继续学习xtrabackup中,一边实战一边理解,在回头把该介绍文档修正。

  2.1 xtrabackup介绍

    percona xtrabackup是一个开源的mysql服务器热备份工具,在备份期间不会锁定数据库。是一个编译好的c二进制文件,提供了用myisam、innodb和xtradb表备份整个mysql数据库实例的功能。现是最新版本是2.4,目前只支持在linux系统上。

    它可以在mysql 5.1、5.5、5.6和5.7服务器上备份innodb、xtradb和myisam表的数据,也可以用xtradb备份percona服务器的数据。

    无论是24x7高负载的服务器还是低事务量的环境,percona xtrabackup的设计目的是使备份成为一个无缝的过程,而不会破坏生产环境中服务器的性能。

   2.2 支持的备份类型

    (1)增量备份

    (2)部分备份

    (3)紧凑的备份

  2.3 高级特征
     (1)使用xtrabackup脚本备份

     (2)统计分析表

     (3)处理二进制日志

     (4)恢复单个表

     (5)lru转储备份

  2.4  xtrabackup备份功能   

    下面介绍下xtrabackup工具的主要特征,功能中讲到的drizzlemariadbpercona server等是mysql

supported mysql flavors

支持mysql分支类型

mysql, perconaserver, mariadb, percona xtradb cluster, mariadb galera cluster

supported operating systems

支持的操作系统: linux

non-blocking innodb backups

非阻塞innodb备份。在复制非innodb数据时,innodb表仍然是锁定的

blocking myisam backups

阻塞myisam备份

incremental backups

增量备份

full compressed backups

完全压缩备份

incremental compressed backups

增量压缩备份

fast incremental backups

快速增量备份。

percona服务器支持快速增量备份,支持xtradb更改页面跟踪

incremental backups with archived logs feature in percona server

percona服务器里带有归档日志特性的增量备份

incremental backups with redo log only

仅使用重做日志的增量备份

backup locks

备份锁是percona server 5.6+中具有读锁的表的轻量级替代方法。percona xtrabackup自动使用它们复制非innodb数据,以避免阻塞修改innodb表的dml查询。

encrypted backups

加密备份

streaming backups

流备份

parallel local backups

并行的本地备份

parallel compression

并行压缩

parallel encryption

并行加密

parallel apply-log

并行apply-log

parallel copy-back

并行copy-back

partial backups

部分备份

partial backups of individual partitions

各种分区的部分备份

point-in-time recovery support

时间点恢复支持

safe slave backups

安全的从库备份

compact backups

紧凑备份。percona xtrabackup在准备紧凑备份时跳过二级索引页并重新创建它们。mysql企业备份跳过未使用的页面并重新插入到准备阶段。

buffer pool state backups

缓冲池状态备份

individual tables export

各种表导出

individual partitions export

各种分区导出

restoring tables to a different server

将表还原到另一台服务器。使用percona xtrabackup导出的表可以导入percona server 5.15.55.6+mysql 5.6+。使用mysql企业备份创建的可传输表空间只能导入percona server 5.6+mysql 5.6+mariadb 10.0+

data & index file statistics

数据和索引文件统计

innodb secondary indexes defragmentation

innodb二级索引整理

support to minimize lock time

支持最小化锁的时间

backup history table

备份历史表

external graphical user interfaces to backup/recovery

用于备份/恢复的外部图形用户界面

  2.5 备份工作原理
    percona xtrabackup基于innodb的崩溃恢复功能, 它会复制innodb数据文件,这会导致内部不一致的数据, 然后,它对文件执行崩溃恢复,使它们再次成为一致的、可用的数据库。

    它的工作是因为innodb维护一个重做日志,也称为事务日志。这包含对innodb数据的每次更改的记录。当innodb启动时,它检查数据文件和事务日志,并执行两个步骤。它将提交的事务日志条目应用于数据文件,并对任何修改了数据但没有提交的事务执行撤销操作。

    percona xtrabackup的工作原理是在日志序列号(lsn)启动时记住它,然后复制数据文件。这样做需要一些时间,所以如果文件正在更改,那么它们就会在不同的时间点反映数据库的状态。同时,percona xtrabackup运行一个后台进程来监视事务日志文件,并从中复制更改。percona xtrabackup需要不断地这样做,因为事务日志是以循环方式编写的,并且可以在一段时间后重用。自从percona xtrabackup开始执行以来,对数据文件的每次更改都需要事务日志记录。

    percona xtrabackup将使用备份锁作为具有读锁的表的轻量级替代。这个特性在percona server 5.6+中可用。percona xtrabackup自动使用此功能复制非innodb数据,以避免阻塞修改innodb表的dml查询。当服务器支持备份锁时,xtrabackup首先复制innodb数据,运行锁表进行备份,然后复制myisam表和.frm文件。一旦完成,文件的备份将开始。它将备份.frm, . mrg, . myd, . myi, . trg, . trn, . arm, . arz, . csm, . csv, .par和.opt文件。

    在此之后,xtrabackup将使用lock binlog进行备份,以阻止显示主/从状态所报告的所有可能更改二进制日志位置或exec_master_log_pos或exec_gtid_set(即与复制从库上的当前sql线程状态对应的主库二进制日志坐标)的操作。然后xtrabackup将完成重做日志文件的复制,并获取二进制日志坐标。完成此操作后,xtrabackup将解锁二进制日志和表。

    最后,将二进制日志位置打印到stderr,如果一切正常,xtrabackup将退出返回0

    注意,xtrabackup的stderr没有写在任何文件中。您必须将其重定向到一个文件,例如,xtrabackup 选项2> backupout.log。

    它还将在备份目录中创建以下文件:

     在准备阶段,percona xtrabackup使用复制的事务日志文件对复制的数据文件执行崩溃恢复。完成之后,数据库就可以恢复和使用了。

     备份后的myisam表和innodb表最终会保持一致,因为在准备(恢复)过程之后,innodb的数据会向前滚到备份完成的地方,而不是回滚到备份开始的地方。这个时间点与具有读锁的flush tables表匹配,因此myisam数据和准备好的innodb数据是同步的。

     xtrabackup和innobackupex工具都提供了前面解释中没有提到的许多特性。每个工具的功能在手册中有更详细的说明。简单地说,这些工具允许您使用各种组合的数据文件复制、日志文件复制和对数据应用日志来执行流备份和增量备份等操作。

  2.6 恢复还原工作

    要使用xtrabackup恢复备份,您可以使用xtrabackup—copy-back或xtrabackup—move选项。

    xtrabackup将从my.cnf中读取datadir、innodb_data_home_dir、innodb_data_file_path、innodb_log_group_home_dir变量,并检查目录是否存在。

    它将首先复制myisam表、索引等(.frm、. mrg、. myd、. myi、. trg、. trn、. arm、. arz、. csm、. csv、par和.opt文件),然后复制innodb表和索引,最后复制日志文件。它将保留文件的属性,当复制它们时,您可能不得不在启动数据库服务器之前,将文件的所有权更改为mysql用户,因为它们将属于创建备份的用户。

    可以使用xtrabackup—move-back选项恢复备份。这个选项类似于xtrabackup——copy-back,唯一的区别是它将文件移动到目标位置,而不是复制文件。由于此选项删除了备份文件,因此必须谨慎使用。当没有足够的空闲磁盘空间来容纳数据文件和它们的备份副本时,它非常有用。