2019独角兽企业重金招聘Python工程师标准>>>

Xtrabackup


Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工具InnoDB Hotbackup的一个很好的替代品。

Xtrabackup介绍

Xtrabackup有两个主要的工具:xtrabackup、innobackupex

  • xtrabackup只能备份InnoDB和XtraDB两种数据表,而不能备份MyISAM数据表
  • innobackupex是参考了InnoDB Hotbackup的innoback脚本修改而来的.innobackupex是一个perl脚本封装,封装了xtrabackup。主要是为了方便的同时备份InnoDB和MyISAM引擎的表,但在处理myisam时需要加一个读锁。并且加入了一些使用的选项。如slave-info可以记录备份恢复后,作为slave需要的一些信息,根据这些信息,可以很方便的利用备份来重做slave。

Xtrabackup功能

  • 在线(热)备份整个库的InnoDB、 XtraDB表

在xtrabackup的上一次整库备份基础上做增量备份(innodb only) 以流的形式产生备份,可以直接保存到远程机器上(本机硬盘空间不足时很有用)

  • 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保持数据的一致。

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。

1.下载&安装

yum安装

配置源

#vim /etc/yum.repos.d/percona.repo

[percona]
name = CentOS $releasever - Percona
baseurl=http://repo.percona.com/centos/$releasever/os/$basearch/
enabled = 1
gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-percona
gpgcheck = 1

添加key

#cd  /etc/pki/rpm-gpg

#wget http://www.percona.com/downloads/RPM-GPG-KEY-percona

yum安装xtrabackup

[root@server ~]# yum list |grep percona

Percona-SQL-50-debuginfo.i686              5.0.92-b23.85.rhel5         percona

Percona-SQL-client-50.i686                 5.0.92-b23.85.rhel5         percona

Percona-SQL-devel-50.i686                  5.0.92-b23.85.rhel5         percona

Percona-SQL-server-50.i686                 5.0.92-b23.85.rhel5         percona

Percona-SQL-shared-50.i686                 5.0.92-b23.85.rhel5         percona

Percona-SQL-shared-compat.i686             5.0.92-b23.85.rhel5         percona

Percona-SQL-test-50.i686                   5.0.92-b23.85.rhel5         percona

Percona-Server-51-debuginfo.i686           5.1.59-rel13.0.325.rhel5    percona

Percona-Server-51-debuginfo.i386           5.1.61-rel13.2.430.rhel5    percona

Percona-Server-55-debuginfo.i686           5.5.20-rel24.1.217.rhel5    percona

Percona-Server-client-51.i686              5.1.59-rel13.0.325.rhel5    percona

Percona-Server-client-51.i386              5.1.61-rel13.2.430.rhel5    percona

Percona-Server-client-55.i686              5.5.20-rel24.1.217.rhel5    percona

Percona-Server-devel-51.i686               5.1.59-rel13.0.325.rhel5    percona

Percona-Server-devel-51.i386               5.1.61-rel13.2.430.rhel5    percona

Percona-Server-devel-55.i686               5.5.20-rel24.1.217.rhel5    percona

Percona-Server-server-51.i686              5.1.59-rel13.0.325.rhel5    percona

Percona-Server-server-51.i386              5.1.61-rel13.2.430.rhel5    percona

Percona-Server-server-55.i686              5.5.20-rel24.1.217.rhel5    percona

Percona-Server-shared-51.i686              5.1.59-rel13.0.325.rhel5    percona

Percona-Server-shared-51.i386              5.1.61-rel13.2.430.rhel5    percona

Percona-Server-shared-55.i686              5.5.20-rel24.1.217.rhel5    percona

Percona-Server-shared-compat.i386          5.1.61-rel13.2.430.rhel5    percona

Percona-Server-shared-compat.i686          5.5.20-rel24.1.217.rhel5    percona

Percona-Server-test-51.i686                5.1.59-rel13.0.325.rhel5    percona

Percona-Server-test-51.i386                5.1.61-rel13.2.430.rhel5    percona

Percona-Server-test-55.i686                5.5.20-rel24.1.217.rhel5    percona

percona-toolkit.noarch                     2.0.3-1                     percona

xtrabackup.i386                            1.6.5-328.rhel5             percona

xtrabackup-debuginfo.i386                  1.6.5-328.rhel5             percona

#yum install xtrabackup

rpm安装

安装依赖包

$ yum install cmake gcc gcc-c++ libaio libaio-devel automake autoconf bzr bison libtool ncurses5-devel

下载包&安装

#wget http://www.percona.com/downloads/XtraBackup/XtraBackup-1.6.5/RPM/rhel6/x86_64/xtrabackup-1.6.5-328.rhel6.x86_64.rpm

