Xtrabackup是由percona提供的mysql数据库备份工具,据官方介绍,这也是世界上惟一一款开源的能够对innodb和xtradb数据库进行热备的工具。
Xtrabackup中主要包含两个工具:
xtrabackup:是用于热备份innodb, xtradb表中数据的工具,不能备份其他类型的表,也不能备份数据表结构;
innobackupex:是将xtrabackup进行封装的perl脚本,可以备份和恢复MyISAM表以及数据表结构。
一段官方文档的说明:
http://www.percona.com/doc/percona-xtrabackup/2.1/manual.html
It is possible to use the xtrabackup binary alone, however, the recommend way is using it through the innobackupex wrapper script and let it execute xtrabackup for you. It might be helpful to first learn how to use innobackupex, and then learn how to use xtrabackup for having a better low-level understanding or control of the tool if needed.


安装


1、首先从官网上http://www.percona.com/下载较新版本的xtrabackup
       percona-xtrabackup-2.2.7-5050-Linux-x86_64.tar.gz
2、开始安装xtrabackup
       1)解压
    tar -zxvf percona-xtrabackup-2.2.7-5050-Linux-x86_64.tar.gz
       2)拷贝innobackupex、 xtrabackup工具到/usr/bin


备份恢复


一、 全量备份
环境介绍:
  MySQL:5.6.19
  basedir:/u01/mysql
  datadir:/u01/mysql/data
步骤:
eg1:./innobackupex --user=root --password=root --host=172.17.210.112 --parallel=4 --throttle=400 --stream=tar /mysqlbak/innobackupex 2>/mysqlbak/innobackupex/bak.log 1>/mysqlbak/innobackupex/fullbak.tar
eg2:./innobackupex --user=root --password=root --host=172.17.210.112 --parallel=4 --throttle=400 /mysqlbak/innobackupex 2>/mysqlbak/innobackupex/bak.log 1>/mysqlbak/innobackupex/ 
 --user=root 备份操作用户名,一般都是root用户
 --password=root123 密码
 --host=172.17.210.112 备份主机IP
 --parallel=4 --throttle=400 并行个数,根据主机配置选择合适的,默认是1个,多个可以加快备份速度
 --stream=tar 压缩类型,这里选择tar格式,可选参数还有 xbstream
 --compress  压缩选项
 --compress-threads=4  压缩进程
 --slave-info 备份数据库show slave status中的部分状态信息
 --database=zztx单独对zztx数据库做备份,若是不添加此参数那就是对全库做备份
 /mysqlbak/innobackupex 备份存放的目录
 2>/mysqlbak/innobackupex/bak.log 备份日志,将备份过程中的输出信息重定向到bak.log
 1>/mysqlbak/innobackupex/fullbak.tar 备份文件压缩后的名字
查看日志信息,会出现:
141011 09:44:02 innobackupex: Executing FLUSH ENGINE LOGS...
141011 09:44:02 innobackupex: Waiting for log copying to finish
xtrabackup: The latest check point (for incremental): '14275993522'
xtrabackup: Stopping log copying thread.
.>> log scanned up to (14275993522)
xtrabackup: Creating suspend file '/tmp/xtrabackup_log_copied' with pid '19659'
141011 09:44:03 innobackupex: All tables unlocked
141011 09:44:03 innobackupex: Waiting for ibbackup (pid=19659) to finish
xtrabackup: Transaction log of lsn (14275990028) to (14275993522) was copied.
innobackupex: Backup created in directory '/mysqlbak/innobackupex'
141011 09:44:04 innobackupex: Connection to database server closed
innobackupex: You must use -i (--ignore-zeros) option for extraction of the tar stream.
141011 09:44:04 innobackupex: completed OK!
表示备份成功。


二、全量恢复
环境介绍:
MySQL:5.6.19
备份文件目录:/mysqlbak/innobackupex/
步骤:

1.应用日志
   [root@newbidb bin]# ./innobackupex --user=root --password=root1 --defaults-file=/etc/my.cnf --apply-log /mysqlbak/innobackupex//
 2.拷贝文件。
   [root@newbidb bin]# ./innobackupex --user=root --password=root1 --defaults-file=/etc/my.cnf --copy-back /mysqlbak/innobackupex//
  注释一下,常用的参数。
