zoukankan      html  css  js  c++  java
  • mysql备份工具之xtrabackup

    xtrabackup是perconna公司的产品

    mysql5.7之前(包含5.7)使用xtrabackup - Percona XtraBackup 2.4 ,mysql8.0以上使用Xtrabackup8.0.

    首先XtraBackup有两个工具,一个xtrabackup,一个innobackupex 。2.4版本中已经把两个工具和在一起了,innobackupex只是xtarbackup的一个链接。

     创建一个全量备份

    xtrabackup --backup --target-dir=/data/backups/base  --datadir=/var/lib/mysql/

    注: --target-dir备份目录     --datadir需要备份的数据目录

     备份文件下面除了数据文件外还有xtrabackup的一些信息文件。

    backup-my.cnf

    此文件中包含了my.cnf中的一些设置信息,但是,并不是my.cnf中的所有信息都会包含在此文件中,此文件中只包含了备份时需要的信息。

    xtrabackup_binlog_info

    此文件中记录了备份开始时二进制日志文件的"位置(position)"

    xtrabackup_checkpoints

    此文件中记录此次备份属于那种类型的备份,是全量还是增量,备份时起始的LSN号码,结束的LSN号码等信息。

    xtrabackup_info

    本次备份的概要信息,此文件中的信息还是比较全面的。

    xtrabackup_logfile

    记录了备份过程中的日志,在对数据进行prepare时需要通过日志将数据还原成一致的可用的数据。

    增量备份

    第一次增备:

    xtrabackup    --backup    --target-dir=/data/backups/inc1    --incremental-basedir=/data/backups/base    --datadir=/var/lib/mysql/

    第二次增备:

    xtrabackup    --backup    --target-dir=/data/backups/inc2    --incremental-basedir=/data/backups/inc1     --datadir=/var/lib/mysql/

    注:第二次增备是在第一次增备的基础上进行备份的,这个取决于--incremental-basedir,如果--incremental-basedir是全量备份的目录,则在全量备份的基础上进行增备。

    数据库在还原的时候需要先执行一下准备步骤:

    xtrabackup    --prepare    

    这一步有两个操作:一个是把日志文件中的已提交的事务写入数据文件,一个是回滚未提交的事务。

    增量备份的xtrabackup--prepare步骤与普通全备备份不同。在正常全备备份中,两种类型的操作形式是为了让数据库保持一致性。

    增量备份准备步骤时必须跳过未提交事务的回滚,这时候需要用到选项--apply-log-only,因为在备份时可能正在进行中,很可能会在下一次增量备份中提交。只需要在最后一次增量准备中回滚数据即可。

    注意:

    如果在增量备份准备步骤中没有使用xtrabackup --prepare  --apply-log-only  选项,会导致你接下来的增量备份数据不可用。因为在事务被回滚后,下面的增量备份不能被应用。

    例如:下面有三个备份文件,一个全备,两个增备:

    /data/backups/base
    /data/backups/inc1
    /data/backups/inc2

    准备(prepare)基本备份,组织回滚操作:

    xtrabackup --prepare --apply-log-only --target-dir=/data/backups/base

    输出的结束文本内容类似于下面这样:

    101107 20:49:43  InnoDB: Shutdown completed; log sequence number 1291135

    log sequence number需要匹配上base backup 中的to_lsn。

    此备份实际上可以安全地恢复到现在的状态,即使已跳过回滚阶段。如果您恢复它并启动MySQL,InnoDB将检测到回滚阶段没有执行,并且它将在后台执行该操作,就像通常用于开始时的崩溃恢复一样。它会通知您数据库没有正常关闭。

    当应用第一个增量备份到全备的时候,需要执行下面这段命令:

    xtrabackup   --prepare   --apply-log-only   --target-dir=/data/backups/base   --incremental-dir=/data/backups/inc1

    这会将增量文件应用于/data/backups/base中的文件,这会将增量文件按时间向前滚动到增量备份的时间。然后它像往常一样应用重做日志到结果中。最后的数据在/data/backups/base中,而不是在增量目录中。你应该看看一些输出,如:

    incremental backup from 1291135 is enabled.
    xtrabackup: cd to /data/backups/base/
    xtrabackup: This target seems to be already prepared.
    xtrabackup: xtrabackup_logfile detected: size=2097152, start_lsn=(1291340)
    Applying /data/backups/inc1/ibdata1.delta ...
    Applying /data/backups/inc1/test/table1.ibd.delta ...
    .... snip
    101107 20:56:30 InnoDB: Shutdown completed; log sequence number 1291340

    同样,LSN应该与您先前检查第一个增量备份时看到的内容相匹配。如果整修数据文件/data/backups/base,您应该可以看到第一次增量备份时数据库的状态。

    准备第二次增量备份的过程与此类似:将增量应用于(修改的)基本备份,然后您将滚动其数据及时转发到第二个增量备份点:

    xtrabackup   --prepare   --target-dir=/data/backups/base    --incremental-dir=/data/backups/inc2

    提示:

    xtrabackup  --apply-log-only 选项只用在增量全恢复中,但最后一个增量文件恢复除外。这就是为什么上面一行没有包含xtrabackup  --apply log only选项。即使在最后一步中使用了xtrabackup--apply log,备份仍然是

    一致,但在这种情况下,服务器将执行回滚阶段。

    做完准备工作后,需要把备份的数据恢复,无论是新的库还是以前的库,都应该保证恢复的位置是空的,没有数据。因为默认不会覆盖已经存在的数据文件,除非指定选项 --force-non-empty-directories ,但最好是一个空库,把数据文件全给删除。

    xtrabackup   --copy-back   --datadir=还原的库    --target-dir=/home/mysql3306/back  --force-non-empty-directories 

    xtrabackup    --copy-back   --datadir=还原的库     --target-dir=/home/mysql3306/back

    注:datadir表示新的数据目录,这个可以使用参数指定,可以用添加在默认的配置文件里指定参数--defaults-file=my.cnf.

    当启用了单独表空间(innodb_file_per_table)后,xtrabackup支持部分备份。这里有三种方式支持部分备份:

    1、可以用正则表达式匹配表名;

    2、在文件中提供表列表;

    3、提供数据库列表。

    示例:

    1、$ xtrabackup --backup --datadir=/var/lib/mysql --target-dir=/data/backups/ --tables="^test[.].*"

    2、$ echo "mydatabase.mytable" > /tmp/tables.txt
          $ xtrabackup --backup --tables-file=/tmp/tables.txt

    3、$ xtrabackup --databases='mysql sys performance_schema ...'

    还有一些高级特性,待续。。。。。。。。。。。。

  • 相关阅读:
    VUE单页模板
    Nacos(作为配置中心)
    OpenFeign与Nacos(作为注册中心) 远程调用
    Nacos 服务注册
    Docker 安装Redis
    Docker安装Mysql
    多线程之CAS和ABA
    Volatile
    JAVA语言的特点
    判断多选按钮被选中两种方法
  • 原文地址:https://www.cnblogs.com/wonchaofan/p/13385276.html
Copyright © 2011-2022 走看看