一、xtrabackup1、xtrabackup介绍perconaxtrabackup是开源免费的mysql数据库热备份软件,它能对innodb和xtradb存储引擎的数据库非阻塞地备份,据官方介绍,这也
一、xtrabackup
1、xtrabackup介绍
percona xtrabackup是开源免费的mysql数据库热备份软件,它能对innodb和xtradb存储引擎的数据库非阻塞地备份,据官方介绍,这也是世界上惟一一款开源的能够对innodb和xtradb数据库进行热备的工具
2、xtrabackup的特点
(1)在线热备整个库的innodb、xtradb表
(2)备份过程不会打断正在执行的事务;
(3)在xtrabackup的上一次整库备份基础上做增量备份(innodb only)
(4)自动实现备份检验;
(5)以流的形式产生备份,可以直接保存到远程主机上
3、xtrabackup有两个主要的工具
(1)xtrabackup
xtrabackup的增量备份只能备份innodb和xtradb两种数据表,而不能备份myisam数据表
(2)innobackupex
innobackupex是参考了innodb hotbackup的innoback脚本修改而来的.innobackupex是一个perl脚本封装,封装了xtrabackup。主要是为了方便的同时备份innodb和myisam引擎的表,但在处理myisam时需要加一个读锁。并且加入了一些使用的选项。如slave-info可以记录备份恢复后,作为slave需要的一些信息,根据这些信息,可以很方便的利用备份来重做slave。
4、增量备份的过程
(1)首先完成一个完全备份,并记录下此时检查点的lsn(log sequence number)。
(2)在进程增量备份时,比较表空间中每个页的lsn是否大于上次备份时的lsn,如果是,则备份该页,同时记录当前检查点的lsn。
首先,在logfile中找到并记录最后一个checkpoint(“last checkpoint lsn”),然后开始从lsn的位置开始拷贝innodb的logfile到xtrabackup_logfile;接着,开始拷贝全部的数据文件.ibd;在拷贝全部数据文件结束之后,才停止拷贝logfile。
因为logfile里面记录全部的数据修改情况,所以,即使在备份过程中数据文件被修改过了,恢复时仍然能够通过解析xtrabackup_logfile保持数据的一致。
5、xtrabackup备份原理
(1)xtrabackup基于innodb的crash-recovery功能。它会复制innodb的data file,由于不锁表,复制出来的数据是不一致的,在恢复的时候使用crash-recovery,使得数据恢复一致。
(2)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。
6、实现细节
xtrabackup以read-write模式打开innodb的数据文件,然后对其进行复制。其实它不会修改此文件。也就是说,运行xtrabackup的用户,必须对innodb的数据文件具有读写权限。之所以采用read-write模式是因为xtrabackup采用了其内置的innodb库来打开文件,而innodb库打开文件的时候就是rw的。
7、xtrabackup的安装
(1)所需软件,直接到percona官网下载即可
percona-toolkit-2.2.4-1.noarch.rpmpercona-xtrabackup-2.1.8-733.rhel6.x86_64.rpm因为percona-toolkit是perl组件,所以会依赖很多perl库,所以选择yum方式安装
二、xtrabackup完全备份的实现
1、前提准备
(1)创建数据备份目录
[root@shuishui ~]# mkdir /backups/(2)修改二进制日志文件存储路径
[root@shuishui ~]# vim /etc/my.cnflog-bin=/mydata/binlogs/master-bin(3)授权一个最小权限的用户进行复制
mariadb [(none)]> grant reload,lock tables,replication client on *.* to 'backup'@'localhost' identified by 'backup';mariadb [(none)]> flush privileges;2、完整备份的实现
(1)导入一个数据库,就不自己建库了
mariadb [hellodb]> set sql_log_bin=0; #导入数据库过程无需记录二进制日志,把以先暂时关闭mariadb [hellodb]> source hellodb.sql;mariadb [hellodb]> show databases;+--------------------+| database|+--------------------+| hellodb|| information_schema || makingware|| mysql|| performance_schema || test|| ultrax|+--------------------+mariadb [hellodb]> set sql_log_bin=1; #开启二进制日志(2)做完整备份
[root@shuishui ~]# innobackupex --user=backup --password=backup --host=localhost /backups/ #做完备…………innobackupex: backup created in directory '/backups/2014-04-21_11-28-06' #备份存储路径innobackupex: mysql binlog position: filename 'master-bin.000013', position 105544 #二进制日志及位置信息140421 11:28:15 innobackupex: connection to database server closed140421 11:28:15 innobackupex: completed ok! #只有到了这里才说明备份成功
看一下备份目录中生成的一些文件
[root@shuishui ~]# cd /backups/2014-04-21_11-28-06/[root@shuishui 2014-04-21_11-28-06]# lltotal 12388-rw-r--r--. 1 root root357 apr 21 11:28 backup-my.cnfdrwxr-xr-x. 2 root root4096 apr 21 11:28 hellodb-rw-r-----. 1 root root 12582912 apr 21 11:28 ibdata1drwxr-xr-x. 2 root root4096 apr 21 11:28 makingwaredrwx------. 2 root root4096 apr 21 11:28 mysqldrwxr-xr-x. 2 root root4096 apr 21 11:28 performance_schemadrwxr-xr-x. 2 root root4096 apr 21 11:28 testdrwxr-xr-x. 2 root root 61440 apr 21 11:28 ultrax-rw-r--r--. 1 root root13 apr 21 11:28 xtrabackup_binary-rw-r--r--. 1 root root27 apr 21 11:28 xtrabackup_binlog_info-rw-r-----. 1 root root89 apr 21 11:28 xtrabackup_checkpoints-rw-r-----. 1 root root2560 apr 21 11:28 xtrabackup_logfile[root@shuishui 2014-04-21_11-28-06]#