percona-xtrabackup

它是开源免费的支持MySQL 数据库热备份的软件,它能对InnoDB和XtraDB存储引擎的数据库非阻塞地备份。它不暂停服务创建Innodb热备份

为mysql做增量备份;在mysql服务器之间做在线表迁移;使创建replication更加容易;备份mysql而不增加服务器的负载。

percona是一家老牌的mysql技术咨询公司。它不仅提供mysql的技术支持、培训、咨询,还发布了mysql的分支版本--percona Server。并围绕

percona Server还发布了一系统的mysql工具。

=================================================================================

完全备份

增量备份

差异备份

xtrabackup

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

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

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

  • 备份过程快速、可靠;
  • 备份过程不会打断正在执行的事务;
  • 能够基于压缩等功能节约磁盘空间和流量;
  • 自动实现备份检验;
  • 还原速度快;

使用innobakupex备份时,其会调用xtrabackup备份所有的InnoDB表,复制所有关于表结构定义的相关文件(.frm)、以及MyISAM、MERGE、CSV和ARCHIVE表的相关文件,同时还会备份触发器和数据库配置信息相关的文件。这些文件会被保存至一个以时间命令的目录中。

(1)xtrabackup_checkpoints —— 备份类型(如完全或增量)、备份状态(如是否已经为prepared状态)和LSN(日志序列号)范围信息;每个InnoDB页(通常为16k大小)都会包含一个日志序列号,即LSN。LSN是整个数据库系统的系统版本号,每个页面相关的LSN能够表明此页面最近是如何发生改变的。

(2)xtrabackup_binlog_info —— mysql服务器当前正在使用的二进制日志文件及至备份这一刻为止二进制日志事件的位置。(3)xtrabackup_binlog_pos_innodb —— 二进制日志文件及用于InnoDB或XtraDB表的二进制日志文件的当前position。

(4)xtrabackup_binary —— 备份中用到的xtrabackup的可执行文件;

(5)backup-my.cnf —— 备份命令用到的配置选项信息;

安装xtrabackup

[root@localhost ~]# yum -y install percona-xtrabackup-2.1.9-744.rhel6.x86_64.rpm
[root@localhost ~]# rpm -ql percona-xtrabackup |grep bin
/usr/bin/innobackupex 支持myisam、innodb
/usr/bin/innobackupex-1.5.1
/usr/bin/xbcrypt
/usr/bin/xbstream
/usr/bin/xtrabackup 仅适用于percona Server
/usr/bin/xtrabackup_55 适用mysql 5.5数据库
/usr/bin/xtrabackup_56 适用mysql5.6数据库

完整备份实例



==备份==

[root@localhost ~]# innobackupex --host=localhost --socket=/tmp/mysql.sock --defaults-file=/etc/my.cnf --user=root --password=888 /mysqlbackup/full
[root@localhost ~]# ls /mysqlbackup/full/2015-09-15_11-03-03/
backup-my.cnf company mysql school test xtrabackup_binary xtrabackup_checkpoints
bbs   ibdata1 performance_schema shop weibo xtrabackup_binlog_info xtrabackup_logfile
[root@localhost 2015-09-15_11-03-03]# cat xtrabackup_binlog_info
localhost-bin.000003 2090096

==恢复==

a. 准备新环境

[root@localhost ~]# rm -rf /usr/local/mysql/data
[root@localhost ~]# chown -R mysql.mysql /usr/local/mysql
[root@localhost ~]# /usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data
[root@localhost ~]# killall -9 mysqld
[root@localhost ~]# service mysqld start

b. 恢复

[root@localhost ~]# innobackupex --host=localhost --socket=/tmp/mysql.sock --defaults-file=/etc/my.cnf --user=root --apply-log /mysqlbackup/full/2015-09-15_11-03-03/
[root@localhost ~]# rm -rf /usr/local/mysql/data/*
[root@localhost ~]# innobackupex --host=localhost --socket=/tmp/mysql.sock --defaults-file=/etc/my.cnf --user=root --copy-back /mysqlbackup/full/2015-09-15_11-03-03/
[root@localhost ~]# cd /usr/local/mysql
[root@localhost ~]# chown -R mysql.mysql .
[root@localhost ~]# killall -9 mysqld
[root@localhost ~]# service mysqld start

