mysql 5.6 linux备份_MySQL 5.6 XtraBackup 全量和增量的备份和恢复

xtrabackup 备份和恢复

较之于MySQL自身的备份mysqldump,类似于Oracle的export。小数据量时效率还行,当数据量达到一定规模时,使用mysqldump执行备份的时间也许还可接受,但恢复时间基本就不能忍受了。

这时就需要一种好用又高效的工具,xtrabackup就是其中一款,号称免费版的InnoDB HotBackup。

Xtrabackup提供了两种命令行工具:

xtrabackup:专用于备份InnoDB引擎的数据;

innobackupex:这是一个perl脚本,在执行过程中会调用xtrabackup命令,这样用该命令即可以实现备份InnoDB,也可以备份MyISAM引擎的对象。

一、Xtrabackup备份原理

XtraBackup基于InnoDB的crash-recovery功能。它会复制innodb的data file,由于不锁表,复制出来的数据是不一致的,在恢复的时候使用crash-recovery,使得数据恢复一致。

InnoDB维护了一个redo log,又称为transaction log,事务日志,它包含了innodb数据的所有改动情况。当InnoDB启动的时候,它会先去检查data file和transaction log,并且会做二步操作:

XtraBackup在备份的时候, 一页一页地复制innodb的数据,而且不锁定表,与此同时,XtraBackup还有另外一个线程监视着transactions log,一旦log发生变化,就把变化过的log pages复制走。为什么要急着复制走呢? 因为transactions log文件大小有限,写满之后,就会从头再开始写,所以新数据可能会覆盖到旧的数据。在prepare过程中,XtraBackup使用复制到的transactions log对备份出来的innodb data file进行crash recovery。

注意:xtrabackup只备份数据文件,并不备份数据表结构(.frm),所以使用xtrabackup恢复的时候,你必须有对应表结构文件(.frm)。

所以要手动备份一下,以便xtrabackup恢复的时候使用。

二、备份操作:

1 . 全量备份操作:

[root@zhanglin bin]./xtrabackup--backup --log-stream --target-dir=/mysqlbak/xtrabackup/20141022 --datadir=/usr/local/mysql/data

./xtrabackup version 2.2.3 based on MySQL server 5.6.17 Linux (x86_64) (revision id: )

xtrabackup: uses posix_fadvise().

xtrabackup: cd to /usr/local/mysql/data

xtrabackup: open files limit requested 0, set to 1024

xtrabackup: using the following InnoDB configuration:

xtrabackup: innodb_data_home_dir = ./

xtrabackup: innodb_data_file_path = ibdata1:10M:autoextend

xtrabackup: innodb_log_group_home_dir = ./

xtrabackup: innodb_log_files_in_group = 2

xtrabackup: innodb_log_file_size = 50331648

-------略

[01] Copying ./mdm_pro/org_organ_business_group.ibd to /mysqlbak/xtrabackup/20141022/mdm_pro/org_organ_business_group.ibd

[01] ...done

[01] Copying ./mdm_pro/coding_rule.ibd to /mysqlbak/xtrabackup/20141022/mdm_pro/coding_rule.ibd

[01] ...done

[01] Copying ./mdm_pro/org_store_channel.ibd to /mysqlbak/xtrabackup/20141022/mdm_pro/org_store_channel.ibd

[01] ...done

[01] Copying ./mdm_pro/dim_org_store.ibd to /mysqlbak/xtrabackup/20141022/mdm_pro/dim_org_store.ibd

[01] ...done

[01] Copying ./mdm_pro/org_organ_region.ibd to /mysqlbak/xtrabackup/20141022/mdm_pro/org_organ_region.ibd

[01] ...done

[01] Copying ./mdm_pro/org_organ_managing_city.ibd to /mysqlbak/xtrabackup/20141022/mdm_pro/org_organ_managing_city.ibd

[01] ...done

[01] Copying ./mdm_pro/pro_barcode.ibd to /mysqlbak/xtrabackup/20141022/mdm_pro/pro_barcode.ibd

[01] ...done

[01] Copying ./mdm_pro/type_duibi_back.ibd to /mysqlbak/xtrabackup/20141022/mdm_pro/type_duibi_back.ibd

[01] ...done

>> log scanned up to (18573586827)

[01] Copying ./mdm_pro/org_store.ibd to /mysqlbak/xtrabackup/20141022/mdm_pro/org_store.ibd

[01] ...done

>> log scanned up to (18573586827)

xtrabackup: The latest check point (for incremental): \'18573586827\'

xtrabackup: Stopping log copying thread.

.>> log scanned up to (18573586827)