#rpm xtrabackup-1.6.5-328.rhel6.x86_64.rpm

2,使用

Usage: [./xtrabackup [DEFAULTS OPTION] —backup | ./xtrabackup [DEFAULTS OPTION] —prepare] [OPTIONS]

Default options are read from the following files in this order: /etc/my.cnf, /opt/mysql-5.0.xx/etc/my.cnf, ~/.my.cnf

参数说明:

--defaults-file=   读my.cnf的位置,在DB服务器上有多实例时很有用,未指定将读/etc/my.cnf~(如要备份DB 3307的数据库,要单独指定3307的 my.cnf文件)

--datadir= 数据存放目录,和my.cnf中要相一致~ (必须,但实际上一般不用特别指定,因为会从my.cnf中去读取~)
--target-dir= 存放备份文件的目录,要使用绝对路径~ 若此目录开始不存在,则--backup选项会建立此目录~
--backup   备份InnoDB/XTraDB表空间,存放*.ibd及备份的log文件(xtrabackup_logfile)到 --target-dir目录~
--stats   统计分析innodb表存储信息,eg. xtrabackup --stats --defaults-file=/data/scrips/mysql_3306.cnf 
--prepare 返原innodb前要执行,prepare命令~ eg. xtrabackup --prepare --defaults-file=`pwd`/mysql_3306.cnf --throttle=2000 --target-dir=`pwd`/dbbak   
--print-param 主要用于innobackupex脚本copyback操作时, 打印出目标mysqld的参数~
--use-memory= 用于--prepare 或 --stats,在prepare相当于innodb_buffer_pool_size 作用~ eg.xtrabackup --use-memory=1G --stat
--export       --prepare操作时,导入其它数据库使用。在使用'ALTER TABLE … IMPORT TABLESPACE' 命令时,输出干净的.ibd files 或 .exp 文件.
--suspend-at-end 在backup操作时用于同步(synchronizing)
--log-stream --backup操作时,输出xtrabackup_logfile内容,innobackupex --stream 就使用此选项~
--incremental-lsn= 用于--backup. Copy only .ibd pages newer than specified LSN 'high:low'
--incremental-basedir= 用于增量备份backup~只拷贝比目标目录中更新的.ibd 文件~
--incremental-dir=name= 用于增量prepare,
--tables= innodb数据库使用file-per-table模式时,可用此选项备份部分表~也可用于stat操作时~
--throttle= 用于限制每秒中磁盘的读写操作~ 在线备份时非常有用~
--create-ib-logfile 用于--prepare时生成ib-logfile~ 注意:当前版本未实现,还是要re–prepare^_^
--tmpdir= 存放temporary files的路径~

3、innobackupex工具

(1)备份操作(下列是几个例子)

####备份employess数据库(普通备份)#### 
[root@SQL1 ~]# innobackupex-1.5.1 --defaults-file=/usr/local/mysql/etc/my.cnf --user=root --host=192.168.1.52 --password=XXXX --port=3306 --socket=/tmp/mysql.sock --slave-info --databases=employees /root/backup 1> process_log 2>&1 & 
注意:将数据库employees备份到目录/root/backup/XXXX下 
[root@SQL1 ~]# ls -l /root/backup 
total 4 
drwxr-xr-x 3 root root 4096 Apr 13 14:16 2010-04-13_14-14-43 
####备份给定的数据库列表中的数据库中(普通备份)#### 
[root@SQL1 ~]# cat backup_db_name 
school 
employees 
[root@SQL1 ~]# innobackupex-1.5.1 --defaults-file=/usr/local/mysql/etc/my.cnf --user=root --host=192.168.1.52 --password=XXXX --port=3306 --socket=/tmp/mysql.sock --slave-info --databases=/root/backup_db_name /root/backup 1> process_log 2>&1 & 
或者 
[root@SQL1 ~]# innobackupex-1.5.1 --defaults-file=/usr/local/mysql/etc/my.cnf --user=root --host=192.168.1.52 --password=XXXX --port=3306 --socket=/tmp/mysql.sock --slave-info --databases=“school employees” /root/backup 1> process_log 2>&1 & 
####备份employess数据库中的employess表(普通备份)#### 
[root@SQL1 ~]# innobackupex-1.5.1 --defaults-file=/usr/local/mysql/etc/my.cnf --user=root --host=192.168.1.52 --password=XXXX --port=3306 --socket=/tmp/mysql.sock --slave-info --databases="employees.employees" /root/backup 1> process_log 2>&1 & 
####备份所有的数据库,并打包(tar方式)##### 
[root@SQL1 ~]# innobackupex-1.5.1 --defaults-file=/usr/local/mysql/etc/my.cnf --user=root --host=192.168.1.52 --password=XXXX --port=3306 --socket=/tmp/mysql.sock --slave-info --stream=tar /root/backup 1> /root/backup/all_databases.tar 2> process_log & 
####备份所有的数据库并压缩,并打包压缩(tar+gzip方式)#### 
[root@SQL1 ~]# innobackupex-1.5.1 --defaults-file=/usr/local/mysql/etc/my.cnf --user=root --host=192.168.1.52 --password=XXXX --port=3306 --socket=/tmp/mysql.sock --slave-info --stream=tar /root/backup 2> process_log | gzip > /root/backup/all_databases.tar.gz &