增量备份实例:

==备份==

1、完整备份:周一

create database testdb;
use testdb;
create table test(id int);
insert into test values(1);
select * from test;
[root@localhost ~]# innobackupex --host=localhost --socket=/tmp/mysql.sock --defaults-file=/etc/my.cnf --user=root --password=888 /mysqlbackup/full

2、增量备份:周二 —— 周六

insert into testdb.test values(2);
[root@localhost ~]# innobackupex --host=localhost --socket=/tmp/mysql.sock --defaults-file=/etc/my.cnf --user=root --password=888 --incremental /mysqlbackup/incremental
--incremental-basedir=完全备份目录
insert into testdb.test values(3);
[root@localhost ~]# innobackupex --host=localhost --socket=/tmp/mysql.sock --defaults-file=/etc/my.cnf --user=root --password=888 --incremental /mysqlbackup/incremental
--incremental-basedir=上次增量目录
insert into testdb.test values(4);
[root@localhost ~]# innobackupex --host=localhost --socket=/tmp/mysql.sock --defaults-file=/etc/my.cnf --user=root --password=888 --incremental /mysqlbackup/incremental
--incremental-basedir=上次增量目录

==恢复==

1.恢复全量的redo log

[root@localhost ~]# innobackupex --host=localhost --socket=/tmp/mysql.sock --defaults-file=/etc/my.cnf --user=root --password=888 --apply-log --redo-only /mysqlbackup/full/...

2.恢复增量的redo log

[root@localhost ~]# innobackupex --host=localhost --socket=/tmp/mysql.sock --defaults-file=/etc/my.cnf --user=root --password=888 --apply-log --redo-only /mysqlbackup/full/...
--incremental-dir=/mysqlbackup/incremental/第一次增量
[root@localhost ~]# innobackupex --host=localhost --socket=/tmp/mysql.sock --defaults-file=/etc/my.cnf --user=root --password=888 --apply-log --redo-only /mysqlbackup/full/...
--incremental-dir=/mysqlbackup/incremental/第二次增量
[root@localhost ~]# innobackupex --host=localhost --socket=/tmp/mysql.sock --defaults-file=/etc/my.cnf --user=root --password=888 --apply-log --redo-only /mysqlbackup/full/...
--incremental-dir=/mysqlbackup/incremental/第N次增量

3.关闭mysqld,替换数据文件(cp,rsyn,innobackupex copy-back),修改权限

4.启动mysqld

5.通过binlog增量恢复

create database testdb;
use testdb;
create table test(id int);
insert into test values(1);
select * from test; [root@localhost ~]# innobackupex --host=localhost --socket=/tmp/mysql.sock --defaults-file=/etc/my.cnf --user=root --password=888 /mysqlbackup/full

差异备份实例:

==备份==

1、完整备份:周一

2、差异备份:周二 —— 周六

insert into testdb.test values(2);
[root@localhost ~]# innobackupex --host=localhost --socket=/tmp/mysql.sock --defaults-file=/etc/my.cnf --user=root --password=888 --incremental /mysqlbackup/incremental
--incremental-basedir=完全备份目录
insert into testdb.test values(3);
[root@localhost ~]# innobackupex --host=localhost --socket=/tmp/mysql.sock --defaults-file=/etc/my.cnf --user=root --password=888 --incremental /mysqlbackup/incremental
--incremental-basedir=完全备份目录
insert into testdb.test values(4);
[root@localhost ~]# innobackupex --host=localhost --socket=/tmp/mysql.sock --defaults-file=/etc/my.cnf --user=root --password=888 --incremental /mysqlbackup/incremental
--incremental-basedir=完全备份目录