--defaults-file=/etc/my.cnf 恢复会使用my.cnf文件把需要恢复的文件,恢复到my.cnf指定的位置。
--apply-log 这是备份时产生的日志,
--copy-back 这是备份源,解压后的备份文件。
恢复需要一点点的时间,出现下面信息表示恢复成功。
innobackupex: Starting to copy InnoDB system tablespace
innobackupex: in '/mysqlbak/innobackupex/'
innobackupex: back to original InnoDB data directory '/u01/mysql/data'
innobackupex: Copying '/mysqlbak/innobackupex//ibdata1' to '/u01/mysql/data/ibdata1'
innobackupex: Starting to copy InnoDB undo tablespaces
innobackupex: in '/mysqlbak/innobackupex/'
innobackupex: back to '/u01/mysql/data'
innobackupex: Starting to copy InnoDB log files
innobackupex: in '/mysqlbak/innobackupex/'
innobackupex: back to original InnoDB log directory '/u01/mysql/data'
innobackupex: Copying '/mysqlbak/innobackupex//ib_logfile1' to '/u01/mysql/data/ib_logfile1'
innobackupex: Copying '/mysqlbak/innobackupex//ib_logfile0' to '/u01/mysql/data/ib_logfile0'
innobackupex: Finished copying back files. 
 3.修改文件权限。
  cd 到data目录
     chown -R mysql.mysql data/
 4.可能出现的报错:
 a.出现下面错误,先初始化一下mysql
  [root@newbidb support-files]# ./mysql.server start
   Starting MySQL...The server quit without updating PID file (/u01/mysql/data/newbidb.pid).[FAILED]
   [root@newbidb script]# ./mysql_install_db --basedir=/u01/mysql --no-defaults --skip-name-resolve --user=mysql --datadir=/u01/mysql/data
 b.权限:应该恢复使用的是root用户,但是MySQL需要MySQL用户去访问
  [root@newbidb support-files]# ./mysql.server restart
   MySQL server PID file could not be found![FAILED]
   Starting MySQL.The server quit without updating PID file (/u01/mysql/data/newbidb.pid).[FAILED]
 c.连接MySQL的时候
   [root@newbidb bin]# ./mysql -uroot -p
    Enter password:
    ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
   没有这个文件,touch mysql.sock 并修改文件权限。
 d.恢复备份文件是要保证datadir文件为空,否则会报如下的错误
  [root@newbidb data]# innobackupex --user=root /data/backup/
   IMPORTANT: Please check that the copy-back run completes successfully.
   At the end of a successful copy-back run innobackupex
   prints "completed OK!".
   Original data directory is not empty! at /usr/bin/innobackupex line 568.


备份原理