注意:首先要先创建备份目录:/root/backup,--databases=[ db_name.tb_name | db_name ],如果不使用--databases参数的话,那么将备份所有的数据库

(2)恢复操作

(步骤:先apply log,再copy back,最后再chown -R mysql:mysql datadir)

####(普通备份)的还原操作###### 
[root@SQL1 ~]# ls -l /root/backup/2010-04-13_15-02-37/ 
total 223484 
-rw-r--r-- 1 root root 348 Apr 13 15:02 backup-my.cnf 
drwxr-xr-x 2 root root 4096 Apr 13 15:03 employees 
-rw-r--r-- 1 root root 228589568 Apr 13 15:03 ibdata1 
-rw-r--r-- 1 root root 0 Apr 13 15:03 mysql-stderr 
-rw-r--r-- 1 root root 379 Apr 13 15:03 mysql-stdout 
-rw-r--r-- 1 root root 1 Apr 13 15:03 xtrabackup_binlog_info 
-rw-r--r-- 1 root root 60 Apr 13 15:03 xtrabackup_checkpoints 
-rw-r--r-- 1 root root 2048 Apr 13 15:02 xtrabackup_logfile 
-rw-r--r-- 1 root root 53 Apr 13 15:03 xtrabackup_slave_info 
[root@SQL1 ~]# innobackupex-1.5.1 --defaults-file=/usr/local/mysql/etc/my.cnf --user=root --host=192.168.1.52 --password=XXXX --port=3306 --socket=/tmp/mysql.sock --apply-log /root/backup/2010-04-13_15-02-37 
[root@SQL1 ~]# innobackupex-1.5.1 --defaults-file=/usr/local/mysql/etc/my.cnf --user=root --host=192.168.1.52 --password=XXXX --port=3306 --socket=/tmp/mysql.sock --copy-back /root/backup/2010-04-13_15-02-37 
[root@SQL1 ~]# chown -R mysql:mysql /usr/local/mysql/data 
[root@SQL1 ~]# rm -rf /usr/local/mysql/data/xtrabackup* 
####(tar方式备份)的还原操作###### 
[root@SQL1 ~]# mkdir /root/backup/db 
[root@SQL1 ~]# tar -ixvf all_databases.tar -C /root/backup/db(先解压,注意必须跟-i参数) 
[root@SQL1 ~]# innobackupex-1.5.1 --defaults-file=/usr/local/mysql/etc/my.cnf --user=root --host=192.168.1.52 --password=XXXX --port=3306 --socket=/tmp/mysql.sock --apply-log /root/backup/db 
[root@SQL1 ~]# innobackupex-1.5.1 --defaults-file=/usr/local/mysql/etc/my.cnf --user=root --host=192.168.1.52 --password=XXXX --port=3306 --socket=/tmp/mysql.sock --copy-back /root/backup/db 
[root@SQL1 ~]# chown -R mysql:mysql /usr/local/mysql/data 
[root@SQL1 ~]# rm -rf /usr/local/mysql/data/xtrabackup 
[root@SQL1 ~]# rm -rf /root/backup/db 
####(tar+gzip方式备份)的还原操作###### 
[root@SQL1 ~]# mkdir /root/backup/db 
[root@SQL1 ~]# tar -izxvf all_databases.tar.gz -C /root/backup/db(先解压,注意必须跟-i参数) 
[root@SQL1 ~]# innobackupex-1.5.1 --defaults-file=/usr/local/mysql/etc/my.cnf --user=root --host=192.168.1.52 --password=XXXX --port=3306 --socket=/tmp/mysql.sock --apply-log /root/backup/db 
[root@SQL1 ~]# innobackupex-1.5.1 --defaults-file=/usr/local/mysql/etc/my.cnf --user=root --host=192.168.1.52 --password=XXXX --port=3306 --socket=/tmp/mysql.sock --copy-back /root/backup/db 
[root@SQL1 ~]# chown -R mysql:mysql /usr/local/mysql/data 
[root@SQL1 ~]# rm -rf /usr/local/mysql/data/xtrabackup 
[root@SQL1 ~]# rm -rf /root/backup/db