==恢复==

1.恢复全量的redo log

[root@localhost ~]# innobackupex --host=localhost --socket=/tmp/mysql.sock --defaults-file=/etc/my.cnf --user=root --password=888 --apply-log --redo-only /mysqlbackup/full/...

2.恢复差异的redo log

[root@localhost ~]# innobackupex --host=localhost --socket=/tmp/mysql.sock --defaults-file=/etc/my.cnf --user=root --password=888 --apply-log --redo-only /mysqlbackup/full/...
--incremental-dir=/mysqlbackup/incremental/某个差异备份

3.关闭mysqld,替换数据文件(cp,rsyn),修改权限

4.启动mysqld

5.通过binlog增量恢复

备份单库、多库、多表单数据库备份

innobackupex --defaults-file=/etc/my.cnf --socket=/tmp/mysql.sock --databases=uplook --no-timestamp /server/backup/uplook

多数据库备份innobackupex --user=root --password=123456 --include='dba.*|dbb.*' /server/backup

多表备份方法一:innobackupex --user=root --password=123456 --include='dba.tablea|dbb.tableb' /server/backup

方法二:使用--tables-file参数,这种方式是将所有要备份的完整表名都写在一个文本文件中,每行一个完整表名,然后程序读取这个文本文件进行备份。完整表名即:databasename.tablename

echo "lianxi.Student" >/tmp/table1.txt

innobackupex --defaults-file=/etc/my.cnf --socket=/tmp/mysql.sock --tables-file='/tmp/table1.txt' --no-timestamp /server/backup/table1

恢复单库、多库、多表单数据库恢复应用日志:

innobackupex --apply-log /server/backup/uplook