1. xtrabackup原理
官方文档:http://www.percona.com/docs/wiki/doku.php?id=percona-xtrabackup:xtrabackup_manual
XtraBackup对Innodb的备份之所以是热备,无需锁表,是基于Innodb自身的崩溃恢复机制,它首先复制所有的Innodb数据文件,这样复制出来的文件肯定是不一致的,然后对每个文件进行崩溃恢复处理,最终达到一致。就和MySQL在启动Innodb的时候一样,会通过比较数据文件头和redo log文件头信息来检查数据是否是一致的,如果不一致就尝试通过前滚(把redo log中所有提交的事务写入数据文件)和回滚(从数据文件中撤销所有redo log中未提交的事务引起的修改)来使数据达到最终一致。XtraBackup在启动的时候会记录一个LSN(log sequence number),然后就把所有的Innodb数据文件复制出来,这样复制出来的数据文件是不一致的,但是XtraBackup会在后台运行一个进程把所有对redo log file的修改记录下来,只要有了这个数据,就能进行崩溃恢复。之所以要额外记录下来,是因为MySQL自身的redo log file是可重用的。
以上的操作是由xtrabackup二进制程序(比如xtrabackup_55)完成的,如果使用innobackupex 脚本,刚才的步骤完成以后,innobackupex就会去备份MyISAM表和.frm文件,这时要保证数据的一致性就会先锁表了,通过FLUSH TABLES WITH READ LOCK命令锁表然后把文件复制出来,再释放掉这个锁。
在恢复数据的时候,要经过prepare(recovery)和restore两个步骤。在prepare结束以后,Innodb的表恢复到了复制Innodb文件结束的时间点,这个时间点也就是锁表复制MyISAM表的起点,所以最终数据是一致的。一般我们在恢复的时候执行两次prepare,是因为第二次prepare会帮助我们生成redo log文件,从而加快MySQL数据库启动的速度。
增量备份:
在InnoDB中,每个page中都记录LSN信息,每当相关数据发生改变,page的LSN就会自动增加,xtrabackup的增量备份就是依据这一原理进行的。
(1)首先完成一个完全备份,并记录下此时检查点LSN;
(2)然后增量备份时,比较表空间中每个页的LSN是否大于上次备份的LSN,若是则备份该页并记录当前检查点的LSN。
具体来说,首先在logfile中找到并记录最后一个checkpoint(“last checkpoint LSN”),然后开始从LSN的位置开始拷贝InnoDB的logfile到xtrabackup_logfile;然后开始拷贝全部的数据文件.ibd;在拷贝全部数据文件结束之后,才停止拷贝logfile。所以xtrabackup_logfile文件在并发写入很大时也会变得很大,占用很多空间,需要注意。另外当我们使用--stream=tar或者远程备份--remote-host时默认使用/tmp,但最好显示用参数--tmpdir指定,以免把/tmp目录占满影响备份以及系统其它正常服务。因为logfile里面记录全部的数据修改情况,所以即使在备份过程中数据文件被修改过了,恢复时仍然能够通过解析xtrabackup_logfile保持数据的一致。
2 innobackupex工作原理
官方文档:http://www.percona.com/doc/percona-xtrabackup/2.1/innobackupex/how_innobackupex_works.html
2.1 备份
如果在程序启动阶段未指定模式,innobackupex将会默认以备份模式启动。
默认情况下,此脚本以--suspend-at-end选项启动xtrabackup,然后xtrabackup程序开始拷贝InnoDB数据文件。当xtrabackup程序执行结束,innobackupex将会发现xtrabackup创建了xtrabackupsuspended2文件,然后执行FLUSH TABLES WITH READ LOCK,此语句对所有的数据库表加读锁,然后开始拷贝其他类型的文件。
如果--ibbackup未指定,innobackupex将会自行尝试确定使用的xtrabackup的binary。其确定binary的逻辑如下:首先判断备份目录中xtrabackup_binary文件是否存在,如果存在,此脚本将会依据此文件确定使用的xtrabackup binary。否则,脚本将会尝试连接database server,通过server版本确定binary。如果连接无法建立,xtrabackup将会失败,需要自行指定binary文件。
在binary被确定后,将会检查到数据库server的连接是否可以建立。其执行逻辑是:建立连接、执行query、关闭连接。若一切正常,xtrabackup将以子进程的方式启动。
FLUSH TABLES WITH READ LOCK是为了备份MyISAM和其他非InnoDB类型的表,此语句在xtrabackup已经备份InnoDB数据和日志文件后执行。在这之后,将会备份 .frm, .MRG, .MYD, .MYI, .TRG, .TRN, .ARM, .ARZ, .CSM, .CSV, .par, and .opt 类型的文件。
当所有上述文件备份完成后,innobackupex脚本将会恢复xtrabackup的执行,等待其备份上述逻辑执行过程中生成的事务日志文件。接下来,表被解锁,slave被启动,到server的连接被关闭。接下来,脚本会删掉xtrabackupsuspended2文件,允许xtrabackup进程退出。
2.2 恢复
为了恢复一个备份,innobackupex需要以--copy-back选项启动。
innobackupex将会首先通过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 and .opt files),接下来拷贝InnoDB表数据文件,最后拷贝日志文件。拷贝执行时将会保留文件属性,在使用备份文件启动MySQL前,可能需要更改文件的owener(如从拷贝文件的user更改到mysql用户)。