转载于:https://my.oschina.net/duxuefeng/blog/49148

mysql在线备份恢复--Xtrabackup相关推荐

  1. mysql物理备份工具Xtrabackup安装配置

    mysql物理备份工具Xtrabackup安装配置 1    Xtrabackup工具介绍 Xtrabackup是一个对InnoDB做物理数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业 ...

  2. 2.5.1 MySQL数据库备份恢复基础讲解

    MySQL数据库备份恢复基础 MySQL常见的故障类型 对于用户来说,数据库中保存的数据通常至关重要,所以要采取各种手段来防止各种可能的数据损失和数据故障. DBA主要任务就是维持数据库的高可靠性运行 ...

  3. MySQL的备份恢复

    mysql的备份恢复 知识要点 1.备份方式 2.mysqldump 3.如何进行备份恢复 4.xtrabackup 5.物理备份原理 6.如何进行物理备份 备份的目的 做灾难恢复:对损坏的数据进 ...

  4. mysql备份数据库语句6_13.4 MySQL用户管理;13.5 常用sql语句;13.6 MySQL数据库备份恢复...

    扩展 : SQL语句教程 什么是事务?事务的特性有哪些? 根据binlog恢复指定时间段的数据 mysql字符集调整 使用xtrabackup备份innodb引擎的数据库  innobackupex  ...

  5. mysql用户管理,常用sql语句,mysql数据库备份恢复

    2019独角兽企业重金招聘Python工程师标准>>> mysql用户管理 grant all on . to 'user1' identified by 'passwd'; gra ...

  6. 13.4 MySQL用户管理;13.5 常用sql语句;13.6 MySQL数据库备份恢复

    扩展 : SQL语句教程 http://www.runoob.com/sql/sql-tutorial.html 什么是事务?事务的特性有哪些? http://blog.csdn.net/yenang ...

  7. 52次课(mysql用户管理、常用sql语句、 mysql数据库备份恢复)

    MySQL创建用户以及授权 默认用户是root用户,不可能所有人员都用root用户,创建用户防止误删除,因为mysql里边有多个库每个库里有很多表,所以需要给单独的用户做一些授权我只需要它对某一个数据 ...

  8. MySQL用户管理、常用SQL语句、MySQL数据库备份恢复

    mysql用户管理 1.创建一个普通用户并授权 [root@gary-tao ~]# mysql -uroot -p'szyino-123' Warning: Using a password on ...

  9. 13.4 mysql用户管理 13.5 常用sql语句 13.6 mysql数据库备份恢复

    mysql用户管理 1.创建一个普通用户并授权 [root@gary-tao ~]# mysql -uroot -p'szyino-123' Warning: Using a password on ...

最新文章

  1. 关于软件开发你真正需要知道的几个事情
  2. 令人迷惑的ATT的jmp:直接跳转和间接跳转 [转]
  3. js遍历追加html子样式,前端基本功:JS(十一)动画封装(CSS样式获取、JSON遍历)...
  4. 服务器拉取openssl文件,使用openssl从服务器获取证书
  5. ArcObject开发,“异常在 ESRI.ArcGIS.Version.dll”错误
  6. 对I2C总线协议的一些理解
  7. 三、K8s常见操作命令
  8. 软考数据库系统工程师教材改版啦
  9. 修改XP登陆界面教程
  10. 新手与GitHub——菜鸟教程
  11. limesurvey php5.2,功能强大的PHP开源问卷调查系统 LimeSurvey 有中文语言包-win7中文语言包...
  12. matlab全局变量和局部变量和子函数
  13. O2O(online to offline)营销模式
  14. 一招教你解决Rational rose画时序图(Sequence diagram)时找不到参与者(Actor)的尴尬现场
  15. 两个小米路由器mini无线桥接
  16. 安卓初学者笔记(四):用白话讲明白Activity是什么
  17. 为什么要进行傅立叶变换?如何用Matlab实现快速傅立叶变换?
  18. 格里高利历java_Java 日历笔记
  19. windows10宽带连接无法打开移动热点wifi
  20. 新号连续3条视频破百万,这位唱rap的语文老师如何引爆全网

热门文章

  1. 《Skype for Business Server 2015-项目实战》
  2. 智能指针变量做函数参数的一个值得注意的地方
  3. 类似华容道一类搜索中,状态的Hash方法(转)
  4. Android学习导航线路
  5. 【运维安全】-MySQL手工注入
  6. Shell命令-系统信息及显示之free、cal
  7. [xsy1144]选物品
  8. Apple 如何知道你使用了私有API
  9. CodeForces 501B - Misha and Changing Handles
  10. MyBatis Review——一对多关系映射配置