xtrabackup: Transaction log of lsn (18573586258) to (18573586827) was copied.

[root@zhanglin bin]

2. 增量备份概念:

MySQL数据库本身提供的工具并不支持真正的增量备份,二进制日志恢复是point-in-time(时间点)的恢复而不是增量备份。Xtrabackup工具支持对InnoDB存储引擎的增量备份,工作原理如下:

(1)首先完成一个完全备份,并记录下此时检查点的LSN(Log Sequence Number)。

(2)在进程增量备份时,比较表空间中每个页的LSN是否大于上次备份时的LSN,如果是,则备份该页,同时记录当前检查点的LSN。

首先,在logfile中找到并记录最后一个checkpoint(“last checkpoint LSN”),然后开始从LSN的位置开始拷贝InnoDB的logfile到xtrabackup_logfile;接着,开始拷贝全部的数据文件

.ibd;在拷贝全部数据文件结束之后,才停止拷贝logfile。

因为logfile里面记录全部的数据修改情况,所以,即时在备份过程中数据文件被修改过了,恢复时仍然能够通过解析xtrabackup_logfile保持数据的一致。

在增量备份的目录下,数据文件都是以.delta结尾的。增量备份只备份上一次全量备份后被修改过的page,所以增量备份只暂用较少的空间。增量备份可以在增量备份的基础上增量。

增量备份优点:

1、数据库太大没有足够的空间全量备份,作增量备份有效节省空间,且效率高。

2、支持热备份。备份过程不锁表,不受时间限制,不影响用户使用。

3、每日备份只产生少量数据,远程备份传输更方便。同时节省空间。

4、备份恢复基于文件操作,降低直接对数据库操作风险。

5、备份效率更高,恢复效率更高。

提醒一下可能出现的错误:

(a)、在做增量备份的时候,如果--target-dir跟全量的一样,就会出现下面的报错

[root@zhanglin bin]# ./xtrabackup --backup --log-stream --target-dir=/mysqlbak/xtrabackup/20141022 --datadir=/usr/local/mysql/data --incremental-

basedir=/mysqlbak/xtrabackup/20141022_full_in

xtrabackup: Error: cannot open /mysqlbak/xtrabackup/20141022_full_in/xtrabackup_checkpoints

xtrabackup: error: failed to read metadata from /mysqlbak/xtrabackup/20141022_full_in/xtrabackup_checkpoints

(b)、 同时如果--incremental-basedir= 参数的最后目录不是base也会出错。

[root@zhanglin bin]# ./xtrabackup --backup --log-stream --target-dir=/mysqlbak/xtrabackup/20141022_full_in --datadir=/usr/local/mysql/data --incremental-

basedir=/mysqlbak/xtrabackup/20141022-test

xtrabackup: Error: cannot open /mysqlbak/xtrabackup/20141022-test/xtrabackup_checkpoints

xtrabackup: error: failed to read metadata from /mysqlbak/xtrabackup/20141022-test/xtrabackup_checkpoints

增量备份操作:

[root@zhanglin bin]# ./xtrabackup--backup--log-stream--target-dir=/mysqlbak/xtrabackup/20141022_full_in--datadir=/usr/local/mysql/data--incremental-basedir=/mysqlbak/xtrabackup/base

./xtrabackup version 2.2.3 based on MySQL server 5.6.17 Linux (x86_64) (revision id: )

incremental backup from 16888466657 is enabled.

xtrabackup: uses posix_fadvise().

xtrabackup: cd to /usr/local/mysql/data

xtrabackup: open files limit requested 0, set to 1024

xtrabackup: using the following InnoDB configuration:

xtrabackup: innodb_data_home_dir = ./

xtrabackup: innodb_data_file_path = ibdata1:10M:autoextend

xtrabackup: innodb_log_group_home_dir = ./

xtrabackup: innodb_log_files_in_group = 2

xtrabackup: innodb_log_file_size = 50331648

>> log scanned up to (18580258871)

>> log scanned up to (18580258871)

xtrabackup: using the full scan for incremental backup

[01] Copying ./ibdata1 to /mysqlbak/xtrabackup/20141022_full_in/ibdata1.delta

----略

[01] Copying ./mdm_pro/mid_org_area.ibd to /mysqlbak/xtrabackup/20141022_full_in/mdm_pro/mid_org_area.ibd.delta

[01] ...done

[01] Copying ./mdm_pro/org_organ_business_group.ibd to /mysqlbak/xtrabackup/20141022_full_in/mdm_pro/org_organ_business_group.ibd.delta

[01] ...done