删除数据库数据文件:systemctl stop mysql;rm -rf /usr/local/mysql/data/*

还原数据:innobackupex --copy-back /server/backup/uplook

授权:chown -R mysql.mysql /usr/local/mysql

初始化数据库:/usr/local/mysql/scripts/mysql_install_db --user=mysql --datadir=/usr/local/mysql/data --basedir=/usr/local/mysql --explicit_defaults_for_timestamp

启动数据库:systemctl start mysql

测试:mysql -e "select * from uplook.Student;"

多表数据恢复应用日志:

innobackupex --apply-log --export /server/backup/table1/

定义表--删除表空间--拷贝*.ibd/*.cfg文件--导入表空间

定义表:模拟删除表,重新定义表结构,过程略

删除表空间:mysql> ALTER TABLE Student DISCARD TABLESPACE;

拷贝*.ibd/*.cfg文件:[root@localhost ~]# cp /server/backup/table1/lianxi/Student.{cfg,ibd} /usr/local/mysql/data/lianxi/

[root@localhost ~]# chown -R mysql.mysql /usr/local/mysql/data/lianxi/

导入表空间:mysql> ALTER TABLE Student IMPORT TABLESPACE;

测试:mysql> select * from Student;

MySQL数据物理备份之xtrabackup的更多相关文章

  1. MySQL数据物理备份之lvm快照

    使用lvm快照实现物理备份 优点: 几乎是热备(创建快照前把表上锁,创建完后立即释放) 支持所有存储引擎 备份速度快 无需使用昂贵的商业软件(它是操作系统级别的) 缺点: 可能需要跨部门协调(使用操作 ...

  2. MySQL数据物理备份之tar打包备份

    复制数据文件方式,可以使用cp或tar 1.停止服务 [root@localhost mysql]# systemctl stop mysqld [root@localhost mysql]# net ...

  3. MySQL · 物理备份 · Percona XtraBackup 备份原理

    http://mysql.taobao.org/monthly/2016/03/07/ 前言 Percona XtraBackup(简称PXB)是 Percona 公司开发的一个用于 MySQL 数据 ...

  4. (4.15)mysql备份还原——物理备份之XtraBackup的下载与安装

    关键词:mysql物理备份,XtraBackup,XtraBackup安装,XtraBackup下载 实践链接:https://www.cnblogs.com/gered/p/11147193.htm ...

  5. (4.16)mysql备份还原——物理备份之XtraBackup实践

    关键词:XtraBackup实践,物理备份,xtrabackup备份,innobackupex备份 [1]如何使用? [3]系列:innobackupex --help |more [4]系列:xtr ...

  6. mysql数据的备份

    一.备份方式 1.备份:逻辑备份(mysqldump,mydumper).物理备份(xtrabackup.tar.cp.rsync)    2.冗余:主备模式.数据库集群 二.备份对象 1.数据(库. ...

  7. 使用 xtrabackup 进行MySQL数据库物理备份

    0. xtrabackup的功能 能实现的功能: 非阻塞备份innodb等事务引擎数据库. 备份myisam表会阻塞(需要锁). 支持全备.增量备份.压缩备份. 快速增量备份(xtradb,原理类似于 ...

  8. MySQL 物理备份工具-xtrabackup

    安装 wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo yum -y install perl ...

  9. mysql物理备份恢复 xtrabackup 初试

    听闻xtrabackup开源且强大 2018-03-06 11:54:41 在官网下载安装了最新的2.4.9版本 网上文章都用的innobackupex,但是最新版已经抛弃了,自己看看手册<Pe ...

随机推荐

  1. CF1175F The Number of Subpermutations

    题目链接 题意 给出一个长度为\(n\)的序列\(a\),问有多少个区间\([l,r]\)满足:在区间\([l,r]\)内,\([1,r-l+1]\)的每个整数都恰好出现了一次. \(n \le 3 ...

  2. [LeetCode] 18. 4Sum 四数之和

    Given an array S of n integers, are there elements a, b, c, and d in S such that a + b + c + d = tar ...

  3. Jquery表单插件使用

    一般表单提交都是同步,可以使用$.post进行异步提交,但这样意味着当表单属性很多的时候,要写的js也很多($("#xxx").val()获取属性的值后,在放入$.post第二个参 ...

  4. netcat 传输T级别大文件

    接收端 nc -d -l 5002 |tar xf - nohup  sh receive.sh  &   发送端 tar cf - . | nc  1.1.1.1  5002 nohup   ...

  5. Qt 窗口操作函数(置顶、全屏,最大化最小化按钮设置等)

    一.窗口置顶 与 取消置顶 void MainWindow::on_windowTopButton_clicked() { if (m_flags == NULL) { m_flags = windo ...

  6. 【转】PyQt弹出式对话框的常用方法及标准按钮类型

    pyQt之弹出式对话框(QMessageBox)的常用方法及标准按钮类型 一.控件说明 QMessageBox是一种通用的弹出式对话框,用于显示消息,允许用户通过单击不同的标准按钮对消息进行反馈,且每 ...

  7. mybatis 的 dao 接口跟 xml 文件里面的 sql 是如何建立关系的?

    mybatis 会先解析这些xml 文件,通过 xml 文件里面的命名空间 (namespace)跟dao 建立关系:然后 xml 中的每段 sql 会有一个id 跟 dao 中的接口进行关联. 那么 ...

  8. [Python学习笔记-007] 使用PyEnchant检查英文单词

    最近在教儿子做自然拼读,跟他玩了一个单词游戏,就是利用简单的枚举找出适合小朋友学习的两个字母的单词.人工找寻难免有疏漏之处,这里使用PyEnchant给出一个简单的脚本. 01 - foo.py #! ...

  9. 常见的Redis面试"刁难"问题,值得一读

    Redis有哪些数据结构? 字符串String.字典Hash.列表List.集合Set.有序集合SortedSet. 如果你是Redis中高级用户,还需要加上下面几种数据结构HyperLogLog.G ...

  10. java.lang.IllegalStateException: Received message from unsupported version: [5.2.2] minimal compatible version is: [5.6.0]

    启动elasticsearch-6.2.2-Windows服务时报错: java.lang.IllegalStateException: Received message from unsupport ...