xtrabackup安装使用及原理的更多相关文章

  1. Percona XtraBackup 安装介绍篇

    XtraBackup介绍 XtraBackup是Percona公司的开源项目,用以实现类似Innodb官方的热备份工具InnoDB Hot Backup的功能,它支持在线热备份(备份时不影响数据读写) ...

  2. Xtrabackup安装及使用

    官方安装步骤:https://www.percona.com/doc/percona-xtrabackup/2.4/installation/yum_repo.html 安装percona repo源 ...

  3. android应用程序的安装方式与原理

    android应用程序的安装方式与原理 四种安装方式: 1.系统应用安装――开机时完成,没有安装界面 2.网络下载应用安装――通过market应用完成,没有安装界面 3.ADB工具安装――没有安装界面 ...

  4. 制作PHP安装程序的原理和步骤56

    制作PHP安装程序的原理和步骤56 1.制作PHP安装程序的原理和步骤检查目录或文件的权限----修改或填加配置文件---检查配置文件正 确性---导入数据库----锁定或删除安装文件 原理: 其实P ...

  5. PHP网站安装程序的原理及代码

    原文:PHP网站安装程序的原理及代码 原理: 其实PHP程序的安装原理无非就是将数据库结构和内容导入到相应的数据库中,从这个过程中重新配置连接数据库的参数和文件,为了保证不被别人恶意使用安装文件,当安 ...

  6. mysql 开发进阶篇系列 45 物理备份与恢复(xtrabackup 安装,用户权限,配置)

    一. 安装说明 安装XtraBackup 2.4 版本有三种方式: (1) 存储库安装Percona XtraBackup(推荐) (2 )下载的rpm或apt包安装Percona XtraBacku ...

  7. mysql备份学习笔记及xtrabackup安装

    (参考书籍:<深入浅出MySQL>) 一.备份恢复策略 a)      确定要备份的表的存储引擎是事务型还是非事务型 b)      确定使用全备份还是增量备份 c)      定期做备份 ...

  8. xtrabackup 安装

    xtrabackup 安装   yum install -y perl-DBI perl-DBD-MySQL perl-Time-HiRes perl-IO-Socket-SSL  perl-Dige ...

  9. xtrabackup 安装、备份、还原及错误处理 教程

    xtrabackup 是MYSQL的一个备份软件 Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工具InnoDB Hotbackup的一个 ...

随机推荐

  1. TableView下拉刷新崩溃解决办法

    return cell;上边加判断 if(self.dataArray.count<1){ return cell; }

  2. Linux系统下重启Tomcat

    在Linux系统下,重启Tomcat使用命令操作的! 首先,进入Tomcat下的bin目录 cd /usr/local/tomcat/bin 使用Tomcat关闭命令 ./shutdown.sh 查看 ...

  3. [z]dbms_stats.lock_table_stats对于没有统计信息的表分区同样有效

    常见的分区表DDL如 split partition.add partition都会生成没有统计信息的表分区table partition,长期以来我对dbms_stats.lock_table_st ...

  4. vuex,文件夹整理

    不多说直接上图 1,执行事件和调用 2添加模块 3模块内执行过程

  5. 9.28 h5日记

    9.28 1.transparent 透明的 颜色 2.placeholder 提示语 在input中使用 跟velue不同 3.写页面需要注意的 (1)页面一定要有层次,分清层次 (2)保证元素模块 ...

  6. c# usercontrol ,networkcomms3.0 Invoke总结

    1: accordionControl 添加了自定义控件页面 之后,切换到别的页面后,原先打开的页面对象还是存在的没有被销毁,再打开时重新引用即可 private void accordionCont ...

  7. 4J - 前m大的数

    还记得Gardon给小希布置的那个作业么?(上次比赛的1005)其实小希已经找回了原来的那张数表,现在她想确认一下她的答案是否正确,但是整个的答案是很庞大的表,小希只想让你把答案中最大的M个数告诉她就 ...

  8. PAT 1028 人口普查(20)(STL-set+思路+测试点分析)

    1028 人口普查(20)(20 分) 某城镇进行人口普查,得到了全体居民的生日.现请你写个程序,找出镇上最年长和最年轻的人. 这里确保每个输入的日期都是合法的,但不一定是合理的--假设已知镇上没有超 ...

  9. andorid 单选与复选

    activity_ui1.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout x ...

  10. hdu 1598 (并查集加贪心) 速度与激情

    题目传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1598 一道带有贪心思想的并查集 所以说像二分,贪心这类基础的要掌握的很扎实才行. 用结构体数组储存公 ...