[01] Copying ./mdm_pro/coding_rule.ibd to /mysqlbak/xtrabackup/20141022_full_in/mdm_pro/coding_rule.ibd.delta

[01] ...done

[01] Copying ./mdm_pro/org_store_channel.ibd to /mysqlbak/xtrabackup/20141022_full_in/mdm_pro/org_store_channel.ibd.delta

[01] ...done

[01] Copying ./mdm_pro/dim_org_store.ibd to /mysqlbak/xtrabackup/20141022_full_in/mdm_pro/dim_org_store.ibd.delta

[01] ...done

[01] Copying ./mdm_pro/org_organ_region.ibd to /mysqlbak/xtrabackup/20141022_full_in/mdm_pro/org_organ_region.ibd.delta

[01] ...done

[01] Copying ./mdm_pro/org_organ_managing_city.ibd to /mysqlbak/xtrabackup/20141022_full_in/mdm_pro/org_organ_managing_city.ibd.delta

[01] ...done

[01] Copying ./mdm_pro/pro_barcode.ibd to /mysqlbak/xtrabackup/20141022_full_in/mdm_pro/pro_barcode.ibd.delta

[01] ...done

[01] Copying ./mdm_pro/type_duibi_back.ibd to /mysqlbak/xtrabackup/20141022_full_in/mdm_pro/type_duibi_back.ibd.delta

>> log scanned up to (18580258871)

[01] ...done

[01] Copying ./mdm_pro/org_store.ibd to /mysqlbak/xtrabackup/20141022_full_in/mdm_pro/org_store.ibd.delta

[01] ...done

xtrabackup: The latest check point (for incremental): \'18580258871\'

xtrabackup: Stopping log copying thread.

.>> log scanned up to (18580258871)

xtrabackup: Transaction log of lsn (18580258871) to (18580258871) was copied.

[root@zhanglin bin]#

3、xtrabackup 参数介绍:

--defaults-file=#

默认配置文件的路径,如果不该参数,xtrabackup将从依次从以下位置查找配置文件/etc/my.cnf、/etc/mysql/my.cnf、/usr/local/etc/my.cnf、~/.my.cnf,并读取配置文件中的[mysqld]和

[xtrabackup]配置段。[mysqld]中只需要指定datadir、innodb_data_home_dir、innodb_data_file_path、innodb_log_group_home_dir、innodb_log_files_in_group、innodb_log_file_size

6个参数即可让xtrabackup正常工作。

--defaults-extra-file=# 如果使用了该参数,在读取了全局配置文件之后,会再读取这里指定的配置文件

--target-dir=name 备份文件的存放目录路径

--backup 实施备份到target-dir

--prepare 实施对备份文件进行恢复前的准备(生成InnoDB log file)

--print-param 打印备份或恢复时需要的参数

--use-memory=# 该参数在 prepare 的时候使用,控制prepare时innodb实例使用的内存量

--suspend-at-end 在target-dir目录下产生一个xtrabackup_suspended文件,将xtrabackup进程挂起,不停地将数据文件的变化同步到备份文件,直到用户手工删除

xtrabackup_suspended文件

--throttle=# 每秒IO次数,限制backup时使用的I/O操作量,使备份对数据库正常业务的影响最小化

--log-stream 该参数在backup的时候使用,将xtrabackup_logfile的内容标准输出,使用该参数时会自动使用suspend-at-end参数,innobackupex脚本的stream 模式会使用该参数。

--incremental-lsn=name 增量备份时只拷贝LSN比该参数指定值新的ibd pages,前次备份到了哪个LSN可以看前次备份集的xtrabackup_checkpoints文件

--incremental-basedir=name 该参数在backup的时候使用,备份比该参数指定位置的备份集新的idb pages

--incremental-dir=name 该参数在prepare的时候使用,指定prepare时产生的.delta 文件和日志文件的存放路径

--tables=name 在备份file-per-table类型的数据文件时使用,使用正则表达式指定需要备份的innodb表

--datadir=name MySQL数据库的数据文件目录。

三、全量和增量恢复:

我们需要分别对全量、增量备份各做一次prepare操作。如果只是做全量恢复,就只需要执行一次你之前的全量就可以了,这里给出命令。

./xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=/mysqlbak/xtrabackup/20141022

./xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=/mysqlbak/xtrabackup/20141022_full_in --incremental-basedir=/mysqlbak/xtrabackup/base

提醒:xtrabackup只备份InnoDB数据文件,表结构是不备份的,所以恢复的时候,你必须有对应表结构文件(.frm)。

更多XtraBackup相关教程见以下内容:

XtraBackup 的详细介绍:请点这里

XtraBackup 的下载地址:请点这里

0b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值